cjson
.github
workflows CI.yml ci-fuzz.yml
CONTRIBUTING.md
fuzzing
inputs test1 test10 test11 test2 test3 test3.bu test3.uf test3.uu test4 test5 test6 test7 test8 test9
.gitignore CMakeLists.txt afl-prepare-linux.sh afl.c afl.sh cjson_read_fuzzer.c fuzz_main.c json.dict ossfuzz.sh
library_config cJSONConfig.cmake.in cJSONConfigVersion.cmake.in libcjson.pc.in libcjson_utils.pc.in uninstall.cmake
tests
inputs test1 test1.expected test10 test10.expected test11 test11.expected test2 test2.expected test3 test3.expected test4 test4.expected test5 test5.expected test6 test7 test7.expected test8 test8.expected test9 test9.expected
json-patch-tests .editorconfig .gitignore .npmignore README.md cjson-utils-tests.json package.json spec_tests.json tests.json
unity
auto colour_prompt.rb colour_reporter.rb generate_config.yml generate_module.rb generate_test_runner.rb parse_output.rb stylize_as_junit.rb test_file_filter.rb type_sanitizer.rb unity_test_summary.py unity_test_summary.rb unity_to_junit.py
docs ThrowTheSwitchCodingStandard.md UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf UnityAssertionsReference.md UnityConfigurationGuide.md UnityGettingStartedGuide.md UnityHelperScriptsGuide.md license.txt
examples
example_1
src ProductionCode.c ProductionCode.h ProductionCode2.c ProductionCode2.h
makefile readme.txt
example_2
src ProductionCode.c ProductionCode.h ProductionCode2.c ProductionCode2.h
makefile readme.txt
example_3
helper UnityHelper.c UnityHelper.h
src ProductionCode.c ProductionCode.h ProductionCode2.c ProductionCode2.h
rakefile.rb rakefile_helper.rb readme.txt target_gcc_32.yml
unity_config.h
extras
eclipse error_parsers.txt
fixture
src unity_fixture.c unity_fixture.h unity_fixture_internals.h unity_fixture_malloc_overrides.h
rakefile.rb rakefile_helper.rb readme.txt
release build.info version.info
src unity.c unity.h unity_internals.h
.gitattributes .gitignore .travis.yml README.md
CMakeLists.txt cjson_add.c common.h compare_tests.c json_patch_tests.c minify_tests.c misc_tests.c misc_utils_tests.c old_utils_tests.c parse_array.c parse_examples.c parse_hex4.c parse_number.c parse_object.c parse_string.c parse_value.c parse_with_opts.c print_array.c print_number.c print_object.c print_string.c print_value.c readme_examples.c unity_setup.c
.editorconfig .gitattributes .gitignore .travis.yml CHANGELOG.md CMakeLists.txt CONTRIBUTORS.md LICENSE Makefile README.md SECURITY.md appveyor.yml cJSON.c cJSON.h cJSON_Utils.c cJSON_Utils.h test.c valgrind.supp
curl
.circleci config.yml
.github
ISSUE_TEMPLATE bug_report.yml config.yml docs.yml
scripts cleancmd.pl cmp-config.pl cmp-pkg-config.sh codespell-ignore.words codespell.sh distfiles.sh pyspelling.words pyspelling.yaml randcurl.pl requirements-docs.txt requirements-proselint.txt requirements.txt shellcheck-ci.sh shellcheck.sh spellcheck.curl trimmarkdownheader.pl typos.sh typos.toml verify-examples.pl verify-synopsis.pl yamlcheck.sh yamlcheck.yaml
workflows appveyor-status.yml checkdocs.yml checksrc.yml checkurls.yml codeql.yml configure-vs-cmake.yml curl-for-win.yml distcheck.yml fuzz.yml http3-linux.yml label.yml linux-old.yml linux.yml macos.yml non-native.yml windows.yml
CODEOWNERS CONTRIBUTING.md FUNDING.yml dependabot.yml labeler.yml lock.yml stale.yml
CMake CurlSymbolHiding.cmake CurlTests.c FindBrotli.cmake FindCares.cmake FindGSS.cmake FindGnuTLS.cmake FindLDAP.cmake FindLibbacktrace.cmake FindLibgsasl.cmake FindLibidn2.cmake FindLibpsl.cmake FindLibssh.cmake FindLibssh2.cmake FindLibuv.cmake FindMbedTLS.cmake FindNGHTTP2.cmake FindNGHTTP3.cmake FindNGTCP2.cmake FindNettle.cmake FindQuiche.cmake FindRustls.cmake FindWolfSSL.cmake FindZstd.cmake Macros.cmake OtherTests.cmake PickyWarnings.cmake Utilities.cmake cmake_uninstall.in.cmake curl-config.in.cmake unix-cache.cmake win32-cache.cmake
LICENSES BSD-4-Clause-UC.txt ISC.txt curl.txt
docs
cmdline-opts .gitignore CMakeLists.txt MANPAGE.md Makefile.am Makefile.inc _AUTHORS.md _BUGS.md _DESCRIPTION.md _ENVIRONMENT.md _EXITCODES.md _FILES.md _GLOBBING.md _NAME.md _OPTIONS.md _OUTPUT.md _PROGRESS.md _PROTOCOLS.md _PROXYPREFIX.md _SEEALSO.md _SYNOPSIS.md _URL.md _VARIABLES.md _VERSION.md _WWW.md abstract-unix-socket.md alt-svc.md anyauth.md append.md aws-sigv4.md basic.md ca-native.md cacert.md capath.md cert-status.md cert-type.md cert.md ciphers.md compressed-ssh.md compressed.md config.md connect-timeout.md connect-to.md continue-at.md cookie-jar.md cookie.md create-dirs.md create-file-mode.md crlf.md crlfile.md curves.md data-ascii.md data-binary.md data-raw.md data-urlencode.md data.md delegation.md digest.md disable-eprt.md disable-epsv.md disable.md disallow-username-in-url.md dns-interface.md dns-ipv4-addr.md dns-ipv6-addr.md dns-servers.md doh-cert-status.md doh-insecure.md doh-url.md dump-ca-embed.md dump-header.md ech.md egd-file.md engine.md etag-compare.md etag-save.md expect100-timeout.md fail-early.md fail-with-body.md fail.md false-start.md follow.md form-escape.md form-string.md form.md ftp-account.md ftp-alternative-to-user.md ftp-create-dirs.md ftp-method.md ftp-pasv.md ftp-port.md ftp-pret.md ftp-skip-pasv-ip.md ftp-ssl-ccc-mode.md ftp-ssl-ccc.md ftp-ssl-control.md get.md globoff.md happy-eyeballs-timeout-ms.md haproxy-clientip.md haproxy-protocol.md head.md header.md help.md hostpubmd5.md hostpubsha256.md hsts.md http0.9.md http1.0.md http1.1.md http2-prior-knowledge.md http2.md http3-only.md http3.md ignore-content-length.md insecure.md interface.md ip-tos.md ipfs-gateway.md ipv4.md ipv6.md json.md junk-session-cookies.md keepalive-cnt.md keepalive-time.md key-type.md key.md knownhosts.md krb.md libcurl.md limit-rate.md list-only.md local-port.md location-trusted.md location.md login-options.md mail-auth.md mail-from.md mail-rcpt-allowfails.md mail-rcpt.md mainpage.idx manual.md max-filesize.md max-redirs.md max-time.md metalink.md mptcp.md negotiate.md netrc-file.md netrc-optional.md netrc.md next.md no-alpn.md no-buffer.md no-clobber.md no-keepalive.md no-npn.md no-progress-meter.md no-sessionid.md noproxy.md ntlm-wb.md ntlm.md oauth2-bearer.md out-null.md output-dir.md output.md parallel-immediate.md parallel-max-host.md parallel-max.md parallel.md pass.md path-as-is.md pinnedpubkey.md post301.md post302.md post303.md preproxy.md progress-bar.md proto-default.md proto-redir.md proto.md proxy-anyauth.md proxy-basic.md proxy-ca-native.md proxy-cacert.md proxy-capath.md proxy-cert-type.md proxy-cert.md proxy-ciphers.md proxy-crlfile.md proxy-digest.md proxy-header.md proxy-http2.md proxy-insecure.md proxy-key-type.md proxy-key.md proxy-negotiate.md proxy-ntlm.md proxy-pass.md proxy-pinnedpubkey.md proxy-service-name.md proxy-ssl-allow-beast.md proxy-ssl-auto-client-cert.md proxy-tls13-ciphers.md proxy-tlsauthtype.md proxy-tlspassword.md proxy-tlsuser.md proxy-tlsv1.md proxy-user.md proxy.md proxy1.0.md proxytunnel.md pubkey.md quote.md random-file.md range.md rate.md raw.md referer.md remote-header-name.md remote-name-all.md remote-name.md remote-time.md remove-on-error.md request-target.md request.md resolve.md retry-all-errors.md retry-connrefused.md retry-delay.md retry-max-time.md retry.md sasl-authzid.md sasl-ir.md service-name.md show-error.md show-headers.md sigalgs.md silent.md skip-existing.md socks4.md socks4a.md socks5-basic.md socks5-gssapi-nec.md socks5-gssapi-service.md socks5-gssapi.md socks5-hostname.md socks5.md speed-limit.md speed-time.md ssl-allow-beast.md ssl-auto-client-cert.md ssl-no-revoke.md ssl-reqd.md ssl-revoke-best-effort.md ssl-sessions.md ssl.md sslv2.md sslv3.md stderr.md styled-output.md suppress-connect-headers.md tcp-fastopen.md tcp-nodelay.md telnet-option.md tftp-blksize.md tftp-no-options.md time-cond.md tls-earlydata.md tls-max.md tls13-ciphers.md tlsauthtype.md tlspassword.md tlsuser.md tlsv1.0.md tlsv1.1.md tlsv1.2.md tlsv1.3.md tlsv1.md tr-encoding.md trace-ascii.md trace-config.md trace-ids.md trace-time.md trace.md unix-socket.md upload-file.md upload-flags.md url-query.md url.md use-ascii.md user-agent.md user.md variable.md verbose.md version.md vlan-priority.md write-out.md xattr.md
examples .checksrc .gitignore 10-at-a-time.c CMakeLists.txt Makefile.am Makefile.example Makefile.inc README.md adddocsref.pl address-scope.c altsvc.c anyauthput.c block_ip.c cacertinmem.c certinfo.c chkspeed.c connect-to.c cookie_interface.c crawler.c debug.c default-scheme.c ephiperfifo.c evhiperfifo.c externalsocket.c fileupload.c ftp-delete.c ftp-wildcard.c ftpget.c ftpgetinfo.c ftpgetresp.c ftpsget.c ftpupload.c ftpuploadfrommem.c ftpuploadresume.c getinfo.c getinmemory.c getredirect.c getreferrer.c ghiper.c headerapi.c hiperfifo.c hsts-preload.c htmltidy.c htmltitle.cpp http-options.c http-post.c http2-download.c http2-pushinmemory.c http2-serverpush.c http2-upload.c http3-present.c http3.c httpcustomheader.c httpput-postfields.c httpput.c https.c imap-append.c imap-authzid.c imap-copy.c imap-create.c imap-delete.c imap-examine.c imap-fetch.c imap-list.c imap-lsub.c imap-multi.c imap-noop.c imap-search.c imap-ssl.c imap-store.c imap-tls.c interface.c ipv6.c keepalive.c localport.c log_failed_transfers.c maxconnects.c multi-app.c multi-debugcallback.c multi-double.c multi-event.c multi-formadd.c multi-legacy.c multi-post.c multi-single.c multi-uv.c netrc.c parseurl.c persistent.c pop3-authzid.c pop3-dele.c pop3-list.c pop3-multi.c pop3-noop.c pop3-retr.c pop3-ssl.c pop3-stat.c pop3-tls.c pop3-top.c pop3-uidl.c post-callback.c postinmemory.c postit2-formadd.c postit2.c progressfunc.c protofeats.c range.c resolve.c rtsp-options.c sendrecv.c sepheaders.c sessioninfo.c sftpget.c sftpuploadresume.c shared-connection-cache.c simple.c simplepost.c simplessl.c smooth-gtk-thread.c smtp-authzid.c smtp-expn.c smtp-mail.c smtp-mime.c smtp-multi.c smtp-ssl.c smtp-tls.c smtp-vrfy.c sslbackend.c synctime.c threaded.c unixsocket.c url2file.c urlapi.c usercertinmem.c version-check.pl websocket-cb.c websocket-updown.c websocket.c xmlstream.c
internals BUFQ.md BUFREF.md CHECKSRC.md CLIENT-READERS.md CLIENT-WRITERS.md CODE_STYLE.md CONNECTION-FILTERS.md CREDENTIALS.md CURLX.md DYNBUF.md HASH.md LLIST.md MID.md MQTT.md MULTI-EV.md NEW-PROTOCOL.md PEERS.md PORTING.md RATELIMITS.md README.md SCORECARD.md SPLAY.md STRPARSE.md THRDPOOL-AND-QUEUE.md TIME-KEEPING.md TLS-SESSIONS.md UINT_SETS.md WEBSOCKET.md
libcurl
opts CMakeLists.txt CURLINFO_ACTIVESOCKET.md CURLINFO_APPCONNECT_TIME.md CURLINFO_APPCONNECT_TIME_T.md CURLINFO_CAINFO.md CURLINFO_CAPATH.md CURLINFO_CERTINFO.md CURLINFO_CONDITION_UNMET.md CURLINFO_CONNECT_TIME.md CURLINFO_CONNECT_TIME_T.md CURLINFO_CONN_ID.md CURLINFO_CONTENT_LENGTH_DOWNLOAD.md CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.md CURLINFO_CONTENT_LENGTH_UPLOAD.md CURLINFO_CONTENT_LENGTH_UPLOAD_T.md CURLINFO_CONTENT_TYPE.md CURLINFO_COOKIELIST.md CURLINFO_EARLYDATA_SENT_T.md CURLINFO_EFFECTIVE_METHOD.md CURLINFO_EFFECTIVE_URL.md CURLINFO_FILETIME.md CURLINFO_FILETIME_T.md CURLINFO_FTP_ENTRY_PATH.md CURLINFO_HEADER_SIZE.md CURLINFO_HTTPAUTH_AVAIL.md CURLINFO_HTTPAUTH_USED.md CURLINFO_HTTP_CONNECTCODE.md CURLINFO_HTTP_VERSION.md CURLINFO_LASTSOCKET.md CURLINFO_LOCAL_IP.md CURLINFO_LOCAL_PORT.md CURLINFO_NAMELOOKUP_TIME.md CURLINFO_NAMELOOKUP_TIME_T.md CURLINFO_NUM_CONNECTS.md CURLINFO_OS_ERRNO.md CURLINFO_POSTTRANSFER_TIME_T.md CURLINFO_PRETRANSFER_TIME.md CURLINFO_PRETRANSFER_TIME_T.md CURLINFO_PRIMARY_IP.md CURLINFO_PRIMARY_PORT.md CURLINFO_PRIVATE.md CURLINFO_PROTOCOL.md CURLINFO_PROXYAUTH_AVAIL.md CURLINFO_PROXYAUTH_USED.md CURLINFO_PROXY_ERROR.md CURLINFO_PROXY_SSL_VERIFYRESULT.md CURLINFO_QUEUE_TIME_T.md CURLINFO_REDIRECT_COUNT.md CURLINFO_REDIRECT_TIME.md CURLINFO_REDIRECT_TIME_T.md CURLINFO_REDIRECT_URL.md CURLINFO_REFERER.md CURLINFO_REQUEST_SIZE.md CURLINFO_RESPONSE_CODE.md CURLINFO_RETRY_AFTER.md CURLINFO_RTSP_CLIENT_CSEQ.md CURLINFO_RTSP_CSEQ_RECV.md CURLINFO_RTSP_SERVER_CSEQ.md CURLINFO_RTSP_SESSION_ID.md CURLINFO_SCHEME.md CURLINFO_SIZE_DELIVERED.md CURLINFO_SIZE_DOWNLOAD.md CURLINFO_SIZE_DOWNLOAD_T.md CURLINFO_SIZE_UPLOAD.md CURLINFO_SIZE_UPLOAD_T.md CURLINFO_SPEED_DOWNLOAD.md CURLINFO_SPEED_DOWNLOAD_T.md CURLINFO_SPEED_UPLOAD.md CURLINFO_SPEED_UPLOAD_T.md CURLINFO_SSL_ENGINES.md CURLINFO_SSL_VERIFYRESULT.md CURLINFO_STARTTRANSFER_TIME.md CURLINFO_STARTTRANSFER_TIME_T.md CURLINFO_TLS_SESSION.md CURLINFO_TLS_SSL_PTR.md CURLINFO_TOTAL_TIME.md CURLINFO_TOTAL_TIME_T.md CURLINFO_USED_PROXY.md CURLINFO_XFER_ID.md CURLMINFO_XFERS_ADDED.md CURLMINFO_XFERS_CURRENT.md CURLMINFO_XFERS_DONE.md CURLMINFO_XFERS_PENDING.md CURLMINFO_XFERS_RUNNING.md CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.md CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.md CURLMOPT_MAXCONNECTS.md CURLMOPT_MAX_CONCURRENT_STREAMS.md CURLMOPT_MAX_HOST_CONNECTIONS.md CURLMOPT_MAX_PIPELINE_LENGTH.md CURLMOPT_MAX_TOTAL_CONNECTIONS.md CURLMOPT_NETWORK_CHANGED.md CURLMOPT_NOTIFYDATA.md CURLMOPT_NOTIFYFUNCTION.md CURLMOPT_PIPELINING.md CURLMOPT_PIPELINING_SERVER_BL.md CURLMOPT_PIPELINING_SITE_BL.md CURLMOPT_PUSHDATA.md CURLMOPT_PUSHFUNCTION.md CURLMOPT_QUICK_EXIT.md CURLMOPT_RESOLVE_THREADS_MAX.md CURLMOPT_SOCKETDATA.md CURLMOPT_SOCKETFUNCTION.md CURLMOPT_TIMERDATA.md CURLMOPT_TIMERFUNCTION.md CURLOPT_ABSTRACT_UNIX_SOCKET.md CURLOPT_ACCEPTTIMEOUT_MS.md CURLOPT_ACCEPT_ENCODING.md CURLOPT_ADDRESS_SCOPE.md CURLOPT_ALTSVC.md CURLOPT_ALTSVC_CTRL.md CURLOPT_APPEND.md CURLOPT_AUTOREFERER.md CURLOPT_AWS_SIGV4.md CURLOPT_BUFFERSIZE.md CURLOPT_CAINFO.md CURLOPT_CAINFO_BLOB.md CURLOPT_CAPATH.md CURLOPT_CA_CACHE_TIMEOUT.md CURLOPT_CERTINFO.md CURLOPT_CHUNK_BGN_FUNCTION.md CURLOPT_CHUNK_DATA.md CURLOPT_CHUNK_END_FUNCTION.md CURLOPT_CLOSESOCKETDATA.md CURLOPT_CLOSESOCKETFUNCTION.md CURLOPT_CONNECTTIMEOUT.md CURLOPT_CONNECTTIMEOUT_MS.md CURLOPT_CONNECT_ONLY.md CURLOPT_CONNECT_TO.md CURLOPT_CONV_FROM_NETWORK_FUNCTION.md CURLOPT_CONV_FROM_UTF8_FUNCTION.md CURLOPT_CONV_TO_NETWORK_FUNCTION.md CURLOPT_COOKIE.md CURLOPT_COOKIEFILE.md CURLOPT_COOKIEJAR.md CURLOPT_COOKIELIST.md CURLOPT_COOKIESESSION.md CURLOPT_COPYPOSTFIELDS.md CURLOPT_CRLF.md CURLOPT_CRLFILE.md CURLOPT_CURLU.md CURLOPT_CUSTOMREQUEST.md CURLOPT_DEBUGDATA.md CURLOPT_DEBUGFUNCTION.md CURLOPT_DEFAULT_PROTOCOL.md CURLOPT_DIRLISTONLY.md CURLOPT_DISALLOW_USERNAME_IN_URL.md CURLOPT_DNS_CACHE_TIMEOUT.md CURLOPT_DNS_INTERFACE.md CURLOPT_DNS_LOCAL_IP4.md CURLOPT_DNS_LOCAL_IP6.md CURLOPT_DNS_SERVERS.md CURLOPT_DNS_SHUFFLE_ADDRESSES.md CURLOPT_DNS_USE_GLOBAL_CACHE.md CURLOPT_DOH_SSL_VERIFYHOST.md CURLOPT_DOH_SSL_VERIFYPEER.md CURLOPT_DOH_SSL_VERIFYSTATUS.md CURLOPT_DOH_URL.md CURLOPT_ECH.md CURLOPT_EGDSOCKET.md CURLOPT_ERRORBUFFER.md CURLOPT_EXPECT_100_TIMEOUT_MS.md CURLOPT_FAILONERROR.md CURLOPT_FILETIME.md CURLOPT_FNMATCH_DATA.md CURLOPT_FNMATCH_FUNCTION.md CURLOPT_FOLLOWLOCATION.md CURLOPT_FORBID_REUSE.md CURLOPT_FRESH_CONNECT.md CURLOPT_FTPPORT.md CURLOPT_FTPSSLAUTH.md CURLOPT_FTP_ACCOUNT.md CURLOPT_FTP_ALTERNATIVE_TO_USER.md CURLOPT_FTP_CREATE_MISSING_DIRS.md CURLOPT_FTP_FILEMETHOD.md CURLOPT_FTP_SKIP_PASV_IP.md CURLOPT_FTP_SSL_CCC.md CURLOPT_FTP_USE_EPRT.md CURLOPT_FTP_USE_EPSV.md CURLOPT_FTP_USE_PRET.md CURLOPT_GSSAPI_DELEGATION.md CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.md CURLOPT_HAPROXYPROTOCOL.md CURLOPT_HAPROXY_CLIENT_IP.md CURLOPT_HEADER.md CURLOPT_HEADERDATA.md CURLOPT_HEADERFUNCTION.md CURLOPT_HEADEROPT.md CURLOPT_HSTS.md CURLOPT_HSTSREADDATA.md CURLOPT_HSTSREADFUNCTION.md CURLOPT_HSTSWRITEDATA.md CURLOPT_HSTSWRITEFUNCTION.md CURLOPT_HSTS_CTRL.md CURLOPT_HTTP09_ALLOWED.md CURLOPT_HTTP200ALIASES.md CURLOPT_HTTPAUTH.md CURLOPT_HTTPGET.md CURLOPT_HTTPHEADER.md CURLOPT_HTTPPOST.md CURLOPT_HTTPPROXYTUNNEL.md CURLOPT_HTTP_CONTENT_DECODING.md CURLOPT_HTTP_TRANSFER_DECODING.md CURLOPT_HTTP_VERSION.md CURLOPT_IGNORE_CONTENT_LENGTH.md CURLOPT_INFILESIZE.md CURLOPT_INFILESIZE_LARGE.md CURLOPT_INTERFACE.md CURLOPT_INTERLEAVEDATA.md CURLOPT_INTERLEAVEFUNCTION.md CURLOPT_IOCTLDATA.md CURLOPT_IOCTLFUNCTION.md CURLOPT_IPRESOLVE.md CURLOPT_ISSUERCERT.md CURLOPT_ISSUERCERT_BLOB.md CURLOPT_KEEP_SENDING_ON_ERROR.md CURLOPT_KEYPASSWD.md CURLOPT_KRBLEVEL.md CURLOPT_LOCALPORT.md CURLOPT_LOCALPORTRANGE.md CURLOPT_LOGIN_OPTIONS.md CURLOPT_LOW_SPEED_LIMIT.md CURLOPT_LOW_SPEED_TIME.md CURLOPT_MAIL_AUTH.md CURLOPT_MAIL_FROM.md CURLOPT_MAIL_RCPT.md CURLOPT_MAIL_RCPT_ALLOWFAILS.md CURLOPT_MAXAGE_CONN.md CURLOPT_MAXCONNECTS.md CURLOPT_MAXFILESIZE.md CURLOPT_MAXFILESIZE_LARGE.md CURLOPT_MAXLIFETIME_CONN.md CURLOPT_MAXREDIRS.md CURLOPT_MAX_RECV_SPEED_LARGE.md CURLOPT_MAX_SEND_SPEED_LARGE.md CURLOPT_MIMEPOST.md CURLOPT_MIME_OPTIONS.md CURLOPT_NETRC.md CURLOPT_NETRC_FILE.md CURLOPT_NEW_DIRECTORY_PERMS.md CURLOPT_NEW_FILE_PERMS.md CURLOPT_NOBODY.md CURLOPT_NOPROGRESS.md CURLOPT_NOPROXY.md CURLOPT_NOSIGNAL.md CURLOPT_OPENSOCKETDATA.md CURLOPT_OPENSOCKETFUNCTION.md CURLOPT_PASSWORD.md CURLOPT_PATH_AS_IS.md CURLOPT_PINNEDPUBLICKEY.md CURLOPT_PIPEWAIT.md CURLOPT_PORT.md CURLOPT_POST.md CURLOPT_POSTFIELDS.md CURLOPT_POSTFIELDSIZE.md CURLOPT_POSTFIELDSIZE_LARGE.md CURLOPT_POSTQUOTE.md CURLOPT_POSTREDIR.md CURLOPT_PREQUOTE.md CURLOPT_PREREQDATA.md CURLOPT_PREREQFUNCTION.md CURLOPT_PRE_PROXY.md CURLOPT_PRIVATE.md CURLOPT_PROGRESSDATA.md CURLOPT_PROGRESSFUNCTION.md CURLOPT_PROTOCOLS.md CURLOPT_PROTOCOLS_STR.md CURLOPT_PROXY.md CURLOPT_PROXYAUTH.md CURLOPT_PROXYHEADER.md CURLOPT_PROXYPASSWORD.md CURLOPT_PROXYPORT.md CURLOPT_PROXYTYPE.md CURLOPT_PROXYUSERNAME.md CURLOPT_PROXYUSERPWD.md CURLOPT_PROXY_CAINFO.md CURLOPT_PROXY_CAINFO_BLOB.md CURLOPT_PROXY_CAPATH.md CURLOPT_PROXY_CRLFILE.md CURLOPT_PROXY_ISSUERCERT.md CURLOPT_PROXY_ISSUERCERT_BLOB.md CURLOPT_PROXY_KEYPASSWD.md CURLOPT_PROXY_PINNEDPUBLICKEY.md CURLOPT_PROXY_SERVICE_NAME.md CURLOPT_PROXY_SSLCERT.md CURLOPT_PROXY_SSLCERTTYPE.md CURLOPT_PROXY_SSLCERT_BLOB.md CURLOPT_PROXY_SSLKEY.md CURLOPT_PROXY_SSLKEYTYPE.md CURLOPT_PROXY_SSLKEY_BLOB.md CURLOPT_PROXY_SSLVERSION.md CURLOPT_PROXY_SSL_CIPHER_LIST.md CURLOPT_PROXY_SSL_OPTIONS.md CURLOPT_PROXY_SSL_VERIFYHOST.md CURLOPT_PROXY_SSL_VERIFYPEER.md CURLOPT_PROXY_TLS13_CIPHERS.md CURLOPT_PROXY_TLSAUTH_PASSWORD.md CURLOPT_PROXY_TLSAUTH_TYPE.md CURLOPT_PROXY_TLSAUTH_USERNAME.md CURLOPT_PROXY_TRANSFER_MODE.md CURLOPT_PUT.md CURLOPT_QUICK_EXIT.md CURLOPT_QUOTE.md CURLOPT_RANDOM_FILE.md CURLOPT_RANGE.md CURLOPT_READDATA.md CURLOPT_READFUNCTION.md CURLOPT_REDIR_PROTOCOLS.md CURLOPT_REDIR_PROTOCOLS_STR.md CURLOPT_REFERER.md CURLOPT_REQUEST_TARGET.md CURLOPT_RESOLVE.md CURLOPT_RESOLVER_START_DATA.md CURLOPT_RESOLVER_START_FUNCTION.md CURLOPT_RESUME_FROM.md CURLOPT_RESUME_FROM_LARGE.md CURLOPT_RTSP_CLIENT_CSEQ.md CURLOPT_RTSP_REQUEST.md CURLOPT_RTSP_SERVER_CSEQ.md CURLOPT_RTSP_SESSION_ID.md CURLOPT_RTSP_STREAM_URI.md CURLOPT_RTSP_TRANSPORT.md CURLOPT_SASL_AUTHZID.md CURLOPT_SASL_IR.md CURLOPT_SEEKDATA.md CURLOPT_SEEKFUNCTION.md CURLOPT_SERVER_RESPONSE_TIMEOUT.md CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.md CURLOPT_SERVICE_NAME.md CURLOPT_SHARE.md CURLOPT_SOCKOPTDATA.md CURLOPT_SOCKOPTFUNCTION.md CURLOPT_SOCKS5_AUTH.md CURLOPT_SOCKS5_GSSAPI_NEC.md CURLOPT_SOCKS5_GSSAPI_SERVICE.md CURLOPT_SSH_AUTH_TYPES.md CURLOPT_SSH_COMPRESSION.md CURLOPT_SSH_HOSTKEYDATA.md CURLOPT_SSH_HOSTKEYFUNCTION.md CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.md CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.md CURLOPT_SSH_KEYDATA.md CURLOPT_SSH_KEYFUNCTION.md CURLOPT_SSH_KNOWNHOSTS.md CURLOPT_SSH_PRIVATE_KEYFILE.md CURLOPT_SSH_PUBLIC_KEYFILE.md CURLOPT_SSLCERT.md CURLOPT_SSLCERTTYPE.md CURLOPT_SSLCERT_BLOB.md CURLOPT_SSLENGINE.md CURLOPT_SSLENGINE_DEFAULT.md CURLOPT_SSLKEY.md CURLOPT_SSLKEYTYPE.md CURLOPT_SSLKEY_BLOB.md CURLOPT_SSLVERSION.md CURLOPT_SSL_CIPHER_LIST.md CURLOPT_SSL_CTX_DATA.md CURLOPT_SSL_CTX_FUNCTION.md CURLOPT_SSL_EC_CURVES.md CURLOPT_SSL_ENABLE_ALPN.md CURLOPT_SSL_ENABLE_NPN.md CURLOPT_SSL_FALSESTART.md CURLOPT_SSL_OPTIONS.md CURLOPT_SSL_SESSIONID_CACHE.md CURLOPT_SSL_SIGNATURE_ALGORITHMS.md CURLOPT_SSL_VERIFYHOST.md CURLOPT_SSL_VERIFYPEER.md CURLOPT_SSL_VERIFYSTATUS.md CURLOPT_STDERR.md CURLOPT_STREAM_DEPENDS.md CURLOPT_STREAM_DEPENDS_E.md CURLOPT_STREAM_WEIGHT.md CURLOPT_SUPPRESS_CONNECT_HEADERS.md CURLOPT_TCP_FASTOPEN.md CURLOPT_TCP_KEEPALIVE.md CURLOPT_TCP_KEEPCNT.md CURLOPT_TCP_KEEPIDLE.md CURLOPT_TCP_KEEPINTVL.md CURLOPT_TCP_NODELAY.md CURLOPT_TELNETOPTIONS.md CURLOPT_TFTP_BLKSIZE.md CURLOPT_TFTP_NO_OPTIONS.md CURLOPT_TIMECONDITION.md CURLOPT_TIMEOUT.md CURLOPT_TIMEOUT_MS.md CURLOPT_TIMEVALUE.md CURLOPT_TIMEVALUE_LARGE.md CURLOPT_TLS13_CIPHERS.md CURLOPT_TLSAUTH_PASSWORD.md CURLOPT_TLSAUTH_TYPE.md CURLOPT_TLSAUTH_USERNAME.md CURLOPT_TRAILERDATA.md CURLOPT_TRAILERFUNCTION.md CURLOPT_TRANSFERTEXT.md CURLOPT_TRANSFER_ENCODING.md CURLOPT_UNIX_SOCKET_PATH.md CURLOPT_UNRESTRICTED_AUTH.md CURLOPT_UPKEEP_INTERVAL_MS.md CURLOPT_UPLOAD.md CURLOPT_UPLOAD_BUFFERSIZE.md CURLOPT_UPLOAD_FLAGS.md CURLOPT_URL.md CURLOPT_USERAGENT.md CURLOPT_USERNAME.md CURLOPT_USERPWD.md CURLOPT_USE_SSL.md CURLOPT_VERBOSE.md CURLOPT_WILDCARDMATCH.md CURLOPT_WRITEDATA.md CURLOPT_WRITEFUNCTION.md CURLOPT_WS_OPTIONS.md CURLOPT_XFERINFODATA.md CURLOPT_XFERINFOFUNCTION.md CURLOPT_XOAUTH2_BEARER.md CURLSHOPT_LOCKFUNC.md CURLSHOPT_SHARE.md CURLSHOPT_UNLOCKFUNC.md CURLSHOPT_UNSHARE.md CURLSHOPT_USERDATA.md Makefile.am Makefile.inc
.gitignore ABI.md CMakeLists.txt Makefile.am Makefile.inc curl_easy_cleanup.md curl_easy_duphandle.md curl_easy_escape.md curl_easy_getinfo.md curl_easy_header.md curl_easy_init.md curl_easy_nextheader.md curl_easy_option_by_id.md curl_easy_option_by_name.md curl_easy_option_next.md curl_easy_pause.md curl_easy_perform.md curl_easy_recv.md curl_easy_reset.md curl_easy_send.md curl_easy_setopt.md curl_easy_ssls_export.md curl_easy_ssls_import.md curl_easy_strerror.md curl_easy_unescape.md curl_easy_upkeep.md curl_escape.md curl_formadd.md curl_formfree.md curl_formget.md curl_free.md curl_getdate.md curl_getenv.md curl_global_cleanup.md curl_global_init.md curl_global_init_mem.md curl_global_sslset.md curl_global_trace.md curl_mime_addpart.md curl_mime_data.md curl_mime_data_cb.md curl_mime_encoder.md curl_mime_filedata.md curl_mime_filename.md curl_mime_free.md curl_mime_headers.md curl_mime_init.md curl_mime_name.md curl_mime_subparts.md curl_mime_type.md curl_mprintf.md curl_multi_add_handle.md curl_multi_assign.md curl_multi_cleanup.md curl_multi_fdset.md curl_multi_get_handles.md curl_multi_get_offt.md curl_multi_info_read.md curl_multi_init.md curl_multi_notify_disable.md curl_multi_notify_enable.md curl_multi_perform.md curl_multi_poll.md curl_multi_remove_handle.md curl_multi_setopt.md curl_multi_socket.md curl_multi_socket_action.md curl_multi_socket_all.md curl_multi_strerror.md curl_multi_timeout.md curl_multi_wait.md curl_multi_waitfds.md curl_multi_wakeup.md curl_pushheader_byname.md curl_pushheader_bynum.md curl_share_cleanup.md curl_share_init.md curl_share_setopt.md curl_share_strerror.md curl_slist_append.md curl_slist_free_all.md curl_strequal.md curl_strnequal.md curl_unescape.md curl_url.md curl_url_cleanup.md curl_url_dup.md curl_url_get.md curl_url_set.md curl_url_strerror.md curl_version.md curl_version_info.md curl_ws_meta.md curl_ws_recv.md curl_ws_send.md curl_ws_start_frame.md libcurl-easy.md libcurl-env-dbg.md libcurl-env.md libcurl-errors.md libcurl-multi.md libcurl-security.md libcurl-share.md libcurl-thread.md libcurl-tutorial.md libcurl-url.md libcurl-ws.md libcurl.m4 libcurl.md mksymbolsmanpage.pl symbols-in-versions symbols.pl
tests CI.md FILEFORMAT.md HTTP.md TEST-SUITE.md
.gitignore ALTSVC.md BINDINGS.md BUG-BOUNTY.md BUGS.md CIPHERS-TLS12.md CIPHERS.md CMakeLists.txt CODE_OF_CONDUCT.md CODE_REVIEW.md CONTRIBUTE.md CURL-DISABLE.md CURLDOWN.md DEPRECATE.md DISTROS.md EARLY-RELEASE.md ECH.md EXPERIMENTAL.md FAQ.md FEATURES.md GOVERNANCE.md HELP-US.md HISTORY.md HSTS.md HTTP-COOKIES.md HTTP3.md HTTPSRR.md INFRASTRUCTURE.md INSTALL-CMAKE.md INSTALL.md INTERNALS.md IPFS.md KNOWN_BUGS.md KNOWN_RISKS.md MAIL-ETIQUETTE.md MANUAL.md Makefile.am README.md RELEASE-PROCEDURE.md ROADMAP.md RUSTLS.md SECURITY-ADVISORY.md SPONSORS.md SSL-PROBLEMS.md SSLCERTS.md THANKS THANKS-filter TODO.md TheArtOfHttpScripting.md URL-SYNTAX.md VERIFY.md VERSIONS.md VULN-DISCLOSURE-POLICY.md curl-config.md mk-ca-bundle.md options-in-versions runtests.md testcurl.md wcurl.md
include
curl Makefile.am curl.h curlver.h easy.h header.h mprintf.h multi.h options.h stdcheaders.h system.h typecheck-gcc.h urlapi.h websockets.h
Makefile.am README.md
lib
curlx base64.c base64.h basename.c basename.h dynbuf.c dynbuf.h fopen.c fopen.h inet_ntop.c inet_ntop.h inet_pton.c inet_pton.h multibyte.c multibyte.h nonblock.c nonblock.h snprintf.c snprintf.h strcopy.c strcopy.h strdup.c strdup.h strerr.c strerr.h strparse.c strparse.h timediff.c timediff.h timeval.c timeval.h version_win32.c version_win32.h wait.c wait.h warnless.c warnless.h winapi.c winapi.h
vauth cleartext.c cram.c digest.c digest.h digest_sspi.c gsasl.c krb5_gssapi.c krb5_sspi.c ntlm.c ntlm_sspi.c oauth2.c spnego_gssapi.c spnego_sspi.c vauth.c vauth.h
vquic curl_ngtcp2.c curl_ngtcp2.h curl_quiche.c curl_quiche.h vquic-tls.c vquic-tls.h vquic.c vquic.h vquic_int.h
vssh libssh.c libssh2.c ssh.h vssh.c vssh.h
vtls apple.c apple.h cipher_suite.c cipher_suite.h gtls.c gtls.h hostcheck.c hostcheck.h keylog.c keylog.h mbedtls.c mbedtls.h openssl.c openssl.h rustls.c rustls.h schannel.c schannel.h schannel_int.h schannel_verify.c vtls.c vtls.h vtls_int.h vtls_scache.c vtls_scache.h vtls_spack.c vtls_spack.h wolfssl.c wolfssl.h x509asn1.c x509asn1.h
.gitignore CMakeLists.txt Makefile.am Makefile.inc Makefile.soname altsvc.c altsvc.h amigaos.c amigaos.h arpa_telnet.h asyn-ares.c asyn-base.c asyn-thrdd.c asyn.h bufq.c bufq.h bufref.c bufref.h cf-dns.c cf-dns.h cf-h1-proxy.c cf-h1-proxy.h cf-h2-proxy.c cf-h2-proxy.h cf-haproxy.c cf-haproxy.h cf-https-connect.c cf-https-connect.h cf-ip-happy.c cf-ip-happy.h cf-socket.c cf-socket.h cfilters.c cfilters.h config-mac.h config-os400.h config-riscos.h config-win32.h conncache.c conncache.h connect.c connect.h content_encoding.c content_encoding.h cookie.c cookie.h creds.c creds.h cshutdn.c cshutdn.h curl_addrinfo.c curl_addrinfo.h curl_config-cmake.h.in curl_ctype.h curl_endian.c curl_endian.h curl_fnmatch.c curl_fnmatch.h curl_fopen.c curl_fopen.h curl_get_line.c curl_get_line.h curl_gethostname.c curl_gethostname.h curl_gssapi.c curl_gssapi.h curl_hmac.h curl_ldap.h curl_md4.h curl_md5.h curl_memrchr.c curl_memrchr.h curl_ntlm_core.c curl_ntlm_core.h curl_printf.h curl_range.c curl_range.h curl_sasl.c curl_sasl.h curl_setup.h curl_sha256.h curl_sha512_256.c curl_sha512_256.h curl_share.c curl_share.h curl_sspi.c curl_sspi.h curl_threads.c curl_threads.h curl_trc.c curl_trc.h cw-out.c cw-out.h cw-pause.c cw-pause.h dict.c dict.h dllmain.c dnscache.c dnscache.h doh.c doh.h dynhds.c dynhds.h easy.c easy_lock.h easygetopt.c easyif.h easyoptions.c easyoptions.h escape.c escape.h fake_addrinfo.c fake_addrinfo.h file.c file.h fileinfo.c fileinfo.h formdata.c formdata.h ftp-int.h ftp.c ftp.h ftplistparser.c ftplistparser.h functypes.h getenv.c getinfo.c getinfo.h gopher.c gopher.h hash.c hash.h headers.c headers.h hmac.c hostip.c hostip.h hostip4.c hostip6.c hsts.c hsts.h http.c http.h http1.c http1.h http2.c http2.h http_aws_sigv4.c http_aws_sigv4.h http_chunks.c http_chunks.h http_digest.c http_digest.h http_negotiate.c http_negotiate.h http_ntlm.c http_ntlm.h http_proxy.c http_proxy.h httpsrr.c httpsrr.h idn.c idn.h if2ip.c if2ip.h imap.c imap.h ldap.c libcurl.def libcurl.rc libcurl.vers.in llist.c llist.h macos.c macos.h md4.c md5.c memdebug.c mime.c mime.h mprintf.c mqtt.c mqtt.h multi.c multi_ev.c multi_ev.h multi_ntfy.c multi_ntfy.h multihandle.h multiif.h netrc.c netrc.h noproxy.c noproxy.h openldap.c optiontable.pl parsedate.c parsedate.h peer.c peer.h pingpong.c pingpong.h pop3.c pop3.h progress.c progress.h protocol.c protocol.h psl.c psl.h rand.c rand.h ratelimit.c ratelimit.h request.c request.h rtsp.c rtsp.h select.c select.h sendf.c sendf.h setopt.c setopt.h setup-os400.h setup-vms.h setup-win32.h sha256.c sigpipe.h slist.c slist.h smb.c smb.h smtp.c smtp.h sockaddr.h socketpair.c socketpair.h socks.c socks.h socks_gssapi.c socks_sspi.c splay.c splay.h strcase.c strcase.h strequal.c strerror.c strerror.h system_win32.c system_win32.h telnet.c telnet.h tftp.c tftp.h thrdpool.c thrdpool.h thrdqueue.c thrdqueue.h transfer.c transfer.h uint-bset.c uint-bset.h uint-hash.c uint-hash.h uint-spbset.c uint-spbset.h uint-table.c uint-table.h url.c url.h urlapi-int.h urlapi.c urldata.h version.c ws.c ws.h
m4 .gitignore curl-amissl.m4 curl-apple-sectrust.m4 curl-compilers.m4 curl-confopts.m4 curl-functions.m4 curl-gnutls.m4 curl-mbedtls.m4 curl-openssl.m4 curl-override.m4 curl-reentrant.m4 curl-rustls.m4 curl-schannel.m4 curl-sysconfig.m4 curl-wolfssl.m4 xc-am-iface.m4 xc-cc-check.m4 xc-lt-iface.m4 xc-val-flgs.m4 zz40-xc-ovr.m4 zz50-xc-ovr.m4
projects
OS400
rpg-examples HEADERAPI HTTPPOST INMEMORY SIMPLE1 SIMPLE2 SMTPSRCMBR
.checksrc README.OS400 ccsidcurl.c ccsidcurl.h config400.default curl.cmd curl.inc.in curlcl.c curlmain.c initscript.sh make-docs.sh make-include.sh make-lib.sh make-src.sh make-tests.sh makefile.sh os400sys.c os400sys.h
Windows
tmpl .gitattributes README.txt curl-all.sln curl.sln curl.vcxproj curl.vcxproj.filters libcurl.sln libcurl.vcxproj libcurl.vcxproj.filters
.gitignore README.md generate.bat
vms Makefile.am backup_gnv_curl_src.com build_curl-config_script.com build_gnv_curl.com build_gnv_curl_pcsi_desc.com build_gnv_curl_pcsi_text.com build_gnv_curl_release_notes.com build_libcurl_pc.com build_vms.com clean_gnv_curl.com compare_curl_source.com config_h.com curl_crtl_init.c curl_gnv_build_steps.txt curl_release_note_start.txt curl_startup.com curlmsg.h curlmsg.msg curlmsg.sdl curlmsg_vms.h generate_config_vms_h_curl.com generate_vax_transfer.com gnv_conftest.c_first gnv_curl_configure.sh gnv_libcurl_symbols.opt gnv_link_curl.com macro32_exactcase.patch make_gnv_curl_install.sh make_pcsi_curl_kit_name.com pcsi_gnv_curl_file_list.txt pcsi_product_gnv_curl.com readme report_openssl_version.c setup_gnv_curl_build.com stage_curl_install.com vms_eco_level.h
Makefile.am README.md
scripts .checksrc CMakeLists.txt Makefile.am badwords badwords-all badwords.txt cd2cd cd2nroff cdall checksrc-all.pl checksrc.pl cmakelint.sh completion.pl contributors.sh contrithanks.sh coverage.sh delta dmaketgz extract-unit-protos firefox-db2pem.sh installcheck.sh maketgz managen mdlinkcheck mk-ca-bundle.pl mk-unity.pl nroff2cd perlcheck.sh pythonlint.sh randdisable release-notes.pl release-tools.sh schemetable.c singleuse.pl spacecheck.pl top-complexity top-length verify-release wcurl
src
toolx tool_time.c tool_time.h
.checksrc .gitignore CMakeLists.txt Makefile.am Makefile.inc config2setopts.c config2setopts.h curl.rc curlinfo.c mk-file-embed.pl mkhelp.pl slist_wc.c slist_wc.h terminal.c terminal.h tool_cb_dbg.c tool_cb_dbg.h tool_cb_hdr.c tool_cb_hdr.h tool_cb_prg.c tool_cb_prg.h tool_cb_rea.c tool_cb_rea.h tool_cb_see.c tool_cb_see.h tool_cb_soc.c tool_cb_soc.h tool_cb_wrt.c tool_cb_wrt.h tool_cfgable.c tool_cfgable.h tool_dirhie.c tool_dirhie.h tool_doswin.c tool_doswin.h tool_easysrc.c tool_easysrc.h tool_filetime.c tool_filetime.h tool_findfile.c tool_findfile.h tool_formparse.c tool_formparse.h tool_getparam.c tool_getparam.h tool_getpass.c tool_getpass.h tool_help.c tool_help.h tool_helpers.c tool_helpers.h tool_hugehelp.h tool_ipfs.c tool_ipfs.h tool_libinfo.c tool_libinfo.h tool_listhelp.c tool_main.c tool_main.h tool_msgs.c tool_msgs.h tool_operate.c tool_operate.h tool_operhlp.c tool_operhlp.h tool_paramhlp.c tool_paramhlp.h tool_parsecfg.c tool_parsecfg.h tool_progress.c tool_progress.h tool_sdecls.h tool_setopt.c tool_setopt.h tool_setup.h tool_ssls.c tool_ssls.h tool_stderr.c tool_stderr.h tool_urlglob.c tool_urlglob.h tool_util.c tool_util.h tool_version.h tool_vms.c tool_vms.h tool_writeout.c tool_writeout.h tool_writeout_json.c tool_writeout_json.h tool_xattr.c tool_xattr.h var.c var.h
tests
certs .gitignore CMakeLists.txt Makefile.am Makefile.inc genserv.pl srp-verifier-conf srp-verifier-db test-ca.cnf test-ca.prm test-client-cert.prm test-client-eku-only.prm test-localhost-san-first.prm test-localhost-san-last.prm test-localhost.nn.prm test-localhost.prm test-localhost0h.prm
cmake CMakeLists.txt test.c test.cpp test.sh
data .gitignore DISABLED Makefile.am data-xml1 data1400.c data1401.c data1402.c data1403.c data1404.c data1405.c data1406.c data1407.c data1420.c data1461.txt data1463.txt data1465.c data1481.c data1705-1.md data1705-2.md data1705-3.md data1705-4.md data1705-stdout.1 data1706-1.md data1706-2.md data1706-3.md data1706-4.md data1706-stdout.txt data320.html test1 test10 test100 test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 test1008 test1009 test101 test1010 test1011 test1012 test1013 test1014 test1015 test1016 test1017 test1018 test1019 test102 test1020 test1021 test1022 test1023 test1024 test1025 test1026 test1027 test1028 test1029 test103 test1030 test1031 test1032 test1033 test1034 test1035 test1036 test1037 test1038 test1039 test104 test1040 test1041 test1042 test1043 test1044 test1045 test1046 test1047 test1048 test1049 test105 test1050 test1051 test1052 test1053 test1054 test1055 test1056 test1057 test1058 test1059 test106 test1060 test1061 test1062 test1063 test1064 test1065 test1066 test1067 test1068 test1069 test107 test1070 test1071 test1072 test1073 test1074 test1075 test1076 test1077 test1078 test1079 test108 test1080 test1081 test1082 test1083 test1084 test1085 test1086 test1087 test1088 test1089 test109 test1090 test1091 test1092 test1093 test1094 test1095 test1096 test1097 test1098 test1099 test11 test110 test1100 test1101 test1102 test1103 test1104 test1105 test1106 test1107 test1108 test1109 test111 test1110 test1111 test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 test112 test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 test1128 test1129 test113 test1130 test1131 test1132 test1133 test1134 test1135 test1136 test1137 test1138 test1139 test114 test1140 test1141 test1142 test1143 test1144 test1145 test1146 test1147 test1148 test1149 test115 test1150 test1151 test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 test116 test1160 test1161 test1162 test1163 test1164 test1165 test1166 test1167 test1168 test1169 test117 test1170 test1171 test1172 test1173 test1174 test1175 test1176 test1177 test1178 test1179 test118 test1180 test1181 test1182 test1183 test1184 test1185 test1186 test1187 test1188 test1189 test119 test1190 test1191 test1192 test1193 test1194 test1195 test1196 test1197 test1198 test1199 test12 test120 test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 test1208 test1209 test121 test1210 test1211 test1212 test1213 test1214 test1215 test1216 test1217 test1218 test1219 test122 test1220 test1221 test1222 test1223 test1224 test1225 test1226 test1227 test1228 test1229 test123 test1230 test1231 test1232 test1233 test1234 test1235 test1236 test1237 test1238 test1239 test124 test1240 test1241 test1242 test1243 test1244 test1245 test1246 test1247 test1248 test1249 test125 test1250 test1251 test1252 test1253 test1254 test1255 test1256 test1257 test1258 test1259 test126 test1260 test1261 test1262 test1263 test1264 test1265 test1266 test1267 test1268 test1269 test127 test1270 test1271 test1272 test1273 test1274 test1275 test1276 test1277 test1278 test1279 test128 test1280 test1281 test1282 test1283 test1284 test1285 test1286 test1287 test1288 test1289 test129 test1290 test1291 test1292 test1293 test1294 test1295 test1296 test1297 test1298 test1299 test13 test130 test1300 test1301 test1302 test1303 test1304 test1305 test1306 test1307 test1308 test1309 test131 test1310 test1311 test1312 test1313 test1314 test1315 test1316 test1317 test1318 test1319 test132 test1320 test1321 test1322 test1323 test1324 test1325 test1326 test1327 test1328 test1329 test133 test1330 test1331 test1332 test1333 test1334 test1335 test1336 test1337 test1338 test1339 test134 test1340 test1341 test1342 test1343 test1344 test1345 test1346 test1347 test1348 test1349 test135 test1350 test1351 test1352 test1353 test1354 test1355 test1356 test1357 test1358 test1359 test136 test1360 test1361 test1362 test1363 test1364 test1365 test1366 test1367 test1368 test1369 test137 test1370 test1371 test1372 test1373 test1374 test1375 test1376 test1377 test1378 test1379 test138 test1380 test1381 test1382 test1383 test1384 test1385 test1386 test1387 test1388 test1389 test139 test1390 test1391 test1392 test1393 test1394 test1395 test1396 test1397 test1398 test1399 test14 test140 test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 test1408 test1409 test141 test1410 test1411 test1412 test1413 test1414 test1415 test1416 test1417 test1418 test1419 test142 test1420 test1421 test1422 test1423 test1424 test1425 test1426 test1427 test1428 test1429 test143 test1430 test1431 test1432 test1433 test1434 test1435 test1436 test1437 test1438 test1439 test144 test1440 test1441 test1442 test1443 test1444 test1445 test1446 test1447 test1448 test1449 test145 test1450 test1451 test1452 test1453 test1454 test1455 test1456 test1457 test1458 test1459 test146 test1460 test1461 test1462 test1463 test1464 test1465 test1466 test1467 test1468 test1469 test147 test1470 test1471 test1472 test1473 test1474 test1475 test1476 test1477 test1478 test1479 test148 test1480 test1481 test1482 test1483 test1484 test1485 test1486 test1487 test1488 test1489 test149 test1490 test1491 test1492 test1493 test1494 test1495 test1496 test1497 test1498 test1499 test15 test150 test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 test1508 test1509 test151 test1510 test1511 test1512 test1513 test1514 test1515 test1516 test1517 test1518 test1519 test152 test1520 test1521 test1522 test1523 test1524 test1525 test1526 test1527 test1528 test1529 test153 test1530 test1531 test1532 test1533 test1534 test1535 test1536 test1537 test1538 test1539 test154 test1540 test1541 test1542 test1543 test1544 test1545 test1546 test1547 test1548 test1549 test155 test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 test1558 test1559 test156 test1560 test1561 test1562 test1563 test1564 test1565 test1566 test1567 test1568 test1569 test157 test1570 test1571 test1572 test1573 test1574 test1575 test1576 test1577 test1578 test1579 test158 test1580 test1581 test1582 test1583 test1584 test1585 test1586 test1587 test1588 test1589 test159 test1590 test1591 test1592 test1593 test1594 test1595 test1596 test1597 test1598 test1599 test16 test160 test1600 test1601 test1602 test1603 test1604 test1605 test1606 test1607 test1608 test1609 test161 test1610 test1611 test1612 test1613 test1614 test1615 test1616 test1617 test1618 test1619 test162 test1620 test1621 test1622 test1623 test1624 test1625 test1626 test1627 test1628 test1629 test163 test1630 test1631 test1632 test1633 test1634 test1635 test1636 test1637 test1638 test1639 test164 test1640 test1641 test1642 test1643 test1644 test1645 test165 test1650 test1651 test1652 test1653 test1654 test1655 test1656 test1657 test1658 test1659 test166 test1660 test1661 test1662 test1663 test1664 test1665 test1666 test1667 test1668 test1669 test167 test1670 test1671 test1672 test1673 test1674 test1675 test1676 test168 test1680 test1681 test1682 test1683 test1684 test1685 test169 test17 test170 test1700 test1701 test1702 test1703 test1704 test1705 test1706 test1707 test1708 test1709 test171 test1710 test1711 test1712 test1713 test1714 test1715 test172 test1720 test1721 test173 test174 test175 test176 test177 test178 test179 test18 test180 test1800 test1801 test1802 test181 test182 test183 test184 test1847 test1848 test1849 test185 test1850 test1851 test186 test187 test188 test189 test19 test190 test1900 test1901 test1902 test1903 test1904 test1905 test1906 test1907 test1908 test1909 test191 test1910 test1911 test1912 test1913 test1914 test1915 test1916 test1917 test1918 test1919 test192 test1920 test1921 test193 test1933 test1934 test1935 test1936 test1937 test1938 test1939 test194 test1940 test1941 test1942 test1943 test1944 test1945 test1946 test1947 test1948 test195 test1955 test1956 test1957 test1958 test1959 test196 test1960 test1964 test1965 test1966 test197 test1970 test1971 test1972 test1973 test1974 test1975 test1976 test1977 test1978 test1979 test198 test1980 test1981 test1982 test1983 test1984 test199 test2 test20 test200 test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 test2008 test2009 test201 test2010 test2011 test2012 test2013 test2014 test202 test2023 test2024 test2025 test2026 test2027 test2028 test2029 test203 test2030 test2031 test2032 test2033 test2034 test2035 test2037 test2038 test2039 test204 test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 test2048 test2049 test205 test2050 test2051 test2052 test2053 test2054 test2055 test2056 test2057 test2058 test2059 test206 test2060 test2061 test2062 test2063 test2064 test2065 test2066 test2067 test2068 test2069 test207 test2070 test2071 test2072 test2073 test2074 test2075 test2076 test2077 test2078 test2079 test208 test2080 test2081 test2082 test2083 test2084 test2085 test2086 test2087 test2088 test2089 test209 test2090 test2091 test2092 test21 test210 test2100 test2101 test2102 test2103 test2104 test211 test212 test213 test214 test215 test216 test217 test218 test219 test22 test220 test2200 test2201 test2202 test2203 test2204 test2205 test2206 test2207 test221 test222 test223 test224 test225 test226 test227 test228 test229 test23 test230 test2300 test2301 test2302 test2303 test2304 test2306 test2307 test2308 test2309 test231 test232 test233 test234 test235 test236 test237 test238 test239 test24 test240 test2400 test2401 test2402 test2403 test2404 test2405 test2406 test2407 test2408 test2409 test241 test2410 test2411 test242 test243 test244 test245 test246 test247 test248 test249 test25 test250 test2500 test2501 test2502 test2503 test2504 test2505 test2506 test251 test252 test253 test254 test255 test256 test257 test258 test259 test26 test260 test2600 test2601 test2602 test2603 test2604 test2605 test261 test262 test263 test264 test265 test266 test267 test268 test269 test27 test270 test2700 test2701 test2702 test2703 test2704 test2705 test2706 test2707 test2708 test2709 test271 test2710 test2711 test2712 test2713 test2714 test2715 test2716 test2717 test2718 test2719 test272 test2720 test2721 test2722 test2723 test273 test274 test275 test276 test277 test278 test279 test28 test280 test281 test282 test283 test284 test285 test286 test287 test288 test289 test29 test290 test291 test292 test293 test294 test295 test296 test297 test298 test299 test3 test30 test300 test3000 test3001 test3002 test3003 test3004 test3005 test3006 test3007 test3008 test3009 test301 test3010 test3011 test3012 test3013 test3014 test3015 test3016 test3017 test3018 test3019 test302 test3020 test3021 test3022 test3023 test3024 test3025 test3026 test3027 test3028 test3029 test303 test3030 test3031 test3032 test3033 test3034 test3035 test3036 test304 test305 test306 test307 test308 test309 test31 test310 test3100 test3101 test3102 test3103 test3104 test3105 test3106 test311 test312 test313 test314 test315 test316 test317 test318 test319 test32 test320 test3200 test3201 test3202 test3203 test3204 test3205 test3206 test3207 test3208 test3209 test321 test3210 test3211 test3212 test3213 test3214 test3215 test3216 test3217 test3218 test3219 test322 test3220 test323 test324 test325 test326 test327 test328 test329 test33 test330 test3300 test3301 test3302 test331 test332 test333 test334 test335 test336 test337 test338 test339 test34 test340 test341 test342 test343 test344 test345 test346 test347 test348 test349 test35 test350 test351 test352 test353 test354 test355 test356 test357 test358 test359 test36 test360 test361 test362 test363 test364 test365 test366 test367 test368 test369 test37 test370 test371 test372 test373 test374 test375 test376 test378 test379 test38 test380 test381 test383 test384 test385 test386 test387 test388 test389 test39 test390 test391 test392 test393 test394 test395 test396 test397 test398 test399 test4 test40 test400 test4000 test4001 test401 test402 test403 test404 test405 test406 test407 test408 test409 test41 test410 test411 test412 test413 test414 test415 test416 test417 test418 test419 test42 test420 test421 test422 test423 test424 test425 test426 test427 test428 test429 test43 test430 test431 test432 test433 test434 test435 test436 test437 test438 test439 test44 test440 test441 test442 test443 test444 test445 test446 test447 test448 test449 test45 test450 test451 test452 test453 test454 test455 test456 test457 test458 test459 test46 test460 test461 test462 test463 test467 test468 test469 test47 test470 test471 test472 test473 test474 test475 test476 test477 test478 test479 test48 test480 test481 test482 test483 test484 test485 test486 test487 test488 test489 test49 test490 test491 test492 test493 test494 test495 test496 test497 test498 test499 test5 test50 test500 test501 test502 test503 test504 test505 test506 test507 test508 test509 test51 test510 test511 test512 test513 test514 test515 test516 test517 test518 test519 test52 test520 test521 test522 test523 test524 test525 test526 test527 test528 test529 test53 test530 test531 test532 test533 test534 test535 test536 test537 test538 test539 test54 test540 test541 test542 test543 test544 test545 test546 test547 test548 test549 test55 test550 test551 test552 test553 test554 test555 test556 test557 test558 test559 test56 test560 test561 test562 test563 test564 test565 test566 test567 test568 test569 test57 test570 test571 test572 test573 test574 test575 test576 test577 test578 test579 test58 test580 test581 test582 test583 test584 test585 test586 test587 test588 test589 test59 test590 test591 test592 test593 test594 test595 test596 test597 test598 test599 test6 test60 test600 test601 test602 test603 test604 test605 test606 test607 test608 test609 test61 test610 test611 test612 test613 test614 test615 test616 test617 test618 test619 test62 test620 test621 test622 test623 test624 test625 test626 test627 test628 test629 test63 test630 test631 test632 test633 test634 test635 test636 test637 test638 test639 test64 test640 test641 test642 test643 test644 test645 test646 test647 test648 test649 test65 test650 test651 test652 test653 test654 test655 test656 test658 test659 test66 test660 test661 test662 test663 test664 test665 test666 test667 test668 test669 test67 test670 test671 test672 test673 test674 test675 test676 test677 test678 test679 test68 test680 test681 test682 test683 test684 test685 test686 test687 test688 test689 test69 test690 test691 test692 test693 test694 test695 test696 test697 test698 test699 test7 test70 test700 test701 test702 test703 test704 test705 test706 test707 test708 test709 test71 test710 test711 test712 test713 test714 test715 test716 test717 test718 test719 test72 test720 test721 test722 test723 test724 test725 test726 test727 test728 test729 test73 test730 test731 test732 test733 test734 test735 test736 test737 test738 test739 test74 test740 test741 test742 test743 test744 test745 test746 test747 test748 test749 test75 test750 test751 test752 test753 test754 test755 test756 test757 test758 test759 test76 test760 test761 test762 test763 test764 test765 test766 test767 test768 test769 test77 test770 test771 test772 test773 test774 test775 test776 test777 test778 test779 test78 test780 test781 test782 test783 test784 test785 test786 test787 test788 test789 test79 test790 test791 test792 test793 test794 test795 test796 test797 test798 test799 test8 test80 test800 test801 test802 test803 test804 test805 test806 test807 test808 test809 test81 test810 test811 test812 test813 test814 test815 test816 test817 test818 test819 test82 test820 test821 test822 test823 test824 test825 test826 test827 test828 test829 test83 test830 test831 test832 test833 test834 test835 test836 test837 test838 test839 test84 test840 test841 test842 test843 test844 test845 test846 test847 test848 test849 test85 test850 test851 test852 test853 test854 test855 test856 test857 test858 test859 test86 test860 test861 test862 test863 test864 test865 test866 test867 test868 test869 test87 test870 test871 test872 test873 test874 test875 test876 test877 test878 test879 test88 test880 test881 test882 test883 test884 test885 test886 test887 test888 test889 test89 test890 test891 test892 test893 test894 test895 test896 test897 test898 test899 test9 test90 test900 test901 test902 test903 test904 test905 test906 test907 test908 test909 test91 test910 test911 test912 test913 test914 test915 test916 test917 test918 test919 test92 test920 test921 test922 test923 test924 test925 test926 test927 test928 test929 test93 test930 test931 test932 test933 test934 test935 test936 test937 test938 test939 test94 test940 test941 test942 test943 test944 test945 test946 test947 test948 test949 test95 test950 test951 test952 test953 test954 test955 test956 test957 test958 test959 test96 test960 test961 test962 test963 test964 test965 test966 test967 test968 test969 test97 test970 test971 test972 test973 test974 test975 test976 test977 test978 test979 test98 test980 test981 test982 test983 test984 test985 test986 test987 test988 test989 test99 test990 test991 test992 test993 test994 test995 test996 test997 test998 test999
http
testenv
mod_curltest .gitignore mod_curltest.c
__init__.py caddy.py certs.py client.py curl.py dante.py dnsd.py env.py httpd.py nghttpx.py ports.py sshd.py vsftpd.py ws_echo_server.py
.gitignore CMakeLists.txt Makefile.am config.ini.in conftest.py requirements.txt scorecard.py test_01_basic.py test_02_download.py test_03_goaway.py test_04_stuttered.py test_05_errors.py test_06_eyeballs.py test_07_upload.py test_08_caddy.py test_09_push.py test_10_proxy.py test_11_unix.py test_12_reuse.py test_13_proxy_auth.py test_14_auth.py test_15_tracing.py test_16_info.py test_17_ssl_use.py test_18_methods.py test_19_shutdown.py test_20_websockets.py test_21_resolve.py test_22_httpsrr.py test_30_vsftpd.py test_31_vsftpds.py test_32_ftps_vsftpd.py test_40_socks.py test_50_scp.py test_51_sftp.py
libtest .gitignore CMakeLists.txt Makefile.am Makefile.inc cli_ftp_upload.c cli_h2_pausing.c cli_h2_serverpush.c cli_h2_upgrade_extreme.c cli_hx_download.c cli_hx_upload.c cli_tls_session_reuse.c cli_upload_pausing.c cli_ws_data.c cli_ws_pingpong.c first.c first.h lib1156.c lib1301.c lib1308.c lib1485.c lib1500.c lib1501.c lib1502.c lib1506.c lib1507.c lib1508.c lib1509.c lib1510.c lib1511.c lib1512.c lib1513.c lib1514.c lib1515.c lib1517.c lib1518.c lib1520.c lib1522.c lib1523.c lib1525.c lib1526.c lib1527.c lib1528.c lib1529.c lib1530.c lib1531.c lib1532.c lib1533.c lib1534.c lib1535.c lib1536.c lib1537.c lib1538.c lib1540.c lib1541.c lib1542.c lib1545.c lib1549.c lib1550.c lib1551.c lib1552.c lib1553.c lib1554.c lib1555.c lib1556.c lib1557.c lib1558.c lib1559.c lib1560.c lib1564.c lib1565.c lib1567.c lib1568.c lib1569.c lib1571.c lib1576.c lib1582.c lib1587.c lib1588.c lib1589.c lib1591.c lib1592.c lib1593.c lib1594.c lib1597.c lib1598.c lib1599.c lib1662.c lib1900.c lib1901.c lib1902.c lib1903.c lib1905.c lib1906.c lib1907.c lib1908.c lib1910.c lib1911.c lib1912.c lib1913.c lib1915.c lib1916.c lib1918.c lib1919.c lib1920.c lib1921.c lib1933.c lib1934.c lib1935.c lib1936.c lib1937.c lib1938.c lib1939.c lib1940.c lib1945.c lib1947.c lib1948.c lib1955.c lib1956.c lib1957.c lib1958.c lib1959.c lib1960.c lib1964.c lib1965.c lib1970.c lib1971.c lib1972.c lib1973.c lib1974.c lib1975.c lib1977.c lib1978.c lib2023.c lib2032.c lib2082.c lib2301.c lib2302.c lib2304.c lib2306.c lib2308.c lib2309.c lib2402.c lib2404.c lib2405.c lib2502.c lib2504.c lib2505.c lib2506.c lib2700.c lib3010.c lib3025.c lib3026.c lib3027.c lib3033.c lib3034.c lib3100.c lib3101.c lib3102.c lib3103.c lib3104.c lib3105.c lib3207.c lib3208.c lib500.c lib501.c lib502.c lib503.c lib504.c lib505.c lib506.c lib507.c lib508.c lib509.c lib510.c lib511.c lib512.c lib513.c lib514.c lib515.c lib516.c lib517.c lib518.c lib519.c lib520.c lib521.c lib523.c lib524.c lib525.c lib526.c lib530.c lib533.c lib536.c lib537.c lib539.c lib540.c lib541.c lib542.c lib543.c lib544.c lib547.c lib549.c lib552.c lib553.c lib554.c lib555.c lib556.c lib557.c lib558.c lib559.c lib560.c lib562.c lib564.c lib566.c lib567.c lib568.c lib569.c lib570.c lib571.c lib572.c lib573.c lib574.c lib575.c lib576.c lib578.c lib579.c lib582.c lib583.c lib586.c lib589.c lib590.c lib591.c lib597.c lib598.c lib599.c lib643.c lib650.c lib651.c lib652.c lib653.c lib654.c lib655.c lib658.c lib659.c lib661.c lib666.c lib667.c lib668.c lib670.c lib674.c lib676.c lib677.c lib678.c lib694.c lib695.c lib751.c lib753.c lib757.c lib758.c lib766.c memptr.c mk-lib1521.pl test1013.pl test1022.pl test307.pl test610.pl test613.pl testtrace.c testtrace.h testutil.c testutil.h unitcheck.h
server .checksrc .gitignore CMakeLists.txt Makefile.am Makefile.inc dnsd.c first.c first.h getpart.c mqttd.c resolve.c rtspd.c sockfilt.c socksd.c sws.c tftpd.c util.c
tunit .gitignore CMakeLists.txt Makefile.am Makefile.inc README.md tool1394.c tool1604.c tool1621.c tool1622.c tool1623.c tool1720.c
unit .gitignore CMakeLists.txt Makefile.am Makefile.inc README.md unit1300.c unit1302.c unit1303.c unit1304.c unit1305.c unit1307.c unit1309.c unit1323.c unit1330.c unit1395.c unit1396.c unit1397.c unit1398.c unit1399.c unit1600.c unit1601.c unit1602.c unit1603.c unit1605.c unit1606.c unit1607.c unit1608.c unit1609.c unit1610.c unit1611.c unit1612.c unit1614.c unit1615.c unit1616.c unit1620.c unit1625.c unit1626.c unit1627.c unit1636.c unit1650.c unit1651.c unit1652.c unit1653.c unit1654.c unit1655.c unit1656.c unit1657.c unit1658.c unit1660.c unit1661.c unit1663.c unit1664.c unit1666.c unit1667.c unit1668.c unit1669.c unit1674.c unit1675.c unit1676.c unit1979.c unit1980.c unit2600.c unit2601.c unit2602.c unit2603.c unit2604.c unit2605.c unit3200.c unit3205.c unit3211.c unit3212.c unit3213.c unit3214.c unit3216.c unit3219.c unit3300.c unit3301.c unit3302.c
.gitignore CMakeLists.txt Makefile.am allversions.pm appveyor.pm azure.pm config.in configurehelp.pm.in devtest.pl dictserver.py directories.pm ech_combos.py ech_tests.sh ftpserver.pl getpart.pm globalconfig.pm http-server.pl http2-server.pl http3-server.pl memanalyze.pl memanalyzer.pm negtelnetserver.py nghttpx.conf pathhelp.pm processhelp.pm requirements.txt rtspserver.pl runner.pm runtests.pl secureserver.pl serverhelp.pm servers.pm smbserver.py sshhelp.pm sshserver.pl test1119.pl test1135.pl test1139.pl test1140.pl test1165.pl test1167.pl test1173.pl test1175.pl test1177.pl test1222.pl test1275.pl test1276.pl test1477.pl test1486.pl test1488.pl test1544.pl test1707.pl test745.pl test971.pl testcurl.pl testutil.pm tftpserver.pl util.py valgrind.pm valgrind.supp
.clang-tidy.yml .dir-locals.el .editorconfig .git-blame-ignore-revs .gitattributes .gitignore .mailmap CHANGES.md CMakeLists.txt COPYING Dockerfile GIT-INFO.md Makefile.am README README.md RELEASE-NOTES REUSE.toml SECURITY.md acinclude.m4 appveyor.sh appveyor.yml configure.ac curl-config.in libcurl.pc.in renovate.json
examples .env config.ini crypto_test.lua env_test.lua fs_example.lua http_server.lua https_test.lua ini_example.lua json.lua log.lua path_fs_example.lua process_example.lua request_download.lua request_test.lua run_all.lua sqlite_example.lua sqlite_http_template.lua stash_test.lua template_test.lua timer.lua websocket.lua
iniparser
.github
ISSUE_TEMPLATE config.yml
workflows disable-pull-requests.yml trigger-gitlab-ci.yml
cmake JoinPaths.cmake config.cmake.in pc.in
example iniexample.c iniwrite.c parse.c twisted-errors.ini twisted-genhuge.py twisted-ofkey.ini twisted-ofval.ini twisted.ini
src dictionary.c dictionary.h iniparser.c iniparser.h
test
ressources
bad_ini ends_well.ini twisted-errors.ini twisted-ofkey.ini twisted-ofval.ini
good_ini empty.ini spaced.ini spaced2.ini twisted.ini
gruezi.ini old.ini quotes.ini utf8.ini
CMakeLists.txt test_dictionary.c test_iniparser.c unity-config.yml unity_config.h
.cmake-format.py .gitignore .gitlab-ci.yml .gitmessage .travis.yml AUTHORS CMakeLists.txt FAQ-en.md FAQ-zhcn.md INSTALL LICENSE README.md compile_commands.json
jinjac
example CMakeLists.txt example.c
jinjac_test_app CMakeLists.txt jinjac_test_app.c
libjinjac
include jinjac.h
src CMakeLists.txt ast.c ast.h block_statement.c block_statement.h buffer.c buffer.h buildin.c buildin.h common.h convert.c convert.h flex_decl.h jfunction.c jfunction.h jinja_expression.l jinja_expression.y jinjac_parse.c jinjac_parse.h jinjac_stream.c jinjac_stream.h jlist.c jlist.h jobject.c jobject.h parameter.c parameter.h str_obj.c str_obj.h trace.c trace.h
CMakeLists.txt
test .gitignore CMakeLists.txt autotest.rb test_01.expected test_01.jinja test_01b.expected test_01b.jinja test_01c.expected test_01c.jinja test_01d.expected test_01d.jinja test_02.expected test_02.jinja test_03.expected test_03.jinja test_04.expected test_04.jinja test_05.expected test_05.jinja test_06.expected test_06.jinja test_07.expected test_07.jinja test_08.expected test_08.jinja test_08b.expected test_08b.jinja test_09.expected test_09.jinja test_10.expected test_10.jinja test_11.expected test_11.jinja test_12.expected test_12.jinja test_13.expected test_13.jinja test_14.expected test_14.jinja test_15.expected test_15.jinja test_16.expected test_16.jinja test_17.expected test_17.jinja test_18.expected test_18.jinja test_18b.expected test_18b.jinja test_18c.expected test_18c.jinja test_19.expected test_19.jinja test_19b.expected test_19b.jinja test_19c.expected test_19c.jinja test_19d.expected test_19d.jinja test_19e.expected test_19e.jinja test_19f.expected test_19f.jinja test_20.expected test_20.jinja test_21.expected test_21.jinja test_22.expected test_22.jinja test_22a.expected test_22a.jinja test_22b.expected test_22b.jinja test_23.expected test_23.jinja test_24.expected test_24.jinja
.gitignore CMakeLists.txt LICENSE.txt README.md build_coverage.sh build_debug.sh build_release.sh cppcheck_analysis.sh
libev Changes LICENSE Makefile Makefile.am Makefile.in README Symbols.ev Symbols.event aclocal.m4 autogen.sh compile config.guess config.h config.h.in config.status config.sub configure configure.ac depcomp ev++.h ev.3 ev.c ev.h ev.pod ev_epoll.c ev_kqueue.c ev_poll.c ev_port.c ev_select.c ev_vars.h ev_win32.c ev_wrap.h event.c event.h install-sh libev.m4 libtool ltmain.sh missing mkinstalldirs stamp-h1
luajit
doc
img contact.png
bluequad-print.css bluequad.css contact.html ext_buffer.html ext_c_api.html ext_ffi.html ext_ffi_api.html ext_ffi_semantics.html ext_ffi_tutorial.html ext_jit.html ext_profiler.html extensions.html install.html luajit.html running.html
dynasm dasm_arm.h dasm_arm.lua dasm_arm64.h dasm_arm64.lua dasm_mips.h dasm_mips.lua dasm_mips64.lua dasm_ppc.h dasm_ppc.lua dasm_proto.h dasm_x64.lua dasm_x86.h dasm_x86.lua dynasm.lua
etc luajit.1 luajit.pc
src
host .gitignore README buildvm.c buildvm.h buildvm_asm.c buildvm_fold.c buildvm_lib.c buildvm_libbc.h buildvm_peobj.c genlibbc.lua genminilua.lua genversion.lua minilua.c
jit .gitignore bc.lua bcsave.lua dis_arm.lua dis_arm64.lua dis_arm64be.lua dis_mips.lua dis_mips64.lua dis_mips64el.lua dis_mips64r6.lua dis_mips64r6el.lua dis_mipsel.lua dis_ppc.lua dis_x64.lua dis_x86.lua dump.lua p.lua v.lua zone.lua
.gitignore Makefile Makefile.dep lauxlib.h lib_aux.c lib_base.c lib_bit.c lib_buffer.c lib_debug.c lib_ffi.c lib_init.c lib_io.c lib_jit.c lib_math.c lib_os.c lib_package.c lib_string.c lib_table.c lj_alloc.c lj_alloc.h lj_api.c lj_arch.h lj_asm.c lj_asm.h lj_asm_arm.h lj_asm_arm64.h lj_asm_mips.h lj_asm_ppc.h lj_asm_x86.h lj_assert.c lj_bc.c lj_bc.h lj_bcdump.h lj_bcread.c lj_bcwrite.c lj_buf.c lj_buf.h lj_carith.c lj_carith.h lj_ccall.c lj_ccall.h lj_ccallback.c lj_ccallback.h lj_cconv.c lj_cconv.h lj_cdata.c lj_cdata.h lj_char.c lj_char.h lj_clib.c lj_clib.h lj_cparse.c lj_cparse.h lj_crecord.c lj_crecord.h lj_ctype.c lj_ctype.h lj_debug.c lj_debug.h lj_def.h lj_dispatch.c lj_dispatch.h lj_emit_arm.h lj_emit_arm64.h lj_emit_mips.h lj_emit_ppc.h lj_emit_x86.h lj_err.c lj_err.h lj_errmsg.h lj_ff.h lj_ffrecord.c lj_ffrecord.h lj_frame.h lj_func.c lj_func.h lj_gc.c lj_gc.h lj_gdbjit.c lj_gdbjit.h lj_ir.c lj_ir.h lj_ircall.h lj_iropt.h lj_jit.h lj_lex.c lj_lex.h lj_lib.c lj_lib.h lj_load.c lj_mcode.c lj_mcode.h lj_meta.c lj_meta.h lj_obj.c lj_obj.h lj_opt_dce.c lj_opt_fold.c lj_opt_loop.c lj_opt_mem.c lj_opt_narrow.c lj_opt_sink.c lj_opt_split.c lj_parse.c lj_parse.h lj_prng.c lj_prng.h lj_profile.c lj_profile.h lj_record.c lj_record.h lj_serialize.c lj_serialize.h lj_snap.c lj_snap.h lj_state.c lj_state.h lj_str.c lj_str.h lj_strfmt.c lj_strfmt.h lj_strfmt_num.c lj_strscan.c lj_strscan.h lj_tab.c lj_tab.h lj_target.h lj_target_arm.h lj_target_arm64.h lj_target_mips.h lj_target_ppc.h lj_target_x86.h lj_trace.c lj_trace.h lj_traceerr.h lj_udata.c lj_udata.h lj_vm.h lj_vmevent.c lj_vmevent.h lj_vmmath.c ljamalg.c lua.h lua.hpp luaconf.h luajit.c luajit_rolling.h lualib.h msvcbuild.bat nxbuild.bat ps4build.bat ps5build.bat psvitabuild.bat vm_arm.dasc vm_arm64.dasc vm_mips.dasc vm_mips64.dasc vm_ppc.dasc vm_x64.dasc vm_x86.dasc xb1build.bat xedkbuild.bat
.gitattributes .gitignore .relver COPYRIGHT Makefile README
sqlite shell.c sqlite3.c sqlite3.h sqlite3ext.h
wolfssl
.github
ISSUE_TEMPLATE bug_report.yaml other.yaml
actions
install-apt-deps action.yml
scripts
zephyr-4.x external_libc.conf zephyr-test.sh
openssl-ech.sh tls-anvil-test.sh
workflows
disabled haproxy.yml hitch.yml hostap.yml
hostap-files
configs
07c9f183ea744ac04585fb6dd10220c75a5e2e74 hostapd.config tests wpa_supplicant.config
b607d2723e927a3446d89aed813f1aa6068186bb hostapd.config tests wpa_supplicant.config
hostap_2_10 extra.patch hostapd.config tests wpa_supplicant.config
Makefile README dbus-wpa_supplicant.conf
ada.yml arduino.yml async-examples.yml async.yml atecc608-sim.yml bind.yml cmake-autoconf.yml cmake.yml codespell.yml coverity-scan-fixes.yml cryptocb-only.yml curl.yml cyrus-sasl.yml disable-pk-algs.yml docker-Espressif.yml docker-OpenWrt.yml emnet-nonblock.yml fil-c.yml freertos-mem-track.yml gencertbuf.yml grpc.yml haproxy.yml hostap-vm.yml intelasm-c-fallback.yml ipmitool.yml jwt-cpp.yml krb5.yml libspdm.yml libssh2.yml libvncserver.yml linuxkm.yml macos-apple-native-cert-validation.yml mbedtls.sh mbedtls.yml membrowse-comment.yml membrowse-onboard.yml membrowse-report.yml memcached.sh memcached.yml mono.yml mosquitto.yml msmtp.yml msys2.yml multi-arch.yml multi-compiler.yml net-snmp.yml nginx.yml no-malloc.yml no-tls.yml nss.sh nss.yml ntp.yml ocsp.yml openldap.yml openssh.yml openssl-ech.yml opensslcoexist.yml openvpn.yml os-check.yml packaging.yml pam-ipmi.yml pq-all.yml pr-commit-check.yml psk.yml puf.yml python.yml rng-tools.yml rust-wrapper.yml se050-sim.yml smallStackSize.yml socat.yml softhsm.yml sssd.yml stm32-sim.yml stsafe-a120-sim.yml stunnel.yml symbol-prefixes.yml threadx.yml tls-anvil.yml trackmemory.yml watcomc.yml win-csharp-test.yml wolfCrypt-Wconversion.yml wolfboot-integration.yml wolfsm.yml xcode.yml zephyr-4.x.yml zephyr.yml
PULL_REQUEST_TEMPLATE.md SECURITY.md membrowse-targets.json
Docker
OpenWrt Dockerfile README.md runTests.sh
packaging
debian Dockerfile
fedora Dockerfile
wolfCLU Dockerfile README.md
yocto Dockerfile buildAndPush.sh
Dockerfile Dockerfile.cross-compiler README.md buildAndPush.sh include.am run.sh
IDE
ARDUINO
sketches
wolfssl_client README.md
wolfssl_server README.md
wolfssl_version README.md
README.md
Arduino_README_prepend.md README.md include.am keywords.txt library.properties.template wolfssl-arduino.cpp wolfssl-arduino.sh wolfssl.h
AURIX Cpu0_Main.c README.md include.am user_settings.h wolf_main.c
Android Android.bp README.md include.am user_settings.h
CRYPTOCELL README.md include.am main.c user_settings.h
CSBENCH include.am user_settings.h
ECLIPSE
DEOS
deos_wolfssl .options
README.md deos_malloc.c include.am tls_wolfssl.c tls_wolfssl.h user_settings.h
MICRIUM README.md client_wolfssl.c client_wolfssl.h include.am server_wolfssl.c server_wolfssl.h user_settings.h wolfsslRunTests.c
RTTHREAD README.md include.am user_settings.h wolfssl_test.c
SIFIVE README.md include.am
Espressif
ESP-IDF
examples
template
VisualGDB wolfssl_template_IDF_v5.1_ESP32.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h
CMakeLists.txt Kconfig.projbuild component.mk main.c
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp8266
wolfssl_benchmark
VisualGDB wolfssl_benchmark_IDF_v4.4_ESP32.sln wolfssl_benchmark_IDF_v4.4_ESP32.vgdbproj wolfssl_benchmark_IDF_v5_ESP32.sln wolfssl_benchmark_IDF_v5_ESP32.vgdbproj wolfssl_benchmark_IDF_v5_ESP32C3.sln wolfssl_benchmark_IDF_v5_ESP32C3.vgdbproj wolfssl_benchmark_IDF_v5_ESP32S3.sln wolfssl_benchmark_IDF_v5_ESP32S3.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h
CMakeLists.txt Kconfig.projbuild component.mk main.c
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp8266
wolfssl_client
VisualGDB README.md wolfssl_client_IDF_v5_ESP32.sln wolfssl_client_IDF_v5_ESP32.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include client-tls.h main.h time_helper.h wifi_connect.h
CMakeLists.txt Kconfig.projbuild client-tls.c component.mk main.c time_helper.c wifi_connect.c
CMakeLists.txt Makefile README.md README_server_sm.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32c2 sdkconfig.defaults.esp8266 wolfssl_client_ESP8266.vgdbproj
wolfssl_server
VisualGDB README.md wolfssl_server_IDF_v5_ESP32.sln wolfssl_server_IDF_v5_ESP32.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h server-tls.h time_helper.h wifi_connect.h
CMakeLists.txt Kconfig.projbuild component.mk main.c server-tls.c time_helper.c wifi_connect.c
CMakeLists.txt Makefile README.md README_server_sm.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32c2 sdkconfig.defaults.esp8266 wolfssl_server_ESP8266.vgdbproj
wolfssl_test
VisualGDB wolfssl_test-IDF_v5_ESP32.sln wolfssl_test-IDF_v5_ESP32.vgdbproj wolfssl_test-IDF_v5_ESP32C3.sln wolfssl_test-IDF_v5_ESP32C3.vgdbproj wolfssl_test-IDF_v5_ESP32C6.sln wolfssl_test-IDF_v5_ESP32C6.vgdbproj wolfssl_test_IDF_v5_ESP32S3.sln wolfssl_test_IDF_v5_ESP32S3.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h
CMakeLists.txt Kconfig.projbuild component.mk main.c
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32 sdkconfig.defaults.esp32c3 sdkconfig.defaults.esp32c6 sdkconfig.defaults.esp32h2 sdkconfig.defaults.esp32s2 sdkconfig.defaults.esp32s3 sdkconfig.defaults.esp8266 testAll.sh testMonitor.sh wolfssl_test_ESP8266.sln wolfssl_test_ESP8266.vgdbproj
wolfssl_test_idf
VisualGDB VisualGDB_wolfssl_test_idf.sln VisualGDB_wolfssl_test_idf.vgdbproj
main CMakeLists.txt Kconfig.projbuild component.mk main.c main_wip.c.ex time_helper.c time_helper.h
CMakeLists.txt Kconfig.projbuild README.md component.mk sdkconfig.defaults
README.md
libs CMakeLists.txt README.md component.mk tigard.cfg
test CMakeLists.txt README.md component.mk test_wolfssl.c
README.md README_32se.md UPDATE.md compileAllExamples.sh dummy_config_h dummy_test_paths.h setup.sh setup_win.bat user_settings.h
README.md include.am
GCC-ARM
Header user_settings.h
Source armtarget.c benchmark_main.c test_main.c tls_client.c tls_server.c wolf_main.c
Makefile Makefile.bench Makefile.client Makefile.common Makefile.server Makefile.static Makefile.test README.md include.am linker.ld linker_fips.ld
Gaisler-BCC README.md include.am
HEXAGON
DSP Makefile wolfssl_dsp.idl
Makefile README.md build.sh ecc-verify-benchmark.c ecc-verify.c include.am user_settings.h
HEXIWEAR
wolfSSL_HW .cwGeneratedFileSetLog user_settings.h
IAR-EWARM
Projects
benchmark benchmark-main.c current_time.c wolfCrypt-benchmark.ewd wolfCrypt-benchmark.ewp
common minimum-startup.c wolfssl.icf
lib wolfSSL-Lib.ewd wolfSSL-Lib.ewp
test test-main.c wolfCrypt-test.ewd wolfCrypt-test.ewp
user_settings.h wolfssl.eww
embOS
SAMV71_XULT
embOS_SAMV71_XULT_Linker_Script samv71q21_wolfssl.icf
embOS_SAMV71_XULT_user_settings user_settings.h user_settings_simple_example.h user_settings_verbose_example.h
embOS_wolfcrypt_benchmark_SAMV71_XULT
Application runBenchmarks.c
README_wolfcrypt_benchmark wolfcrypt_benchmark.ewd wolfcrypt_benchmark.ewp
embOS_wolfcrypt_lib_SAMV71_XULT README_wolfcrypt_lib wolfcrypt_lib.ewd wolfcrypt_lib.ewp
embOS_wolfcrypt_test_SAMV71_XULT
Application runWolfcryptTests.c
README_wolfcrypt_test wolfcrypt_test.ewd wolfcrypt_test.ewp
README_SAMV71
custom_port
custom_port_Linker_Script samv71q21_wolfssl.icf
custom_port_user_settings user_settings.h
wolfcrypt_benchmark_custom_port
Application runBenchmarks.c
wolfcrypt_test_custom_port
Application runWolfcryptTests.c
README_custom_port
extract_trial_here README_extract_trial_here
README
.gitignore README
IAR-MSP430 Makefile README.md include.am main.c user_settings.h
INTIME-RTOS Makefile README.md include.am libwolfssl.c libwolfssl.vcxproj user_settings.h wolfExamples.c wolfExamples.h wolfExamples.sln wolfExamples.vcxproj wolfssl-lib.sln wolfssl-lib.vcxproj
Infineon README.md include.am user_settings.h
KDS
config user_settings.h
include.am
LINUX-SGX README.md build.sh clean.sh include.am sgx_t_static.mk
LPCXPRESSO
lib_wolfssl lpc_18xx_port.c user_settings.h
wolf_example
src lpc_18xx_startup.c wolfssl_example.c
readme.txt
README.md
M68K
benchmark Makefile main.cpp
testwolfcrypt Makefile main.cpp
Makefile README.md include.am user_settings.h
MCUEXPRESSO
RT1170 fsl_caam_c.patch fsl_caam_h.patch user_settings.h
benchmark
source run_benchmark.c
wolfssl liblinks.xml
README.md include.am user_settings.h wolfcrypt_test.c
MDK-ARM
LPC43xx time-LCP43xx.c
MDK-ARM
wolfSSL Retarget.c cert_data.c cert_data.h config-BARE-METAL.h config-FS.h config-RTX-TCP-FS.h config-WOLFLIB.h main.c shell.c time-CortexM3-4.c time-dummy.c wolfssl_MDK_ARM.c wolfssl_MDK_ARM.h
STM32F2xx_StdPeriph_Lib time-STM32F2xx.c
MDK5-ARM
Conf user_settings.h
Inc wolfssl_MDK_ARM.h
Projects
CryptBenchmark Abstract.txt CryptBenchmark.sct CryptBenchmark.uvoptx CryptBenchmark.uvprojx main.c
CryptTest Abstract.txt CryptTest.sct CryptTest.uvoptx CryptTest.uvprojx main.c
EchoClient Abstract.txt EchoClient.uvoptx EchoClient.uvprojx main.c wolfssl-link.sct
EchoServer Abstract.txt EchoServer.uvoptx EchoServer.uvprojx main.c wolfssl-link.sct
SimpleClient Abstract.txt SimpleClient.uvoptx SimpleClient.uvprojx main.c wolfssl-link.sct
SimpleServer Abstract.txt SimpleServer.uvoptx SimpleServer.uvprojx main.c wolfssl-link.sct
wolfSSL-Full Abstract.txt main.c shell.c time-CortexM3-4.c wolfsslFull.uvoptx wolfsslFull.uvprojx
wolfSSL-Lib Abstract.txt wolfSSL-Lib.uvoptx wolfSSL-Lib.uvprojx
Src ssl-dummy.c
README.md include.am
MPLABX16
wolfcrypt_test.X
nbproject
private configurations.xml private.xml
configurations.xml include.am project.xml
Makefile
wolfssl.X
nbproject configurations.xml include.am project.xml
Makefile
README.md include.am main.c user_settings.h
MQX Makefile README-jp.md README.md client-tls.c include.am server-tls.c user_config.h user_settings.h
MSVS-2019-AZSPHERE
client client.c client.h
server server.c server.h
shared util.h
wolfssl_new_azsphere
HardwareDefinitions
avnet_mt3620_sk
inc
hw template_appliance.h
template_appliance.json
mt3620_rdb
inc
hw template_appliance.h
template_appliance.json
seeed_mt3620_mdb
inc
hw template_appliance.h
template_appliance.json
.gitignore CMakeLists.txt CMakeSettings.json app_manifest.json applibs_versions.h launch.vs.json main.c
README.md include.am user_settings.h
MYSQL CMakeLists_wolfCrypt.txt CMakeLists_wolfSSL.txt do.sh
NDS README.md
NETOS Makefile.wolfcrypt.inc README.md include.am user_settings.h user_settings.h-cert2425 user_settings.h-cert3389 wolfssl_netos_custom.c
OPENSTM32 README.md
PlatformIO
examples
wolfssl_benchmark
include README main.h
lib README
src CMakeLists.txt main.c
test README
CMakeLists.txt README.md platformio.ini sdkconfig.defaults wolfssl_benchmark.code-workspace
wolfssl_test
include README main.h
lib README
src CMakeLists.txt main.c
test README
CMakeLists.txt README.md platformio.ini sdkconfig.defaults wolfssl_test.code-workspace
README.md wolfssl_platformio.code-workspace
README.md include.am
QNX
CAAM-DRIVER Makefile
example-client Makefile client-tls.c
example-cmac Makefile cmac-test.c
example-server Makefile server-tls.c
testwolfcrypt Makefile
wolfssl Makefile user_settings.h
README.md include.am
RISCV
SIFIVE-HIFIVE1 Makefile README.md include.am main.c user_settings.h
SIFIVE-UNLEASHED README.md include.am
include.am
ROWLEY-CROSSWORKS-ARM Kinetis_FlashPlacement.xml README.md arm_startup.c benchmark_main.c hw.h include.am kinetis_hw.c retarget.c test_main.c user_settings.h wolfssl.hzp wolfssl_ltc.hzp
Renesas
cs+
Projects
common strings.h unistd.h user_settings.h wolfssl_dummy.c
t4_demo README_en.txt README_jp.txt t4_demo.mtpj wolf_client.c wolf_demo.h wolf_main.c wolf_server.c
test test.mtpj test_main.c
wolfssl_lib wolfssl_lib.mtpj
README include.am
e2studio
DK-S7G2
benchmark-template
src app_entry.c
example_server-template
src app_entry.c
wolfcrypttest-template
src app_entry.c
wolfssl-template-project configuration.xml
README.md include.am user_settings.h
Projects
common strings.h unistd.h user_settings.h wolfssl_dummy.c
test
src key_data.c key_data.h test_main.c wolf_client.c wolf_server.c wolfssl_demo.h
tools generate_rsa_keypair.sh genhexbuf.pl rsa_pss_sign.sh
wolfssl
src .gitkeep
wolfcrypt
src .gitkeep
README include.am
RA6M3
benchmark-wolfcrypt
common .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
client-wolfssl
common
src .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
wolfssl_thread_entry.h
common
ra6m3g README.md
src freertos_tcp_port.c
user_settings.h util.h
server-wolfssl
common
src .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
wolfssl_thread_entry.h
test-wolfcrypt
common .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
wolfssl
src .gitkeep
wolfcrypt .gitkeep
README.md README_APRA6M_en.md README_APRA6M_jp.md include.am
RA6M3G README.md
RA6M4
common user_settings.h wolfssl_demo.h
test
key_data key_data.h key_data_sce.c
src
SEGGER_RTT myprint.c
common .gitignore
test_main.c wolf_client.c wolfssl_sce_unit_test.c
test_RA6M4Debug.launch
tools
example_keys generate_SignedCA.sh rsa_private.pem rsa_public.pem
README.md
README.md include.am
RX65N
GR-ROSE
common strings.h unistd.h user_settings.h wolfssl_dummy.c
smc smc.scfg
test
src key_data.c key_data.h test_main.c wolf_client.c wolf_server.c wolfssl_demo.h
test.rcpc test_HardwareDebug.launch
tools
example_keys generate_SignedCA.sh rsa_private.pem rsa_public.pem
README.md
wolfssl wolfssl.rcpc
README_EN.md README_JP.md include.am
RSK
resource section.esi
wolfssl wolfssl.rcpc
wolfssl_demo key_data.c key_data.h user_settings.h wolfssl_demo.c wolfssl_demo.h
InstructionManualForExample_RSK+RX65N-2MB_EN.pdf InstructionManualForExample_RSK+RX65N-2MB_JP.pdf README_EN.md README_JP.md include.am
RX72N
EnvisionKit
Simple
common sectioninfo.esi wolfssl_dummy.c
test
src
client simple_tcp_client.c simple_tls_tsip_client.c
server simple_tcp_server.c simple_tls_server.c
test_main.c wolfssl_simple_demo.h
test.rcpc test.scfg test_HardwareDebug.launch
wolfssl wolfssl.rcpc
README_EN.md README_JP.md
resource section.esi
tools
example_keys generate_SignedCA.sh rsa_private.pem rsa_public.pem
README.md
wolfssl wolfssl.rcpc
wolfssl_demo key_data.c key_data.h user_settings.h wolfssl_demo.c wolfssl_demo.h wolfssl_tsip_unit_test.c
InstructionManualForExample_RX72N_EnvisonKit_EN.pdf InstructionManualForExample_RX72N_EnvisonKit_JP.pdf README_EN.md README_JP.md include.am
RZN2L
common user_settings.h wolfssl_demo.h
test
src
serial_io app_print.c
test wolf_client.c wolf_server.c wolfssl_rsip_unit_test.c
wolfCrypt .gitignore
wolfSSL .gitignore
local_system_init.c rzn2l_tst_thread_entry.c wolfssl_dummy.c
README.md include.am
SK-S7G2
common user_settings.h
wolfssl_lib configuration.xml
.gitignore README.md include.am
STARCORE README.txt include.am starcore_test.c user_settings.h
STM32Cube README.md STM32_Benchmarks.md default_conf.ftl include.am main.c wolfssl_example.c wolfssl_example.h
SimplicityStudio README.md include.am test_wolf.c user_settings.h
TRUESTUDIO
wolfssl user_settings.h
README include.am
VS-ARM README.md include.am user_settings.h wolfssl.sln wolfssl.vcxproj
VS-AZURE-SPHERE
client app_manifest.json client.c client.h client.vcxproj
server app_manifest.json server.c server.h server.vcxproj
shared util.h
wolfcrypt_test app_manifest.json wolfcrypt_test.vcxproj
README.md include.am user_settings.h wolfssl.sln wolfssl.vcxproj
VisualDSP include.am user_settings.h wolf_tasks.c
WICED-STUDIO README include.am user_settings.h
WIN README.txt include.am test.vcxproj user_settings.h user_settings_dtls.h wolfssl-fips.sln wolfssl-fips.vcxproj
WIN-SGX ReadMe.txt include.am wolfSSL_SGX.edl wolfSSL_SGX.sln wolfSSL_SGX.vcxproj
WIN-SRTP-KDF-140-3 README.txt include.am resource.h test.vcxproj user_settings.h wolfssl-fips.rc wolfssl-fips.sln wolfssl-fips.vcxproj
WIN10 README.txt include.am resource.h test.vcxproj user_settings.h wolfssl-fips.rc wolfssl-fips.sln wolfssl-fips.vcxproj
WINCE README.md include.am user_settings.h user_settings.h.140-2-deprecated
WORKBENCH README.md include.am
XCODE
Benchmark
wolfBench
Assets.xcassets
AppIcon.appiconset Contents.json
Base.lproj LaunchScreen.storyboard Main.storyboard
AppDelegate.h AppDelegate.m Info.plist ViewController.h ViewController.m main.m
wolfBench.xcodeproj project.pbxproj
include.am
wolfssl-FIPS.xcodeproj project.pbxproj
wolfssl.xcodeproj project.pbxproj
wolfssl_testsuite.xcodeproj project.pbxproj
README.md build-for-i386.sh include.am user_settings.h
XCODE-FIPSv2
macOS-C++
Intel user_settings.h
M1 user_settings.h
include.am user_settings.h
XCODE-FIPSv5 README include.am user_settings.h
XCODE-FIPSv6 README include.am user_settings.h
XilinxSDK
2018_2 lscript.ld
2019_2
wolfCrypt_example
src lscript.ld
wolfCrypt_example_system wolfCrypt_example_system.sprj
2022_1
wolfCrypt_FreeRTOS_example wolfCrypt_FreeRTOS_example.prj
wolfCrypt_FreeRTOS_example_system wolfCrypt_FreeRTOS_example_system.sprj
wolfCrypt_example wolfCrypt_example.prj
wolfCrypt_example_system wolfCrypt_example_system.sprj
.gitignore
README.md bench.sh combine.sh eclipse_formatter_profile.xml graph.sh include.am user_settings.h wolfssl_example.c
apple-universal
wolfssl-multiplatform
wolfssl-multiplatform
Assets.xcassets
AccentColor.colorset Contents.json
AppIcon.appiconset Contents.json
Contents.json
ContentView.swift simple_client_example.c simple_client_example.h wolfssl-multiplatform-Bridging-Header.h wolfssl_multiplatform.entitlements wolfssl_multiplatformApp.swift wolfssl_test_driver.c wolfssl_test_driver.h
wolfssl-multiplatform.xcodeproj project.pbxproj
.gitignore README.md build-wolfssl-framework.sh include.am
iotsafe Makefile README.md ca-cert.c devices.c devices.h include.am main.c memory-tls.c startup.c target.ld user_settings.h
iotsafe-raspberrypi Makefile README.md client-tls13.c include.am main.c
mynewt README.md apps.wolfcrypttest.pkg.yml crypto.wolfssl.pkg.yml crypto.wolfssl.syscfg.yml include.am setup.sh
zephyr README.md include.am
include.am
RTOS
nuttx
wolfssl .gitignore Kconfig Make.defs Makefile README.md setup-wolfssl.sh user_settings.h
include.am
bsdkm Makefile README.md bsdkm_wc_port.h include.am wolfkmod.c wolfkmod_aes.c x86_vecreg.c
certs
1024 ca-cert.der ca-cert.pem ca-key.der ca-key.pem client-cert.der client-cert.pem client-key.der client-key.pem client-keyPub.der dh1024.der dh1024.pem dsa-pub-1024.pem dsa1024.der dsa1024.pem include.am rsa1024.der server-cert.der server-cert.pem server-key.der server-key.pem
3072 client-cert.der client-cert.pem client-key.der client-key.pem client-keyPub.der include.am
4096 client-cert.der client-cert.pem client-key.der client-key.pem client-keyPub.der include.am
acert
rsa_pss acert.pem acert_ietf.pem acert_ietf_pubkey.pem acert_pubkey.pem
acert.pem acert_ietf.pem acert_ietf_pubkey.pem acert_pubkey.pem include.am
aia ca-issuers-cert.pem multi-aia-cert.pem overflow-aia-cert.pem
crl
extra-crls ca-int-cert-revoked.pem claim-root.pem crl_critical_entry.pem crlnum_57oct.pem crlnum_64oct.pem general-server-crl.pem large_crlnum.pem large_crlnum2.pem
hash_der 0fdb2da4.r0
hash_pem 0fdb2da4.r0
bad_time_fmt.pem ca-int-ecc.pem ca-int.pem ca-int2-ecc.pem ca-int2.pem caEcc384Crl.pem caEccCrl.der caEccCrl.pem cliCrl.pem client-int-ecc.pem client-int.pem crl.der crl.pem crl.revoked crl2.der crl2.pem crl_reason.pem crl_rsapss.pem eccCliCRL.pem eccSrvCRL.pem gencrls.sh include.am server-goodaltCrl.pem server-goodaltwildCrl.pem server-goodcnCrl.pem server-goodcnwildCrl.pem server-int-ecc.pem server-int.pem wolfssl.cnf
dilithium bench_dilithium_level2_key.der bench_dilithium_level3_key.der bench_dilithium_level5_key.der include.am
ecc bp256r1-key.der bp256r1-key.pem ca-secp256k1-cert.pem ca-secp256k1-key.pem client-bp256r1-cert.der client-bp256r1-cert.pem client-secp256k1-cert.der client-secp256k1-cert.pem genecc.sh include.am secp256k1-key.der secp256k1-key.pem secp256k1-param.pem secp256k1-privkey.der secp256k1-privkey.pem server-bp256r1-cert.der server-bp256r1-cert.pem server-secp256k1-cert.der server-secp256k1-cert.pem server2-secp256k1-cert.der server2-secp256k1-cert.pem wolfssl.cnf wolfssl_384.cnf
ed25519 ca-ed25519-key.der ca-ed25519-key.pem ca-ed25519-priv.der ca-ed25519-priv.pem ca-ed25519.der ca-ed25519.pem client-ed25519-key.der client-ed25519-key.pem client-ed25519-priv.der client-ed25519-priv.pem client-ed25519.der client-ed25519.pem eddsa-ed25519.der eddsa-ed25519.pem gen-ed25519-certs.sh gen-ed25519-keys.sh gen-ed25519.sh include.am root-ed25519-key.der root-ed25519-key.pem root-ed25519-priv.der root-ed25519-priv.pem root-ed25519.der root-ed25519.pem server-ed25519-cert.pem server-ed25519-key.der server-ed25519-key.pem server-ed25519-priv.der server-ed25519-priv.pem server-ed25519.der server-ed25519.pem
ed448 ca-ed448-key.der ca-ed448-key.pem ca-ed448-priv.der ca-ed448-priv.pem ca-ed448.der ca-ed448.pem client-ed448-key.der client-ed448-key.pem client-ed448-priv.der client-ed448-priv.pem client-ed448.der client-ed448.pem gen-ed448-certs.sh gen-ed448-keys.sh include.am root-ed448-key.der root-ed448-key.pem root-ed448-priv.der root-ed448-priv.pem root-ed448.der root-ed448.pem server-ed448-cert.pem server-ed448-key.der server-ed448-key.pem server-ed448-priv.der server-ed448-priv.pem server-ed448.der server-ed448.pem
external DigiCertGlobalRootCA.pem README.txt ca-digicert-ev.pem ca-globalsign-root.pem ca-google-root.pem ca_collection.pem include.am
falcon bench_falcon_level1_key.der bench_falcon_level5_key.der include.am
intermediate
ca_false_intermediate gentestcert.sh int_ca.key server.key test_ca.key test_ca.pem test_int_not_cacert.pem test_sign_bynoca_srv.pem wolfssl_base.conf wolfssl_srv.conf
ca-ecc-bad-aki.der ca-ecc-bad-aki.pem ca-int-cert.der ca-int-cert.pem ca-int-ecc-cert.der ca-int-ecc-cert.pem ca-int-ecc-key.der ca-int-ecc-key.pem ca-int-key.der ca-int-key.pem ca-int2-cert.der ca-int2-cert.pem ca-int2-ecc-cert.der ca-int2-ecc-cert.pem ca-int2-ecc-key.der ca-int2-ecc-key.pem ca-int2-key.der ca-int2-key.pem client-chain-alt-ecc.pem client-chain-alt.pem client-chain-ecc.der client-chain-ecc.pem client-chain.der client-chain.pem client-int-cert.der client-int-cert.pem client-int-ecc-cert.der client-int-ecc-cert.pem genintcerts.sh include.am server-chain-alt-ecc.pem server-chain-alt.pem server-chain-ecc.der server-chain-ecc.pem server-chain-short.pem server-chain.der server-chain.pem server-int-cert.der server-int-cert.pem server-int-ecc-cert.der server-int-ecc-cert.pem
lms bc_hss_L2_H5_W8_root.der bc_hss_L3_H5_W4_root.der bc_lms_chain_ca.der bc_lms_chain_leaf.der bc_lms_native_bc_root.der bc_lms_sha256_h10_w8_root.der bc_lms_sha256_h5_w4_root.der include.am
mldsa README.txt include.am mldsa44-cert.der mldsa44-cert.pem mldsa44-key.pem mldsa44_bare-priv.der mldsa44_bare-seed.der mldsa44_oqskeypair.der mldsa44_priv-only.der mldsa44_pub-spki.der mldsa44_seed-only.der mldsa44_seed-priv.der mldsa65-cert.der mldsa65-cert.pem mldsa65-key.pem mldsa65_bare-priv.der mldsa65_bare-seed.der mldsa65_oqskeypair.der mldsa65_priv-only.der mldsa65_pub-spki.der mldsa65_seed-only.der mldsa65_seed-priv.der mldsa87-cert.der mldsa87-cert.pem mldsa87-key.pem mldsa87_bare-priv.der mldsa87_bare-seed.der mldsa87_oqskeypair.der mldsa87_priv-only.der mldsa87_pub-spki.der mldsa87_seed-only.der mldsa87_seed-priv.der
ocsp imposter-root-ca-cert.der imposter-root-ca-cert.pem imposter-root-ca-key.der imposter-root-ca-key.pem include.am index-ca-and-intermediate-cas.txt index-ca-and-intermediate-cas.txt.attr index-intermediate1-ca-issued-certs.txt index-intermediate1-ca-issued-certs.txt.attr index-intermediate2-ca-issued-certs.txt index-intermediate2-ca-issued-certs.txt.attr index-intermediate3-ca-issued-certs.txt index-intermediate3-ca-issued-certs.txt.attr intermediate1-ca-cert.der intermediate1-ca-cert.pem intermediate1-ca-key.der intermediate1-ca-key.pem intermediate2-ca-cert.der intermediate2-ca-cert.pem intermediate2-ca-key.der intermediate2-ca-key.pem intermediate3-ca-cert.der intermediate3-ca-cert.pem intermediate3-ca-key.der intermediate3-ca-key.pem ocsp-responder-cert.der ocsp-responder-cert.pem ocsp-responder-key.der ocsp-responder-key.pem openssl.cnf renewcerts-for-test.sh renewcerts.sh root-ca-cert.der root-ca-cert.pem root-ca-crl.pem root-ca-key.der root-ca-key.pem server1-cert.der server1-cert.pem server1-chain-noroot.pem server1-key.der server1-key.pem server2-cert.der server2-cert.pem server2-key.der server2-key.pem server3-cert.der server3-cert.pem server3-key.der server3-key.pem server4-cert.der server4-cert.pem server4-key.der server4-key.pem server5-cert.der server5-cert.pem server5-key.der server5-key.pem test-leaf-response.der test-multi-response.der test-response-nointern.der test-response-rsapss.der test-response.der
p521 ca-p521-key.der ca-p521-key.pem ca-p521-priv.der ca-p521-priv.pem ca-p521.der ca-p521.pem client-p521-key.der client-p521-key.pem client-p521-priv.der client-p521-priv.pem client-p521.der client-p521.pem gen-p521-certs.sh gen-p521-keys.sh include.am root-p521-key.der root-p521-key.pem root-p521-priv.der root-p521-priv.pem root-p521.der root-p521.pem server-p521-cert.pem server-p521-key.der server-p521-key.pem server-p521-priv.der server-p521-priv.pem server-p521.der server-p521.pem
renewcerts wolfssl.cnf
rpk client-cert-rpk.der client-ecc-cert-rpk.der include.am server-cert-rpk.der server-ecc-cert-rpk.der
rsapss ca-3072-rsapss-key.der ca-3072-rsapss-key.pem ca-3072-rsapss-priv.der ca-3072-rsapss-priv.pem ca-3072-rsapss.der ca-3072-rsapss.pem ca-rsapss-key.der ca-rsapss-key.pem ca-rsapss-priv.der ca-rsapss-priv.pem ca-rsapss.der ca-rsapss.pem client-3072-rsapss-key.der client-3072-rsapss-key.pem client-3072-rsapss-priv.der client-3072-rsapss-priv.pem client-3072-rsapss.der client-3072-rsapss.pem client-rsapss-key.der client-rsapss-key.pem client-rsapss-priv.der client-rsapss-priv.pem client-rsapss.der client-rsapss.pem gen-rsapss-keys.sh include.am renew-rsapss-certs.sh root-3072-rsapss-key.der root-3072-rsapss-key.pem root-3072-rsapss-priv.der root-3072-rsapss-priv.pem root-3072-rsapss.der root-3072-rsapss.pem root-rsapss-key.der root-rsapss-key.pem root-rsapss-priv.der root-rsapss-priv.pem root-rsapss.der root-rsapss.pem server-3072-rsapss-cert.pem server-3072-rsapss-key.der server-3072-rsapss-key.pem server-3072-rsapss-priv.der server-3072-rsapss-priv.pem server-3072-rsapss.der server-3072-rsapss.pem server-mix-rsapss-cert.pem server-rsapss-cert.pem server-rsapss-key.der server-rsapss-key.pem server-rsapss-priv.der server-rsapss-priv.pem server-rsapss.der server-rsapss.pem
sia timestamping-sia-cert.pem
slhdsa bench_slhdsa_sha2_128f_key.der bench_slhdsa_sha2_128s_key.der bench_slhdsa_sha2_192f_key.der bench_slhdsa_sha2_192s_key.der bench_slhdsa_sha2_256f_key.der bench_slhdsa_sha2_256s_key.der bench_slhdsa_shake128f_key.der bench_slhdsa_shake128s_key.der bench_slhdsa_shake192f_key.der bench_slhdsa_shake192s_key.der bench_slhdsa_shake256f_key.der bench_slhdsa_shake256s_key.der client-mldsa44-priv.pem client-mldsa44-sha2.der client-mldsa44-sha2.pem client-mldsa44-shake.der client-mldsa44-shake.pem gen-slhdsa-mldsa-certs.sh include.am root-slhdsa-sha2-128s-priv.der root-slhdsa-sha2-128s-priv.pem root-slhdsa-sha2-128s.der root-slhdsa-sha2-128s.pem root-slhdsa-shake-128s-priv.der root-slhdsa-shake-128s-priv.pem root-slhdsa-shake-128s.der root-slhdsa-shake-128s.pem server-mldsa44-priv.pem server-mldsa44-sha2.der server-mldsa44-sha2.pem server-mldsa44-shake.der server-mldsa44-shake.pem
sm2 ca-sm2-key.der ca-sm2-key.pem ca-sm2-priv.der ca-sm2-priv.pem ca-sm2.der ca-sm2.pem client-sm2-key.der client-sm2-key.pem client-sm2-priv.der client-sm2-priv.pem client-sm2.der client-sm2.pem fix_sm2_spki.py gen-sm2-certs.sh gen-sm2-keys.sh include.am root-sm2-key.der root-sm2-key.pem root-sm2-priv.der root-sm2-priv.pem root-sm2.der root-sm2.pem self-sm2-cert.pem self-sm2-key.pem self-sm2-priv.pem server-sm2-cert.der server-sm2-cert.pem server-sm2-key.der server-sm2-key.pem server-sm2-priv.der server-sm2-priv.pem server-sm2.der server-sm2.pem
statickeys dh-ffdhe2048-params.pem dh-ffdhe2048-pub.der dh-ffdhe2048-pub.pem dh-ffdhe2048.der dh-ffdhe2048.pem ecc-secp256r1.der ecc-secp256r1.pem gen-static.sh include.am x25519-pub.der x25519-pub.pem x25519.der x25519.pem
test
expired expired-ca.der expired-ca.pem expired-cert.der expired-cert.pem
catalog.txt cert-bad-neg-int.der cert-bad-oid.der cert-bad-utf8.der cert-ext-ia.cfg cert-ext-ia.der cert-ext-ia.pem cert-ext-joi.cfg cert-ext-joi.der cert-ext-joi.pem cert-ext-mnc.der cert-ext-multiple.cfg cert-ext-multiple.der cert-ext-multiple.pem cert-ext-nc-combined.der cert-ext-nc-combined.pem cert-ext-nc.cfg cert-ext-nc.der cert-ext-nc.pem cert-ext-ncdns.der cert-ext-ncdns.pem cert-ext-ncip.der cert-ext-ncip.pem cert-ext-ncmixed.der cert-ext-ncmulti.der cert-ext-ncmulti.pem cert-ext-ncrid.der cert-ext-ncrid.pem cert-ext-nct.cfg cert-ext-nct.der cert-ext-nct.pem cert-ext-ndir-exc.cfg cert-ext-ndir-exc.der cert-ext-ndir-exc.pem cert-ext-ndir.cfg cert-ext-ndir.der cert-ext-ndir.pem cert-ext-ns.der cert-over-max-altnames.cfg cert-over-max-altnames.der cert-over-max-altnames.pem cert-over-max-nc.cfg cert-over-max-nc.der cert-over-max-nc.pem client-ecc-cert-ski.hex cn-ip-literal.der cn-ip-wildcard.der crit-cert.pem crit-key.pem dh1024.der dh1024.pem dh512.der dh512.pem digsigku.pem encrypteddata.msg gen-badsig.sh gen-ext-certs.sh gen-testcerts.sh include.am kari-keyid-cms.msg ktri-keyid-cms.msg ossl-trusted-cert.pem server-badaltname.der server-badaltname.pem server-badaltnull.der server-badaltnull.pem server-badcn.der server-badcn.pem server-badcnnull.der server-badcnnull.pem server-cert-ecc-badsig.der server-cert-ecc-badsig.pem server-cert-rsa-badsig.der server-cert-rsa-badsig.pem server-duplicate-policy.pem server-garbage.der server-garbage.pem server-goodalt.der server-goodalt.pem server-goodaltwild.der server-goodaltwild.pem server-goodcn.der server-goodcn.pem server-goodcnwild.der server-goodcnwild.pem server-localhost.der server-localhost.pem smime-test-canon.p7s smime-test-multipart-badsig.p7s smime-test-multipart.p7s smime-test.p7s
test-pathlen assemble-chains.sh chainA-ICA1-key.pem chainA-ICA1-pathlen0.pem chainA-assembled.pem chainA-entity-key.pem chainA-entity.pem chainB-ICA1-key.pem chainB-ICA1-pathlen0.pem chainB-ICA2-key.pem chainB-ICA2-pathlen1.pem chainB-assembled.pem chainB-entity-key.pem chainB-entity.pem chainC-ICA1-key.pem chainC-ICA1-pathlen1.pem chainC-assembled.pem chainC-entity-key.pem chainC-entity.pem chainD-ICA1-key.pem chainD-ICA1-pathlen127.pem chainD-assembled.pem chainD-entity-key.pem chainD-entity.pem chainE-ICA1-key.pem chainE-ICA1-pathlen128.pem chainE-assembled.pem chainE-entity-key.pem chainE-entity.pem chainF-ICA1-key.pem chainF-ICA1-pathlen1.pem chainF-ICA2-key.pem chainF-ICA2-pathlen0.pem chainF-assembled.pem chainF-entity-key.pem chainF-entity.pem chainG-ICA1-key.pem chainG-ICA1-pathlen0.pem chainG-ICA2-key.pem chainG-ICA2-pathlen1.pem chainG-ICA3-key.pem chainG-ICA3-pathlen99.pem chainG-ICA4-key.pem chainG-ICA4-pathlen5.pem chainG-ICA5-key.pem chainG-ICA5-pathlen20.pem chainG-ICA6-key.pem chainG-ICA6-pathlen10.pem chainG-ICA7-key.pem chainG-ICA7-pathlen100.pem chainG-assembled.pem chainG-entity-key.pem chainG-entity.pem chainH-ICA1-key.pem chainH-ICA1-pathlen0.pem chainH-ICA2-key.pem chainH-ICA2-pathlen2.pem chainH-ICA3-key.pem chainH-ICA3-pathlen2.pem chainH-ICA4-key.pem chainH-ICA4-pathlen2.pem chainH-assembled.pem chainH-entity-key.pem chainH-entity.pem chainI-ICA1-key.pem chainI-ICA1-no_pathlen.pem chainI-ICA2-key.pem chainI-ICA2-no_pathlen.pem chainI-ICA3-key.pem chainI-ICA3-pathlen2.pem chainI-assembled.pem chainI-entity-key.pem chainI-entity.pem chainJ-ICA1-key.pem chainJ-ICA1-no_pathlen.pem chainJ-ICA2-key.pem chainJ-ICA2-no_pathlen.pem chainJ-ICA3-key.pem chainJ-ICA3-no_pathlen.pem chainJ-ICA4-key.pem chainJ-ICA4-pathlen2.pem chainJ-assembled.pem chainJ-entity-key.pem chainJ-entity.pem include.am refreshkeys.sh
test-serial0 ee_normal.pem ee_serial0.pem generate_certs.sh include.am intermediate_serial0.pem root_serial0.pem root_serial0_key.pem selfsigned_nonca_serial0.pem
xmss bc_xmss_chain_ca.der bc_xmss_chain_leaf.der bc_xmss_sha2_10_256_root.der bc_xmss_sha2_16_256_root.der bc_xmssmt_sha2_20_2_256_root.der bc_xmssmt_sha2_20_4_256_root.der bc_xmssmt_sha2_40_8_256_root.der include.am
ca-cert-chain.der ca-cert.der ca-cert.pem ca-ecc-cert.der ca-ecc-cert.pem ca-ecc-key.der ca-ecc-key.pem ca-ecc384-cert.der ca-ecc384-cert.pem ca-ecc384-key.der ca-ecc384-key.pem ca-key-pkcs8-attribute.der ca-key.der ca-key.pem check_dates.sh client-absolute-urn.pem client-ca-cert.der client-ca-cert.pem client-ca.pem client-cert-ext.der client-cert-ext.pem client-cert.der client-cert.pem client-crl-dist.der client-crl-dist.pem client-ecc-ca-cert.der client-ecc-ca-cert.pem client-ecc-cert.der client-ecc-cert.pem client-ecc384-cert.der client-ecc384-cert.pem client-ecc384-key.der client-ecc384-key.pem client-key.der client-key.pem client-keyEnc.pem client-keyPub.der client-keyPub.pem client-relative-uri.pem client-uri-cert.pem csr.attr.der csr.dsa.der csr.dsa.pem csr.ext.der csr.signed.der dh-priv-2048.der dh-priv-2048.pem dh-pub-2048.der dh-pub-2048.pem dh-pubkey-2048.der dh2048.der dh2048.pem dh3072.der dh3072.pem dh4096.der dh4096.pem dsa-pubkey-2048.der dsa2048.der dsa2048.pem dsa3072.der dsaparams.der dsaparams.pem ecc-client-key.der ecc-client-key.pem ecc-client-keyPub.der ecc-client-keyPub.pem ecc-key-comp.pem ecc-keyPkcs8.der ecc-keyPkcs8.pem ecc-keyPkcs8Enc.der ecc-keyPkcs8Enc.pem ecc-keyPub.der ecc-keyPub.pem ecc-params.der ecc-params.pem ecc-privOnlyCert.pem ecc-privOnlyKey.pem ecc-privkey.der ecc-privkey.pem ecc-privkeyPkcs8.der ecc-privkeyPkcs8.pem ecc-rsa-server.p12 empty-issuer-cert.pem entity-no-ca-bool-cert.pem entity-no-ca-bool-key.pem fpki-cert.der fpki-certpol-cert.der gen_revoked.sh include.am renewcerts.sh rid-cert.der rsa-pub-2048.pem rsa2048.der rsa3072.der server-cert-chain.der server-cert.der server-cert.pem server-ecc-comp.der server-ecc-comp.pem server-ecc-rsa.der server-ecc-rsa.pem server-ecc-self.der server-ecc-self.pem server-ecc.der server-ecc.pem server-ecc384-cert.der server-ecc384-cert.pem server-ecc384-key.der server-ecc384-key.pem server-key.der server-key.pem server-keyEnc.pem server-keyPkcs8.der server-keyPkcs8.pem server-keyPkcs8Enc.der server-keyPkcs8Enc.pem server-keyPkcs8Enc12.pem server-keyPkcs8Enc2.pem server-keyPub.der server-keyPub.pem server-revoked-cert.pem server-revoked-key.pem taoCert.txt test-ber-exp02-05-2022.p7b test-degenerate.p7b test-multiple-recipients.p7b test-servercert-rc2.p12 test-servercert.p12 test-stream-dec.p7b test-stream-sign.p7b wolfssl-website-ca.pem x942dh2048.der x942dh2048.pem
cmake
consumer CMakeLists.txt README.md main.c
modules FindARIA.cmake FindOQS.cmake
Config.cmake.in README.md config.in functions.cmake include.am options.h.in wolfssl-config-version.cmake.in wolfssl-targets.cmake.in
debian
source format
changelog.in control.in copyright include.am libwolfssl-dev.install libwolfssl.install rules.in
doc
dox_comments
header_files aes.h arc4.h ascon.h asn.h asn_public.h blake2.h bn.h camellia.h chacha.h chacha20_poly1305.h cmac.h coding.h compress.h cryptocb.h curve25519.h curve448.h des3.h dh.h doxygen_groups.h doxygen_pages.h dsa.h ecc.h eccsi.h ed25519.h ed448.h error-crypt.h evp.h hash.h hmac.h iotsafe.h kdf.h logging.h md2.h md4.h md5.h memory.h ocsp.h pem.h pkcs11.h pkcs7.h poly1305.h psa.h puf.h pwdbased.h quic.h random.h ripemd.h rsa.h sakke.h sha.h sha256.h sha3.h sha512.h signature.h siphash.h srp.h ssl.h tfm.h types.h wc_encrypt.h wc_port.h wc_she.h wc_slhdsa.h wolfio.h
header_files-ja aes.h arc4.h ascon.h asn.h asn_public.h blake2.h bn.h camellia.h chacha.h chacha20_poly1305.h cmac.h coding.h compress.h cryptocb.h curve25519.h curve448.h des3.h dh.h doxygen_groups.h doxygen_pages.h dsa.h ecc.h eccsi.h ed25519.h ed448.h error-crypt.h evp.h hash.h hmac.h iotsafe.h kdf.h logging.h md2.h md4.h md5.h memory.h ocsp.h pem.h pkcs11.h pkcs7.h poly1305.h psa.h pwdbased.h quic.h random.h ripemd.h rsa.h sakke.h sha.h sha256.h sha3.h sha512.h signature.h siphash.h srp.h ssl.h tfm.h types.h wc_encrypt.h wc_port.h wolfio.h
formats
html
html_changes
search search.css search.js
customdoxygen.css doxygen.css menu.js menudata.js tabs.css
Doxyfile footer.html header.html mainpage.dox
pdf Doxyfile header.tex
images wolfssl_logo.png
QUIC.md README.txt README_DOXYGEN check_api.sh generate_documentation.sh include.am
examples
asn1 asn1.c dumpasn1.cfg gen_oid_names.rb include.am oid_names.h
async Makefile README.md async_client.c async_server.c async_tls.c async_tls.h include.am user_settings.h
benchmark include.am tls_bench.c tls_bench.h
client client.c client.h client.sln client.vcproj client.vcxproj include.am
configs README.md include.am user_settings_EBSnet.h user_settings_all.h user_settings_arduino.h user_settings_baremetal.h user_settings_ca.h user_settings_curve25519nonblock.h user_settings_dtls13.h user_settings_eccnonblock.h user_settings_espressif.h user_settings_fipsv2.h user_settings_fipsv5.h user_settings_min_ecc.h user_settings_openssl_compat.h user_settings_pkcs7.h user_settings_platformio.h user_settings_pq.h user_settings_rsa_only.h user_settings_stm32.h user_settings_template.h user_settings_tls12.h user_settings_tls13.h user_settings_wolfboot_keytools.h user_settings_wolfssh.h user_settings_wolftpm.h
crypto_policies
default wolfssl.txt
future wolfssl.txt
legacy wolfssl.txt
echoclient echoclient.c echoclient.h echoclient.sln echoclient.vcproj echoclient.vcxproj include.am quit
echoserver echoserver.c echoserver.h echoserver.sln echoserver.vcproj echoserver.vcxproj include.am
ocsp_responder include.am ocsp_responder.c ocsp_responder.h
pem include.am pem.c
sctp include.am sctp-client-dtls.c sctp-client.c sctp-server-dtls.c sctp-server.c
server include.am server.c server.h server.sln server.vcproj server.vcxproj
README.md include.am
linuxkm
patches
5.10.17 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v10v17.patch
5.10.236 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v10v236.patch
5.14.0-570.58.1.el9_6 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v14-570v58v1-el9_6.patch
5.15 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v15.patch
5.17 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v17.patch
5.17-ubuntu-jammy-tegra WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v17-ubuntu-jammy-tegra.patch
6.1.73 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-6v1v73.patch
6.12 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-6v12.patch
6.15 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-6v15.patch
7.0 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-7v0.patch
regen-patches.sh
Kbuild Makefile README.md get_thread_size.c include.am linuxkm-fips-hash-wrapper.sh linuxkm-fips-hash.c linuxkm_memory.c linuxkm_memory.h linuxkm_wc_port.h lkcapi_aes_glue.c lkcapi_dh_glue.c lkcapi_ecdh_glue.c lkcapi_ecdsa_glue.c lkcapi_glue.c lkcapi_rsa_glue.c lkcapi_sha_glue.c module_exports.c.template module_hooks.c pie_redirect_table.c wolfcrypt.lds x86_vector_register_glue.c
m4 ax_add_am_macro.m4 ax_am_jobserver.m4 ax_am_macros.m4 ax_append_compile_flags.m4 ax_append_flag.m4 ax_append_link_flags.m4 ax_append_to_file.m4 ax_atomic.m4 ax_bsdkm.m4 ax_check_compile_flag.m4 ax_check_link_flag.m4 ax_compiler_version.m4 ax_count_cpus.m4 ax_create_generic_config.m4 ax_debug.m4 ax_file_escapes.m4 ax_harden_compiler_flags.m4 ax_linuxkm.m4 ax_print_to_file.m4 ax_pthread.m4 ax_require_defined.m4 ax_tls.m4 ax_vcs_checkout.m4 hexversion.m4 lib_socket_nsl.m4 visibility.m4
mcapi
wolfcrypt_mcapi.X
nbproject configurations.xml include.am project.xml
Makefile
wolfcrypt_test.X
nbproject configurations.xml include.am project.xml
Makefile
wolfssl.X
nbproject configurations.xml include.am project.xml
Makefile
zlib.X
nbproject configurations.xml include.am project.xml
Makefile
PIC32MZ-serial.h README crypto.c crypto.h include.am mcapi_test.c user_settings.h
mplabx
wolfcrypt_benchmark.X
nbproject configurations.xml include.am project.xml
Makefile
wolfcrypt_test.X
nbproject configurations.xml include.am project.xml
Makefile
wolfssl.X
nbproject configurations.xml include.am project.xml
Makefile
PIC32MZ-serial.h README benchmark_main.c include.am test_main.c user_settings.h
mqx
util_lib
Sources include.am util.c util.h
wolfcrypt_benchmark
Debugger K70FN1M0.mem init_kinetis.tcl mass_erase_kinetis.tcl
Sources include.am main.c main.h
ReferencedRSESystems.xml wolfcrypt_benchmark_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launch
wolfcrypt_test
Debugger K70FN1M0.mem init_kinetis.tcl mass_erase_kinetis.tcl
Sources include.am main.c main.h
ReferencedRSESystems.xml wolfcrypt_test_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launch
wolfssl include.am
wolfssl_client
Debugger K70FN1M0.mem init_kinetis.tcl mass_erase_kinetis.tcl
Sources include.am main.c main.h
ReferencedRSESystems.xml wolfssl_client_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launch
README
rpm include.am spec.in
scripts
bench bench_functions.sh
aria-cmake-build-test.sh asn1_oid_sum.pl benchmark.test benchmark_compare.sh cleanup_testfiles.sh crl-gen-openssl.test crl-revoked.test dertoc.pl dtls.test dtlscid.test external.test google.test include.am makedistsmall.sh memtest.sh ocsp-responder-openssl-interop.test ocsp-stapling-with-ca-as-responder.test ocsp-stapling-with-wolfssl-responder.test ocsp-stapling.test ocsp-stapling2.test ocsp-stapling_tls13multi.test ocsp.test openssl.test openssl_srtp.test pem.test ping.test pkcallbacks.test psk.test resume.test rsapss.test sniffer-gen.sh sniffer-ipv6.pcap sniffer-static-rsa.pcap sniffer-testsuite.test sniffer-tls12-keylog.out sniffer-tls12-keylog.pcap sniffer-tls12-keylog.sslkeylog sniffer-tls13-dh-resume.pcap sniffer-tls13-dh.pcap sniffer-tls13-ecc-resume.pcap sniffer-tls13-ecc.pcap sniffer-tls13-hrr.pcap sniffer-tls13-keylog.out sniffer-tls13-keylog.pcap sniffer-tls13-keylog.sslkeylog sniffer-tls13-x25519-resume.pcap sniffer-tls13-x25519.pcap stm32l4-v4_0_1_build.sh tls13.test trusted_peer.test unit.test.in user_settings_asm.sh
src bio.c conf.c crl.c dtls.c dtls13.c include.am internal.c keys.c ocsp.c pk.c pk_ec.c pk_rsa.c quic.c sniffer.c ssl.c ssl_api_cert.c ssl_api_crl_ocsp.c ssl_api_pk.c ssl_asn1.c ssl_bn.c ssl_certman.c ssl_crypto.c ssl_ech.c ssl_load.c ssl_misc.c ssl_p7p12.c ssl_sess.c ssl_sk.c tls.c tls13.c wolfio.c x509.c x509_str.c
sslSniffer
sslSnifferTest README_WIN.md include.am snifftest.c sslSniffTest.vcproj sslSniffTest.vcxproj
README.md sslSniffer.vcproj sslSniffer.vcxproj
support gen-debug-trace-error-codes.sh include.am wolfssl.pc.in
tests
api api.h api_decl.h create_ocsp_test_blobs.py include.am test_aes.c test_aes.h test_arc4.c test_arc4.h test_ascon.c test_ascon.h test_ascon_kats.h test_asn.c test_asn.h test_blake2.c test_blake2.h test_camellia.c test_camellia.h test_certman.c test_certman.h test_chacha.c test_chacha.h test_chacha20_poly1305.c test_chacha20_poly1305.h test_cmac.c test_cmac.h test_curve25519.c test_curve25519.h test_curve448.c test_curve448.h test_des3.c test_des3.h test_dh.c test_dh.h test_digest.h test_dsa.c test_dsa.h test_dtls.c test_dtls.h test_ecc.c test_ecc.h test_ed25519.c test_ed25519.h test_ed448.c test_ed448.h test_evp.c test_evp.h test_evp_cipher.c test_evp_cipher.h test_evp_digest.c test_evp_digest.h test_evp_pkey.c test_evp_pkey.h test_hash.c test_hash.h test_hmac.c test_hmac.h test_md2.c test_md2.h test_md4.c test_md4.h test_md5.c test_md5.h test_mldsa.c test_mldsa.h test_mlkem.c test_mlkem.h test_ocsp.c test_ocsp.h test_ocsp_test_blobs.h test_ossl_asn1.c test_ossl_asn1.h test_ossl_bio.c test_ossl_bio.h test_ossl_bn.c test_ossl_bn.h test_ossl_cipher.c test_ossl_cipher.h test_ossl_dgst.c test_ossl_dgst.h test_ossl_dh.c test_ossl_dh.h test_ossl_dsa.c test_ossl_dsa.h test_ossl_ec.c test_ossl_ec.h test_ossl_ecx.c test_ossl_ecx.h test_ossl_mac.c test_ossl_mac.h test_ossl_obj.c test_ossl_obj.h test_ossl_p7p12.c test_ossl_p7p12.h test_ossl_pem.c test_ossl_pem.h test_ossl_rand.c test_ossl_rand.h test_ossl_rsa.c test_ossl_rsa.h test_ossl_sk.c test_ossl_sk.h test_ossl_x509.c test_ossl_x509.h test_ossl_x509_acert.c test_ossl_x509_acert.h test_ossl_x509_crypto.c test_ossl_x509_crypto.h test_ossl_x509_ext.c test_ossl_x509_ext.h test_ossl_x509_info.c test_ossl_x509_info.h test_ossl_x509_io.c test_ossl_x509_io.h test_ossl_x509_lu.c test_ossl_x509_lu.h test_ossl_x509_name.c test_ossl_x509_name.h test_ossl_x509_pk.c test_ossl_x509_pk.h test_ossl_x509_str.c test_ossl_x509_str.h test_ossl_x509_vp.c test_ossl_x509_vp.h test_pkcs12.c test_pkcs12.h test_pkcs7.c test_pkcs7.h test_poly1305.c test_poly1305.h test_random.c test_random.h test_rc2.c test_rc2.h test_ripemd.c test_ripemd.h test_rsa.c test_rsa.h test_sha.c test_sha.h test_sha256.c test_sha256.h test_sha3.c test_sha3.h test_sha512.c test_sha512.h test_she.c test_she.h test_signature.c test_signature.h test_slhdsa.c test_slhdsa.h test_sm2.c test_sm2.h test_sm3.c test_sm3.h test_sm4.c test_sm4.h test_tls.c test_tls.h test_tls13.c test_tls13.h test_tls_ext.c test_tls_ext.h test_wc_encrypt.c test_wc_encrypt.h test_wolfmath.c test_wolfmath.h test_x509.c test_x509.h
emnet
IP IP.h
Makefile emnet_nonblock_test.c emnet_shim.c
freertos-mem-track-repro FreeRTOS.h repro.c run.sh semphr.h task.h user_settings.h
swdev .gitignore Makefile README.md swdev.c swdev.h swdev_loader.c swdev_loader.h user_settings.h
CONF_FILES_README.md NCONF_test.cnf README TXT_DB.txt api.c include.am quic.c srp.c suites.c test-altchains.conf test-chains.conf test-dhprime.conf test-dtls-downgrade.conf test-dtls-fails-cipher.conf test-dtls-fails.conf test-dtls-group.conf test-dtls-mtu.conf test-dtls-reneg-client.conf test-dtls-reneg-server.conf test-dtls-resume.conf test-dtls-sha2.conf test-dtls-srtp-fails.conf test-dtls-srtp.conf test-dtls.conf test-dtls13-cid.conf test-dtls13-downgrade-fails.conf test-dtls13-downgrade.conf test-dtls13-pq-hybrid-extra-frag.conf test-dtls13-pq-hybrid-extra.conf test-dtls13-pq-hybrid-frag.conf test-dtls13-pq-standalone-frag.conf test-dtls13-pq-standalone.conf test-dtls13-psk.conf test-dtls13.conf test-ecc-cust-curves.conf test-ed25519.conf test-ed448.conf test-enckeys.conf test-fails.conf test-maxfrag-dtls.conf test-maxfrag.conf test-p521.conf test-psk-no-id-sha2.conf test-psk-no-id.conf test-psk.conf test-rsapss.conf test-sctp-sha2.conf test-sctp.conf test-sha2.conf test-sig.conf test-sm2.conf test-tls-downgrade.conf test-tls13-down.conf test-tls13-ecc.conf test-tls13-pq-hybrid-extra.conf test-tls13-pq-hybrid.conf test-tls13-pq-standalone.conf test-tls13-psk-certs.conf test-tls13-psk.conf test-tls13-slhdsa-fail.conf test-tls13-slhdsa-sha2.conf test-tls13-slhdsa-shake.conf test-tls13.conf test-trustpeer.conf test.conf unit.c unit.h utils.c utils.h w64wrapper.c
testsuite include.am testsuite.c testsuite.sln testsuite.vcproj testsuite.vcxproj utils.c utils.h
tirtos
packages
ti
net
wolfssl
tests
EK_TM4C1294XL
wolfcrypt
benchmark TM4C1294NC.icf benchmark.cfg main.c package.bld.hide package.xdc
test TM4C1294NC.icf main.c package.bld.hide package.xdc test.cfg
package.bld package.xdc package.xs
.gitignore README include.am products.mak wolfssl.bld wolfssl.mak
wolfcrypt
benchmark README.md benchmark-VS2022.sln benchmark-VS2022.vcxproj benchmark-VS2022.vcxproj.user benchmark.c benchmark.h benchmark.sln benchmark.vcproj benchmark.vcxproj include.am
src
port
Espressif
esp_crt_bundle README.md cacrt_all.pem cacrt_deprecated.pem cacrt_local.pem esp_crt_bundle.c gen_crt_bundle.py pio_install_cryptography.py
README.md esp32_aes.c esp32_mp.c esp32_sha.c esp32_util.c esp_sdk_mem_lib.c esp_sdk_time_lib.c esp_sdk_wifi_lib.c
Renesas README.md renesas_common.c renesas_fspsm_aes.c renesas_fspsm_rsa.c renesas_fspsm_sha.c renesas_fspsm_util.c renesas_rx64_hw_sha.c renesas_rx64_hw_util.c renesas_tsip_aes.c renesas_tsip_rsa.c renesas_tsip_sha.c renesas_tsip_util.c
af_alg afalg_aes.c afalg_hash.c wc_afalg.c
aria aria-crypt.c aria-cryptocb.c
arm armv8-32-aes-asm.S armv8-32-aes-asm_c.c armv8-32-chacha-asm.S armv8-32-chacha-asm_c.c armv8-32-curve25519.S armv8-32-curve25519_c.c armv8-32-mlkem-asm.S armv8-32-mlkem-asm_c.c armv8-32-poly1305-asm.S armv8-32-poly1305-asm_c.c armv8-32-sha256-asm.S armv8-32-sha256-asm_c.c armv8-32-sha3-asm.S armv8-32-sha3-asm_c.c armv8-32-sha512-asm.S armv8-32-sha512-asm_c.c armv8-aes-asm.S armv8-aes-asm_c.c armv8-aes.c armv8-chacha-asm.S armv8-chacha-asm_c.c armv8-curve25519.S armv8-curve25519_c.c armv8-mlkem-asm.S armv8-mlkem-asm_c.c armv8-poly1305-asm.S armv8-poly1305-asm_c.c armv8-sha256-asm.S armv8-sha256-asm_c.c armv8-sha256.c armv8-sha3-asm.S armv8-sha3-asm_c.c armv8-sha512-asm.S armv8-sha512-asm_c.c armv8-sha512.c cryptoCell.c cryptoCellHash.c thumb2-aes-asm.S thumb2-aes-asm_c.c thumb2-chacha-asm.S thumb2-chacha-asm_c.c thumb2-curve25519.S thumb2-curve25519_c.c thumb2-mlkem-asm.S thumb2-mlkem-asm_c.c thumb2-poly1305-asm.S thumb2-poly1305-asm_c.c thumb2-sha256-asm.S thumb2-sha256-asm_c.c thumb2-sha3-asm.S thumb2-sha3-asm_c.c thumb2-sha512-asm.S thumb2-sha512-asm_c.c
atmel README.md atmel.c
autosar README.md cryif.c crypto.c csm.c include.am test.c
caam README.md caam_aes.c caam_doc.pdf caam_driver.c caam_error.c caam_integrity.c caam_qnx.c caam_sha.c wolfcaam_aes.c wolfcaam_cmac.c wolfcaam_ecdsa.c wolfcaam_fsl_nxp.c wolfcaam_hash.c wolfcaam_hmac.c wolfcaam_init.c wolfcaam_qnx.c wolfcaam_rsa.c wolfcaam_seco.c wolfcaam_x25519.c
cavium README.md README_Octeon.md cavium_nitrox.c cavium_octeon_sync.c
cuda README.md aes-cuda.cu
cypress README.md psoc6_crypto.c
devcrypto README.md devcrypto_aes.c devcrypto_ecdsa.c devcrypto_hash.c devcrypto_hmac.c devcrypto_rsa.c devcrypto_x25519.c wc_devcrypto.c
intel README.md quickassist.c quickassist_mem.c quickassist_sync.c
iotsafe iotsafe.c
kcapi README.md kcapi_aes.c kcapi_dh.c kcapi_ecc.c kcapi_hash.c kcapi_hmac.c kcapi_rsa.c
liboqs liboqs.c
maxim README.md max3266x.c maxq10xx.c
mynewt mynewt_port.c
nxp README.md README_SE050.md casper_port.c dcp_port.c hashcrypt_port.c ksdk_port.c se050_port.c
pic32 pic32mz-crypt.c
ppc32 ppc32-sha256-asm.S ppc32-sha256-asm_c.c ppc32-sha256-asm_cr.c
psa README.md psa.c psa_aes.c psa_hash.c psa_pkcbs.c
riscv riscv-64-aes.c riscv-64-chacha.c riscv-64-poly1305.c riscv-64-sha256.c riscv-64-sha3.c riscv-64-sha512.c
rpi_pico README.md pico.c
silabs README.md silabs_aes.c silabs_ecc.c silabs_hash.c silabs_random.c
st README.md STM32MP13.md STM32MP25.md stm32.c stsafe.c
ti ti-aes.c ti-ccm.c ti-des3.c ti-hash.c
tropicsquare README.md tropic01.c
xilinx xil-aesgcm.c xil-sha3.c xil-versal-glue.c xil-versal-trng.c
nrf51.c
ASN_TEMPLATE.md aes.c aes_asm.S aes_asm.asm aes_gcm_asm.S aes_gcm_asm.asm aes_gcm_x86_asm.S aes_xts_asm.S aes_xts_asm.asm arc4.c ascon.c asm.c asn.c asn_orig.c async.c blake2b.c blake2s.c camellia.c chacha.c chacha20_poly1305.c chacha_asm.S chacha_asm.asm cmac.c coding.c compress.c cpuid.c cryptocb.c curve25519.c curve448.c des3.c dh.c dilithium.c dsa.c ecc.c ecc_fp.c eccsi.c ed25519.c ed448.c error.c evp.c evp_pk.c falcon.c fe_448.c fe_low_mem.c fe_operations.c fe_x25519_128.h fe_x25519_asm.S fp_mont_small.i fp_mul_comba_12.i fp_mul_comba_17.i fp_mul_comba_20.i fp_mul_comba_24.i fp_mul_comba_28.i fp_mul_comba_3.i fp_mul_comba_32.i fp_mul_comba_4.i fp_mul_comba_48.i fp_mul_comba_6.i fp_mul_comba_64.i fp_mul_comba_7.i fp_mul_comba_8.i fp_mul_comba_9.i fp_mul_comba_small_set.i fp_sqr_comba_12.i fp_sqr_comba_17.i fp_sqr_comba_20.i fp_sqr_comba_24.i fp_sqr_comba_28.i fp_sqr_comba_3.i fp_sqr_comba_32.i fp_sqr_comba_4.i fp_sqr_comba_48.i fp_sqr_comba_6.i fp_sqr_comba_64.i fp_sqr_comba_7.i fp_sqr_comba_8.i fp_sqr_comba_9.i fp_sqr_comba_small_set.i ge_448.c ge_low_mem.c ge_operations.c hash.c hmac.c hpke.c include.am integer.c kdf.c logging.c md2.c md4.c md5.c memory.c misc.c pkcs12.c pkcs7.c poly1305.c poly1305_asm.S poly1305_asm.asm puf.c pwdbased.c random.c rc2.c ripemd.c rng_bank.c rsa.c sakke.c sha.c sha256.c sha256_asm.S sha3.c sha3_asm.S sha512.c sha512_asm.S signature.c siphash.c sm2.c sm3.c sm3_asm.S sm4.c sp_arm32.c sp_arm64.c sp_armthumb.c sp_c32.c sp_c64.c sp_cortexm.c sp_dsp32.c sp_int.c sp_sm2_arm32.c sp_sm2_arm64.c sp_sm2_armthumb.c sp_sm2_c32.c sp_sm2_c64.c sp_sm2_cortexm.c sp_sm2_x86_64.c sp_sm2_x86_64_asm.S sp_x86_64.c sp_x86_64_asm.S sp_x86_64_asm.asm srp.c tfm.c wc_dsp.c wc_encrypt.c wc_lms.c wc_lms_impl.c wc_mldsa_asm.S wc_mlkem.c wc_mlkem_asm.S wc_mlkem_poly.c wc_pkcs11.c wc_port.c wc_she.c wc_slhdsa.c wc_xmss.c wc_xmss_impl.c wolfentropy.c wolfevent.c wolfmath.c
test README.md include.am test-VS2022.sln test-VS2022.vcxproj test-VS2022.vcxproj.user test.c test.h test.sln test.vcproj test_paths.h.in
wolfssl
openssl aes.h asn1.h asn1t.h bio.h bn.h buffer.h camellia.h cmac.h cms.h compat_types.h conf.h crypto.h des.h dh.h dsa.h ec.h ec25519.h ec448.h ecdh.h ecdsa.h ed25519.h ed448.h engine.h err.h evp.h fips_rand.h hmac.h include.am kdf.h lhash.h md4.h md5.h modes.h obj_mac.h objects.h ocsp.h opensslconf.h opensslv.h ossl_typ.h pem.h pkcs12.h pkcs7.h rand.h rc4.h ripemd.h rsa.h safestack.h sha.h sha3.h srp.h ssl.h ssl23.h stack.h tls1.h txt_db.h ui.h x509.h x509_vfy.h x509v3.h
wolfcrypt
port
Espressif esp-sdk-lib.h esp32-crypt.h esp_crt_bundle.h
Renesas renesas-fspsm-crypt.h renesas-fspsm-types.h renesas-rx64-hw-crypt.h renesas-tsip-crypt.h renesas_cmn.h renesas_fspsm_internal.h renesas_sync.h renesas_tsip_internal.h renesas_tsip_types.h
af_alg afalg_hash.h wc_afalg.h
aria aria-crypt.h aria-cryptocb.h
arm cryptoCell.h
atmel atmel.h
autosar CryIf.h Crypto.h Csm.h StandardTypes.h
caam caam_driver.h caam_error.h caam_qnx.h wolfcaam.h wolfcaam_aes.h wolfcaam_cmac.h wolfcaam_ecdsa.h wolfcaam_fsl_nxp.h wolfcaam_hash.h wolfcaam_qnx.h wolfcaam_rsa.h wolfcaam_seco.h wolfcaam_sha.h wolfcaam_x25519.h
cavium cavium_nitrox.h cavium_octeon_sync.h
cypress psoc6_crypto.h
devcrypto wc_devcrypto.h
intel quickassist.h quickassist_mem.h quickassist_sync.h
iotsafe iotsafe.h
kcapi kcapi_dh.h kcapi_ecc.h kcapi_hash.h kcapi_hmac.h kcapi_rsa.h wc_kcapi.h
liboqs liboqs.h
maxim max3266x-cryptocb.h max3266x.h maxq10xx.h
nxp casper_port.h dcp_port.h hashcrypt_port.h ksdk_port.h se050_port.h
pic32 pic32mz-crypt.h
psa psa.h
riscv riscv-64-asm.h
rpi_pico pico.h
silabs silabs_aes.h silabs_ecc.h silabs_hash.h silabs_random.h
st stm32.h stsafe.h
ti ti-ccm.h ti-hash.h
tropicsquare tropic01.h
xilinx xil-sha3.h xil-versal-glue.h xil-versal-trng.h
nrf51.h
aes.h arc4.h ascon.h asn.h asn_public.h async.h blake2-impl.h blake2-int.h blake2.h camellia.h chacha.h chacha20_poly1305.h cmac.h coding.h compress.h cpuid.h cryptocb.h curve25519.h curve448.h des3.h dh.h dilithium.h dsa.h ecc.h eccsi.h ed25519.h ed448.h error-crypt.h falcon.h fe_448.h fe_operations.h fips_test.h ge_448.h ge_operations.h hash.h hmac.h hpke.h include.am integer.h kdf.h libwolfssl_sources.h libwolfssl_sources_asm.h logging.h md2.h md4.h md5.h mem_track.h memory.h misc.h mpi_class.h mpi_superclass.h oid_sum.h pkcs11.h pkcs12.h pkcs7.h poly1305.h puf.h pwdbased.h random.h rc2.h ripemd.h rng_bank.h rsa.h sakke.h selftest.h settings.h sha.h sha256.h sha3.h sha512.h signature.h siphash.h sm2.h sm3.h sm4.h sp.h sp_int.h srp.h tfm.h types.h visibility.h wc_encrypt.h wc_lms.h wc_mlkem.h wc_pkcs11.h wc_port.h wc_she.h wc_slhdsa.h wc_xmss.h wolfentropy.h wolfevent.h wolfmath.h
callbacks.h certs_test.h certs_test_sm.h crl.h error-ssl.h include.am internal.h ocsp.h options.h.in quic.h sniffer.h sniffer_error.h sniffer_error.rc ssl.h test.h version.h version.h.in wolfio.h
wrapper
Ada
examples
src aes_verify_main.adb rsa_verify_main.adb sha256_main.adb spark_sockets.adb spark_sockets.ads spark_terminal.adb spark_terminal.ads tls_client.adb tls_client.ads tls_client_main.adb tls_server.adb tls_server.ads tls_server_main.adb
.gitignore alire.toml examples.gpr
tests
src
support test_support.adb test_support.ads tests_root_suite.adb tests_root_suite.ads
aes_bindings_tests.adb aes_bindings_tests.ads rsa_verify_bindings_tests.adb rsa_verify_bindings_tests.ads sha256_bindings_tests.adb sha256_bindings_tests.ads tests.adb
.gitignore README.md alire.toml tests.gpr valgrind.supp
.gitignore README.md ada_binding.c alire.toml default.gpr include.am restricted.adc user_settings.h wolfssl-full_runtime.adb wolfssl-full_runtime.ads wolfssl.adb wolfssl.ads wolfssl.gpr
CSharp
wolfCrypt-Test
Properties AssemblyInfo.cs
App.config wolfCrypt-Test.cs wolfCrypt-Test.csproj
wolfSSL-DTLS-PSK-Server
Properties AssemblyInfo.cs
App.config wolfSSL-DTLS-PSK-Server.cs wolfSSL-DTLS-PSK-Server.csproj
wolfSSL-DTLS-Server
Properties AssemblyInfo.cs
App.config wolfSSL-DTLS-Server.cs wolfSSL-DTLS-Server.csproj
wolfSSL-Example-IOCallbacks
Properties AssemblyInfo.cs
App.config wolfSSL-Example-IOCallbacks.cs wolfSSL-Example-IOCallbacks.csproj
wolfSSL-TLS-Client
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-Client.cs wolfSSL-TLS-Client.csproj
wolfSSL-TLS-PSK-Client
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-PSK-Client.cs wolfSSL-TLS-PSK-Client.csproj
wolfSSL-TLS-PSK-Server
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-PSK-Server.cs wolfSSL-TLS-PSK-Server.csproj
wolfSSL-TLS-Server
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-Server.cs wolfSSL-TLS-Server.csproj
wolfSSL-TLS-ServerThreaded
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-ServerThreaded.cs wolfSSL-TLS-ServerThreaded.csproj
wolfSSL_CSharp
Properties AssemblyInfo.cs Resources.Designer.cs Resources.resx
X509.cs wolfCrypt.cs wolfSSL.cs wolfSSL_CSharp.csproj
README.md include.am user_settings.h wolfSSL_CSharp.sln wolfssl.vcxproj
python README.md
rust
wolfssl-wolfcrypt
src aes.rs blake2.rs chacha20_poly1305.rs cmac.rs cmac_mac.rs curve25519.rs dh.rs dilithium.rs ecc.rs ecdsa.rs ed25519.rs ed448.rs fips.rs hkdf.rs hmac.rs hmac_mac.rs kdf.rs lib.rs lms.rs mlkem.rs mlkem_kem.rs pbkdf2_password_hash.rs prf.rs random.rs rsa.rs rsa_pkcs1v15.rs sha.rs sha_digest.rs sys.rs
tests
common mod.rs
test_aes.rs test_blake2.rs test_chacha20_poly1305.rs test_cmac.rs test_cmac_mac.rs test_curve25519.rs test_dh.rs test_dilithium.rs test_ecc.rs test_ecdsa.rs test_ed25519.rs test_ed448.rs test_hkdf.rs test_hmac.rs test_hmac_mac.rs test_kdf.rs test_lms.rs test_mlkem.rs test_mlkem_kem.rs test_pbkdf2_password_hash.rs test_prf.rs test_random.rs test_rsa.rs test_rsa_pkcs1v15.rs test_sha.rs test_sha_digest.rs test_wolfcrypt.rs
CHANGELOG.md Cargo.lock Cargo.toml Makefile README.md build.rs headers.h
Makefile README.md include.am
include.am
zephyr
samples
wolfssl_benchmark
boards native_sim.conf nrf5340dk_nrf5340_cpuapp.conf nrf5340dk_nrf5340_cpuapp_ns.conf
CMakeLists.txt README install_test.sh prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl_test
boards native_sim.conf nrf5340dk_nrf5340_cpuapp.conf nrf5340dk_nrf5340_cpuapp_ns.conf
CMakeLists.txt README install_test.sh prj-no-malloc.conf prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl_tls_sock
boards native_sim.conf
src tls_sock.c
CMakeLists.txt README install_sample.sh prj-no-malloc.conf prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl_tls_thread
boards native_sim.conf nrf5340dk_nrf5340_cpuapp.conf nrf5340dk_nrf5340_cpuapp_ns.conf
src tls_threaded.c
CMakeLists.txt README install_sample.sh prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl options.h
CMakeLists.txt Kconfig Kconfig.tls-generic README.md include.am module.yml user_settings-no-malloc.h user_settings.h zephyr_init.c
.codespellexcludelines .cyignore .editorconfig .gitignore .wolfssl_known_macro_extras AUTHORS CMakeLists.txt CMakePresets.json CMakeSettings.json COPYING ChangeLog.md INSTALL LICENSING LPCExpresso.cproject LPCExpresso.project Makefile.am README README-async.md README.md SCRIPTS-LIST SECURITY-POLICY.md SECURITY-REPORT-TEMPLATE.md Vagrantfile autogen.sh commit-tests.sh configure.ac fips-check.sh fips-hash.sh gencertbuf.pl input pull_to_vagrant.sh quit resource.h stamp-h.in valgrind-bash.supp valgrind-error.sh wnr-example.conf wolfssl-VS2022.vcxproj wolfssl.rc wolfssl.vcproj wolfssl.vcxproj wolfssl64.sln
.clangd .gitignore DOCS.md Makefile README.md assert.c core.c crypto.c env.c fs.c http.c ini.c json.c log.c luna.h main.c makext.mk path.c process.c request.c sqlite.c stash.c template.c util.c
wolfssl/wolfcrypt/src/port/arm/armv8-32-aes-asm_c.c raw
    1/* armv8-32-aes-asm
    2 *
    3 * Copyright (C) 2006-2026 wolfSSL Inc.
    4 *
    5 * This file is part of wolfSSL.
    6 *
    7 * wolfSSL is free software; you can redistribute it and/or modify
    8 * it under the terms of the GNU General Public License as published by
    9 * the Free Software Foundation; either version 3 of the License, or
   10 * (at your option) any later version.
   11 *
   12 * wolfSSL is distributed in the hope that it will be useful,
   13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
   14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   15 * GNU General Public License for more details.
   16 *
   17 * You should have received a copy of the GNU General Public License
   18 * along with this program; if not, write to the Free Software
   19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
   20 */
   21
   22/* Generated using (from wolfssl):
   23 *   cd ../scripts
   24 *   ruby ./aes/aes.rb arm32 \
   25 *       ../wolfssl/wolfcrypt/src/port/arm/armv8-32-aes-asm.c
   26 */
   27
   28#include <wolfssl/wolfcrypt/libwolfssl_sources_asm.h>
   29#include <wolfssl/wolfcrypt/error-crypt.h>
   30
   31#ifdef WOLFSSL_ARMASM
   32#if !defined(__aarch64__) && !defined(WOLFSSL_ARMASM_THUMB2)
   33#ifdef WOLFSSL_ARMASM_INLINE
   34
   35#ifdef __IAR_SYSTEMS_ICC__
   36#define __asm__        asm
   37#define __volatile__   volatile
   38#define WOLFSSL_NO_VAR_ASSIGN_REG
   39#endif /* __IAR_SYSTEMS_ICC__ */
   40#ifdef __KEIL__
   41#define __asm__        __asm
   42#define __volatile__   volatile
   43#endif /* __KEIL__ */
   44#ifdef __ghs__
   45#define __asm__        __asm
   46#define __volatile__
   47#define WOLFSSL_NO_VAR_ASSIGN_REG
   48#endif /* __ghs__ */
   49
   50#ifndef NO_AES
   51#include <wolfssl/wolfcrypt/aes.h>
   52
   53#ifndef WOLFSSL_ARMASM_NO_HW_CRYPTO
   54#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
   55WC_OMIT_FRAME_POINTER void AES_set_key_AARCH32(const byte* userKey_p,
   56    int keylen_p, byte* key_p, int dir_p)
   57#else
   58WC_OMIT_FRAME_POINTER void AES_set_key_AARCH32(const byte* userKey, int keylen,
   59    byte* key, int dir)
   60#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
   61{
   62#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
   63    register const byte* userKey __asm__ ("r0") = (const byte*)userKey_p;
   64    register int keylen __asm__ ("r1") = (int)keylen_p;
   65    register byte* key __asm__ ("r2") = (byte*)key_p;
   66    register int dir __asm__ ("r3") = (int)dir_p;
   67#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
   68
   69    __asm__ __volatile__ (
   70        "cmp	%[keylen], #24\n\t"
   71        "blt	L_aes_set_key_arm32_crypto_start_128_%=\n\t"
   72        "bgt	L_aes_set_key_arm32_crypto_start_256_%=\n\t"
   73        "ldr	r4, [%[userKey]], #4\n\t"
   74        "ldr	r5, [%[userKey]], #4\n\t"
   75        "ldr	r6, [%[userKey]], #4\n\t"
   76        "ldr	r7, [%[userKey]], #4\n\t"
   77        "ldr	r8, [%[userKey]], #4\n\t"
   78        "ldr	r9, [%[userKey]], #4\n\t"
   79#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
   80        "stm	r2!, {r4, r5}\n\t"
   81#else
   82        "strd	r4, r5, [%[key]], #8\n\t"
   83#endif
   84#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
   85        "stm	r2!, {r6, r7}\n\t"
   86#else
   87        "strd	r6, r7, [%[key]], #8\n\t"
   88#endif
   89#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
   90        "stm	r2!, {r8, r9}\n\t"
   91#else
   92        "strd	r8, r9, [%[key]], #8\n\t"
   93#endif
   94        "vdup.32	q1, r9\n\t"
   95        "vmov.i32	q0, #0\n\t"
   96        "aese.8	q0, q1\n\t"
   97        "vmov.i32	r12, s0\n\t"
   98        "ror	r12, r12, #8\n\t"
   99        "eor	r4, r4, #1\n\t"
  100        "eor	r4, r4, r12\n\t"
  101        "eor	r5, r5, r4\n\t"
  102        "eor	r6, r6, r5\n\t"
  103        "eor	r7, r7, r6\n\t"
  104        "eor	r8, r8, r7\n\t"
  105        "eor	r9, r9, r8\n\t"
  106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  107        "stm	r2!, {r4, r5}\n\t"
  108#else
  109        "strd	r4, r5, [%[key]], #8\n\t"
  110#endif
  111#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  112        "stm	r2!, {r6, r7}\n\t"
  113#else
  114        "strd	r6, r7, [%[key]], #8\n\t"
  115#endif
  116#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  117        "stm	r2!, {r8, r9}\n\t"
  118#else
  119        "strd	r8, r9, [%[key]], #8\n\t"
  120#endif
  121        "vdup.32	q1, r9\n\t"
  122        "vmov.i32	q0, #0\n\t"
  123        "aese.8	q0, q1\n\t"
  124        "vmov.i32	r12, s0\n\t"
  125        "ror	r12, r12, #8\n\t"
  126        "eor	r4, r4, #2\n\t"
  127        "eor	r4, r4, r12\n\t"
  128        "eor	r5, r5, r4\n\t"
  129        "eor	r6, r6, r5\n\t"
  130        "eor	r7, r7, r6\n\t"
  131        "eor	r8, r8, r7\n\t"
  132        "eor	r9, r9, r8\n\t"
  133#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  134        "stm	r2!, {r4, r5}\n\t"
  135#else
  136        "strd	r4, r5, [%[key]], #8\n\t"
  137#endif
  138#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  139        "stm	r2!, {r6, r7}\n\t"
  140#else
  141        "strd	r6, r7, [%[key]], #8\n\t"
  142#endif
  143#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  144        "stm	r2!, {r8, r9}\n\t"
  145#else
  146        "strd	r8, r9, [%[key]], #8\n\t"
  147#endif
  148        "vdup.32	q1, r9\n\t"
  149        "vmov.i32	q0, #0\n\t"
  150        "aese.8	q0, q1\n\t"
  151        "vmov.i32	r12, s0\n\t"
  152        "ror	r12, r12, #8\n\t"
  153        "eor	r4, r4, #4\n\t"
  154        "eor	r4, r4, r12\n\t"
  155        "eor	r5, r5, r4\n\t"
  156        "eor	r6, r6, r5\n\t"
  157        "eor	r7, r7, r6\n\t"
  158        "eor	r8, r8, r7\n\t"
  159        "eor	r9, r9, r8\n\t"
  160#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  161        "stm	r2!, {r4, r5}\n\t"
  162#else
  163        "strd	r4, r5, [%[key]], #8\n\t"
  164#endif
  165#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  166        "stm	r2!, {r6, r7}\n\t"
  167#else
  168        "strd	r6, r7, [%[key]], #8\n\t"
  169#endif
  170#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  171        "stm	r2!, {r8, r9}\n\t"
  172#else
  173        "strd	r8, r9, [%[key]], #8\n\t"
  174#endif
  175        "vdup.32	q1, r9\n\t"
  176        "vmov.i32	q0, #0\n\t"
  177        "aese.8	q0, q1\n\t"
  178        "vmov.i32	r12, s0\n\t"
  179        "ror	r12, r12, #8\n\t"
  180        "eor	r4, r4, #8\n\t"
  181        "eor	r4, r4, r12\n\t"
  182        "eor	r5, r5, r4\n\t"
  183        "eor	r6, r6, r5\n\t"
  184        "eor	r7, r7, r6\n\t"
  185        "eor	r8, r8, r7\n\t"
  186        "eor	r9, r9, r8\n\t"
  187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  188        "stm	r2!, {r4, r5}\n\t"
  189#else
  190        "strd	r4, r5, [%[key]], #8\n\t"
  191#endif
  192#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  193        "stm	r2!, {r6, r7}\n\t"
  194#else
  195        "strd	r6, r7, [%[key]], #8\n\t"
  196#endif
  197#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  198        "stm	r2!, {r8, r9}\n\t"
  199#else
  200        "strd	r8, r9, [%[key]], #8\n\t"
  201#endif
  202        "vdup.32	q1, r9\n\t"
  203        "vmov.i32	q0, #0\n\t"
  204        "aese.8	q0, q1\n\t"
  205        "vmov.i32	r12, s0\n\t"
  206        "ror	r12, r12, #8\n\t"
  207        "eor	r4, r4, #16\n\t"
  208        "eor	r4, r4, r12\n\t"
  209        "eor	r5, r5, r4\n\t"
  210        "eor	r6, r6, r5\n\t"
  211        "eor	r7, r7, r6\n\t"
  212        "eor	r8, r8, r7\n\t"
  213        "eor	r9, r9, r8\n\t"
  214#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  215        "stm	r2!, {r4, r5}\n\t"
  216#else
  217        "strd	r4, r5, [%[key]], #8\n\t"
  218#endif
  219#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  220        "stm	r2!, {r6, r7}\n\t"
  221#else
  222        "strd	r6, r7, [%[key]], #8\n\t"
  223#endif
  224#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  225        "stm	r2!, {r8, r9}\n\t"
  226#else
  227        "strd	r8, r9, [%[key]], #8\n\t"
  228#endif
  229        "vdup.32	q1, r9\n\t"
  230        "vmov.i32	q0, #0\n\t"
  231        "aese.8	q0, q1\n\t"
  232        "vmov.i32	r12, s0\n\t"
  233        "ror	r12, r12, #8\n\t"
  234        "eor	r4, r4, #32\n\t"
  235        "eor	r4, r4, r12\n\t"
  236        "eor	r5, r5, r4\n\t"
  237        "eor	r6, r6, r5\n\t"
  238        "eor	r7, r7, r6\n\t"
  239        "eor	r8, r8, r7\n\t"
  240        "eor	r9, r9, r8\n\t"
  241#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  242        "stm	r2!, {r4, r5}\n\t"
  243#else
  244        "strd	r4, r5, [%[key]], #8\n\t"
  245#endif
  246#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  247        "stm	r2!, {r6, r7}\n\t"
  248#else
  249        "strd	r6, r7, [%[key]], #8\n\t"
  250#endif
  251#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  252        "stm	r2!, {r8, r9}\n\t"
  253#else
  254        "strd	r8, r9, [%[key]], #8\n\t"
  255#endif
  256        "vdup.32	q1, r9\n\t"
  257        "vmov.i32	q0, #0\n\t"
  258        "aese.8	q0, q1\n\t"
  259        "vmov.i32	r12, s0\n\t"
  260        "ror	r12, r12, #8\n\t"
  261        "eor	r4, r4, #0x40\n\t"
  262        "eor	r4, r4, r12\n\t"
  263        "eor	r5, r5, r4\n\t"
  264        "eor	r6, r6, r5\n\t"
  265        "eor	r7, r7, r6\n\t"
  266        "eor	r8, r8, r7\n\t"
  267        "eor	r9, r9, r8\n\t"
  268#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  269        "stm	r2!, {r4, r5}\n\t"
  270#else
  271        "strd	r4, r5, [%[key]], #8\n\t"
  272#endif
  273#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  274        "stm	r2!, {r6, r7}\n\t"
  275#else
  276        "strd	r6, r7, [%[key]], #8\n\t"
  277#endif
  278#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  279        "stm	r2!, {r8, r9}\n\t"
  280#else
  281        "strd	r8, r9, [%[key]], #8\n\t"
  282#endif
  283        "vdup.32	q1, r9\n\t"
  284        "vmov.i32	q0, #0\n\t"
  285        "aese.8	q0, q1\n\t"
  286        "vmov.i32	r12, s0\n\t"
  287        "ror	r12, r12, #8\n\t"
  288        "eor	r4, r4, #0x80\n\t"
  289        "eor	r4, r4, r12\n\t"
  290        "eor	r5, r5, r4\n\t"
  291        "eor	r6, r6, r5\n\t"
  292        "eor	r7, r7, r6\n\t"
  293#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  294        "stm	r2!, {r4, r5}\n\t"
  295#else
  296        "strd	r4, r5, [%[key]], #8\n\t"
  297#endif
  298#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  299        "stm	r2!, {r6, r7}\n\t"
  300#else
  301        "strd	r6, r7, [%[key]], #8\n\t"
  302#endif
  303        "cmp	%[dir], #0\n\t"
  304        "beq	L_aes_set_key_arm32_crypto_done_%=\n\t"
  305        "sub	%[key], %[key], #0xd0\n\t"
  306        "vld1.32	{q0}, [%[key]]\n\t"
  307        "add	%[key], %[key], #0xc0\n\t"
  308        "vld1.32	{q1}, [%[key]]\n\t"
  309        "sub	%[key], %[key], #0xc0\n\t"
  310        "vst1.32	{q1}, [%[key]]\n\t"
  311        "add	%[key], %[key], #0xc0\n\t"
  312        "vst1.32	{q0}, [%[key]]\n\t"
  313        "sub	%[key], %[key], #0xb0\n\t"
  314        "vld1.32	{q0}, [%[key]]\n\t"
  315        "add	%[key], %[key], #0xa0\n\t"
  316        "vld1.32	{q1}, [%[key]]\n\t"
  317        "sub	%[key], %[key], #0xa0\n\t"
  318        "aesimc.8	q0, q0\n\t"
  319        "aesimc.8	q1, q1\n\t"
  320        "vst1.32	{q1}, [%[key]]\n\t"
  321        "add	%[key], %[key], #0xa0\n\t"
  322        "vst1.32	{q0}, [%[key]]\n\t"
  323        "sub	%[key], %[key], #0x90\n\t"
  324        "vld1.32	{q0}, [%[key]]\n\t"
  325        "add	%[key], %[key], #0x80\n\t"
  326        "vld1.32	{q1}, [%[key]]\n\t"
  327        "sub	%[key], %[key], #0x80\n\t"
  328        "aesimc.8	q0, q0\n\t"
  329        "aesimc.8	q1, q1\n\t"
  330        "vst1.32	{q1}, [%[key]]\n\t"
  331        "add	%[key], %[key], #0x80\n\t"
  332        "vst1.32	{q0}, [%[key]]\n\t"
  333        "sub	%[key], %[key], #0x70\n\t"
  334        "vld1.32	{q0}, [%[key]]\n\t"
  335        "add	%[key], %[key], #0x60\n\t"
  336        "vld1.32	{q1}, [%[key]]\n\t"
  337        "sub	%[key], %[key], #0x60\n\t"
  338        "aesimc.8	q0, q0\n\t"
  339        "aesimc.8	q1, q1\n\t"
  340        "vst1.32	{q1}, [%[key]]\n\t"
  341        "add	%[key], %[key], #0x60\n\t"
  342        "vst1.32	{q0}, [%[key]]\n\t"
  343        "sub	%[key], %[key], #0x50\n\t"
  344        "vld1.32	{q0}, [%[key]]\n\t"
  345        "add	%[key], %[key], #0x40\n\t"
  346        "vld1.32	{q1}, [%[key]]\n\t"
  347        "sub	%[key], %[key], #0x40\n\t"
  348        "aesimc.8	q0, q0\n\t"
  349        "aesimc.8	q1, q1\n\t"
  350        "vst1.32	{q1}, [%[key]]\n\t"
  351        "add	%[key], %[key], #0x40\n\t"
  352        "vst1.32	{q0}, [%[key]]\n\t"
  353        "sub	%[key], %[key], #48\n\t"
  354        "vld1.32	{q0}, [%[key]]\n\t"
  355        "add	%[key], %[key], #32\n\t"
  356        "vld1.32	{q1}, [%[key]]\n\t"
  357        "sub	%[key], %[key], #32\n\t"
  358        "aesimc.8	q0, q0\n\t"
  359        "aesimc.8	q1, q1\n\t"
  360        "vst1.32	{q1}, [%[key]]\n\t"
  361        "add	%[key], %[key], #32\n\t"
  362        "vst1.32	{q0}, [%[key]]\n\t"
  363        "sub	%[key], %[key], #16\n\t"
  364        "vld1.32	{q0}, [%[key]]\n\t"
  365        "aesimc.8	q0, q0\n\t"
  366        "vst1.32	{q0}, [%[key]]\n\t"
  367        "b	L_aes_set_key_arm32_crypto_done_%=\n\t"
  368        "\n"
  369    "L_aes_set_key_arm32_crypto_start_256_%=:\n\t"
  370        "ldr	r4, [%[userKey]], #4\n\t"
  371        "ldr	r5, [%[userKey]], #4\n\t"
  372        "ldr	r6, [%[userKey]], #4\n\t"
  373        "ldr	r7, [%[userKey]], #4\n\t"
  374        "ldr	r8, [%[userKey]], #4\n\t"
  375        "ldr	r9, [%[userKey]], #4\n\t"
  376        "ldr	r10, [%[userKey]], #4\n\t"
  377        "ldr	r11, [%[userKey]], #4\n\t"
  378#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  379        "stm	r2!, {r4, r5}\n\t"
  380#else
  381        "strd	r4, r5, [%[key]], #8\n\t"
  382#endif
  383#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  384        "stm	r2!, {r6, r7}\n\t"
  385#else
  386        "strd	r6, r7, [%[key]], #8\n\t"
  387#endif
  388#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  389        "stm	r2!, {r8, r9}\n\t"
  390#else
  391        "strd	r8, r9, [%[key]], #8\n\t"
  392#endif
  393#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  394        "stm	r2!, {r10, r11}\n\t"
  395#else
  396        "strd	r10, r11, [%[key]], #8\n\t"
  397#endif
  398        "vdup.32	q1, r11\n\t"
  399        "vmov.i32	q0, #0\n\t"
  400        "aese.8	q0, q1\n\t"
  401        "vmov.i32	r12, s0\n\t"
  402        "ror	r12, r12, #8\n\t"
  403        "eor	r4, r4, #1\n\t"
  404        "eor	r4, r4, r12\n\t"
  405        "eor	r5, r5, r4\n\t"
  406        "eor	r6, r6, r5\n\t"
  407        "eor	r7, r7, r6\n\t"
  408        "vdup.32	q1, r7\n\t"
  409        "vmov.i32	q0, #0\n\t"
  410        "aese.8	q0, q1\n\t"
  411        "vmov.i32	r12, s0\n\t"
  412        "eor	r8, r8, r12\n\t"
  413        "eor	r9, r9, r8\n\t"
  414        "eor	r10, r10, r9\n\t"
  415        "eor	r11, r11, r10\n\t"
  416#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  417        "stm	r2!, {r4, r5}\n\t"
  418#else
  419        "strd	r4, r5, [%[key]], #8\n\t"
  420#endif
  421#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  422        "stm	r2!, {r6, r7}\n\t"
  423#else
  424        "strd	r6, r7, [%[key]], #8\n\t"
  425#endif
  426#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  427        "stm	r2!, {r8, r9}\n\t"
  428#else
  429        "strd	r8, r9, [%[key]], #8\n\t"
  430#endif
  431#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  432        "stm	r2!, {r10, r11}\n\t"
  433#else
  434        "strd	r10, r11, [%[key]], #8\n\t"
  435#endif
  436        "vdup.32	q1, r11\n\t"
  437        "vmov.i32	q0, #0\n\t"
  438        "aese.8	q0, q1\n\t"
  439        "vmov.i32	r12, s0\n\t"
  440        "ror	r12, r12, #8\n\t"
  441        "eor	r4, r4, #2\n\t"
  442        "eor	r4, r4, r12\n\t"
  443        "eor	r5, r5, r4\n\t"
  444        "eor	r6, r6, r5\n\t"
  445        "eor	r7, r7, r6\n\t"
  446        "vdup.32	q1, r7\n\t"
  447        "vmov.i32	q0, #0\n\t"
  448        "aese.8	q0, q1\n\t"
  449        "vmov.i32	r12, s0\n\t"
  450        "eor	r8, r8, r12\n\t"
  451        "eor	r9, r9, r8\n\t"
  452        "eor	r10, r10, r9\n\t"
  453        "eor	r11, r11, r10\n\t"
  454#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  455        "stm	r2!, {r4, r5}\n\t"
  456#else
  457        "strd	r4, r5, [%[key]], #8\n\t"
  458#endif
  459#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  460        "stm	r2!, {r6, r7}\n\t"
  461#else
  462        "strd	r6, r7, [%[key]], #8\n\t"
  463#endif
  464#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  465        "stm	r2!, {r8, r9}\n\t"
  466#else
  467        "strd	r8, r9, [%[key]], #8\n\t"
  468#endif
  469#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  470        "stm	r2!, {r10, r11}\n\t"
  471#else
  472        "strd	r10, r11, [%[key]], #8\n\t"
  473#endif
  474        "vdup.32	q1, r11\n\t"
  475        "vmov.i32	q0, #0\n\t"
  476        "aese.8	q0, q1\n\t"
  477        "vmov.i32	r12, s0\n\t"
  478        "ror	r12, r12, #8\n\t"
  479        "eor	r4, r4, #4\n\t"
  480        "eor	r4, r4, r12\n\t"
  481        "eor	r5, r5, r4\n\t"
  482        "eor	r6, r6, r5\n\t"
  483        "eor	r7, r7, r6\n\t"
  484        "vdup.32	q1, r7\n\t"
  485        "vmov.i32	q0, #0\n\t"
  486        "aese.8	q0, q1\n\t"
  487        "vmov.i32	r12, s0\n\t"
  488        "eor	r8, r8, r12\n\t"
  489        "eor	r9, r9, r8\n\t"
  490        "eor	r10, r10, r9\n\t"
  491        "eor	r11, r11, r10\n\t"
  492#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  493        "stm	r2!, {r4, r5}\n\t"
  494#else
  495        "strd	r4, r5, [%[key]], #8\n\t"
  496#endif
  497#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  498        "stm	r2!, {r6, r7}\n\t"
  499#else
  500        "strd	r6, r7, [%[key]], #8\n\t"
  501#endif
  502#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  503        "stm	r2!, {r8, r9}\n\t"
  504#else
  505        "strd	r8, r9, [%[key]], #8\n\t"
  506#endif
  507#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  508        "stm	r2!, {r10, r11}\n\t"
  509#else
  510        "strd	r10, r11, [%[key]], #8\n\t"
  511#endif
  512        "vdup.32	q1, r11\n\t"
  513        "vmov.i32	q0, #0\n\t"
  514        "aese.8	q0, q1\n\t"
  515        "vmov.i32	r12, s0\n\t"
  516        "ror	r12, r12, #8\n\t"
  517        "eor	r4, r4, #8\n\t"
  518        "eor	r4, r4, r12\n\t"
  519        "eor	r5, r5, r4\n\t"
  520        "eor	r6, r6, r5\n\t"
  521        "eor	r7, r7, r6\n\t"
  522        "vdup.32	q1, r7\n\t"
  523        "vmov.i32	q0, #0\n\t"
  524        "aese.8	q0, q1\n\t"
  525        "vmov.i32	r12, s0\n\t"
  526        "eor	r8, r8, r12\n\t"
  527        "eor	r9, r9, r8\n\t"
  528        "eor	r10, r10, r9\n\t"
  529        "eor	r11, r11, r10\n\t"
  530#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  531        "stm	r2!, {r4, r5}\n\t"
  532#else
  533        "strd	r4, r5, [%[key]], #8\n\t"
  534#endif
  535#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  536        "stm	r2!, {r6, r7}\n\t"
  537#else
  538        "strd	r6, r7, [%[key]], #8\n\t"
  539#endif
  540#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  541        "stm	r2!, {r8, r9}\n\t"
  542#else
  543        "strd	r8, r9, [%[key]], #8\n\t"
  544#endif
  545#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  546        "stm	r2!, {r10, r11}\n\t"
  547#else
  548        "strd	r10, r11, [%[key]], #8\n\t"
  549#endif
  550        "vdup.32	q1, r11\n\t"
  551        "vmov.i32	q0, #0\n\t"
  552        "aese.8	q0, q1\n\t"
  553        "vmov.i32	r12, s0\n\t"
  554        "ror	r12, r12, #8\n\t"
  555        "eor	r4, r4, #16\n\t"
  556        "eor	r4, r4, r12\n\t"
  557        "eor	r5, r5, r4\n\t"
  558        "eor	r6, r6, r5\n\t"
  559        "eor	r7, r7, r6\n\t"
  560        "vdup.32	q1, r7\n\t"
  561        "vmov.i32	q0, #0\n\t"
  562        "aese.8	q0, q1\n\t"
  563        "vmov.i32	r12, s0\n\t"
  564        "eor	r8, r8, r12\n\t"
  565        "eor	r9, r9, r8\n\t"
  566        "eor	r10, r10, r9\n\t"
  567        "eor	r11, r11, r10\n\t"
  568#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  569        "stm	r2!, {r4, r5}\n\t"
  570#else
  571        "strd	r4, r5, [%[key]], #8\n\t"
  572#endif
  573#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  574        "stm	r2!, {r6, r7}\n\t"
  575#else
  576        "strd	r6, r7, [%[key]], #8\n\t"
  577#endif
  578#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  579        "stm	r2!, {r8, r9}\n\t"
  580#else
  581        "strd	r8, r9, [%[key]], #8\n\t"
  582#endif
  583#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  584        "stm	r2!, {r10, r11}\n\t"
  585#else
  586        "strd	r10, r11, [%[key]], #8\n\t"
  587#endif
  588        "vdup.32	q1, r11\n\t"
  589        "vmov.i32	q0, #0\n\t"
  590        "aese.8	q0, q1\n\t"
  591        "vmov.i32	r12, s0\n\t"
  592        "ror	r12, r12, #8\n\t"
  593        "eor	r4, r4, #32\n\t"
  594        "eor	r4, r4, r12\n\t"
  595        "eor	r5, r5, r4\n\t"
  596        "eor	r6, r6, r5\n\t"
  597        "eor	r7, r7, r6\n\t"
  598        "vdup.32	q1, r7\n\t"
  599        "vmov.i32	q0, #0\n\t"
  600        "aese.8	q0, q1\n\t"
  601        "vmov.i32	r12, s0\n\t"
  602        "eor	r8, r8, r12\n\t"
  603        "eor	r9, r9, r8\n\t"
  604        "eor	r10, r10, r9\n\t"
  605        "eor	r11, r11, r10\n\t"
  606#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  607        "stm	r2!, {r4, r5}\n\t"
  608#else
  609        "strd	r4, r5, [%[key]], #8\n\t"
  610#endif
  611#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  612        "stm	r2!, {r6, r7}\n\t"
  613#else
  614        "strd	r6, r7, [%[key]], #8\n\t"
  615#endif
  616#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  617        "stm	r2!, {r8, r9}\n\t"
  618#else
  619        "strd	r8, r9, [%[key]], #8\n\t"
  620#endif
  621#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  622        "stm	r2!, {r10, r11}\n\t"
  623#else
  624        "strd	r10, r11, [%[key]], #8\n\t"
  625#endif
  626        "vdup.32	q1, r11\n\t"
  627        "vmov.i32	q0, #0\n\t"
  628        "aese.8	q0, q1\n\t"
  629        "vmov.i32	r12, s0\n\t"
  630        "ror	r12, r12, #8\n\t"
  631        "eor	r4, r4, #0x40\n\t"
  632        "eor	r4, r4, r12\n\t"
  633        "eor	r5, r5, r4\n\t"
  634        "eor	r6, r6, r5\n\t"
  635        "eor	r7, r7, r6\n\t"
  636#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  637        "stm	r2!, {r4, r5}\n\t"
  638#else
  639        "strd	r4, r5, [%[key]], #8\n\t"
  640#endif
  641#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  642        "stm	r2!, {r6, r7}\n\t"
  643#else
  644        "strd	r6, r7, [%[key]], #8\n\t"
  645#endif
  646        "cmp	%[dir], #0\n\t"
  647        "beq	L_aes_set_key_arm32_crypto_done_%=\n\t"
  648        "sub	%[key], %[key], #0xf0\n\t"
  649        "vld1.32	{q0}, [%[key]]\n\t"
  650        "add	%[key], %[key], #0xe0\n\t"
  651        "vld1.32	{q1}, [%[key]]\n\t"
  652        "sub	%[key], %[key], #0xe0\n\t"
  653        "vst1.32	{q1}, [%[key]]\n\t"
  654        "add	%[key], %[key], #0xe0\n\t"
  655        "vst1.32	{q0}, [%[key]]\n\t"
  656        "sub	%[key], %[key], #0xd0\n\t"
  657        "vld1.32	{q0}, [%[key]]\n\t"
  658        "add	%[key], %[key], #0xc0\n\t"
  659        "vld1.32	{q1}, [%[key]]\n\t"
  660        "sub	%[key], %[key], #0xc0\n\t"
  661        "aesimc.8	q0, q0\n\t"
  662        "aesimc.8	q1, q1\n\t"
  663        "vst1.32	{q1}, [%[key]]\n\t"
  664        "add	%[key], %[key], #0xc0\n\t"
  665        "vst1.32	{q0}, [%[key]]\n\t"
  666        "sub	%[key], %[key], #0xb0\n\t"
  667        "vld1.32	{q0}, [%[key]]\n\t"
  668        "add	%[key], %[key], #0xa0\n\t"
  669        "vld1.32	{q1}, [%[key]]\n\t"
  670        "sub	%[key], %[key], #0xa0\n\t"
  671        "aesimc.8	q0, q0\n\t"
  672        "aesimc.8	q1, q1\n\t"
  673        "vst1.32	{q1}, [%[key]]\n\t"
  674        "add	%[key], %[key], #0xa0\n\t"
  675        "vst1.32	{q0}, [%[key]]\n\t"
  676        "sub	%[key], %[key], #0x90\n\t"
  677        "vld1.32	{q0}, [%[key]]\n\t"
  678        "add	%[key], %[key], #0x80\n\t"
  679        "vld1.32	{q1}, [%[key]]\n\t"
  680        "sub	%[key], %[key], #0x80\n\t"
  681        "aesimc.8	q0, q0\n\t"
  682        "aesimc.8	q1, q1\n\t"
  683        "vst1.32	{q1}, [%[key]]\n\t"
  684        "add	%[key], %[key], #0x80\n\t"
  685        "vst1.32	{q0}, [%[key]]\n\t"
  686        "sub	%[key], %[key], #0x70\n\t"
  687        "vld1.32	{q0}, [%[key]]\n\t"
  688        "add	%[key], %[key], #0x60\n\t"
  689        "vld1.32	{q1}, [%[key]]\n\t"
  690        "sub	%[key], %[key], #0x60\n\t"
  691        "aesimc.8	q0, q0\n\t"
  692        "aesimc.8	q1, q1\n\t"
  693        "vst1.32	{q1}, [%[key]]\n\t"
  694        "add	%[key], %[key], #0x60\n\t"
  695        "vst1.32	{q0}, [%[key]]\n\t"
  696        "sub	%[key], %[key], #0x50\n\t"
  697        "vld1.32	{q0}, [%[key]]\n\t"
  698        "add	%[key], %[key], #0x40\n\t"
  699        "vld1.32	{q1}, [%[key]]\n\t"
  700        "sub	%[key], %[key], #0x40\n\t"
  701        "aesimc.8	q0, q0\n\t"
  702        "aesimc.8	q1, q1\n\t"
  703        "vst1.32	{q1}, [%[key]]\n\t"
  704        "add	%[key], %[key], #0x40\n\t"
  705        "vst1.32	{q0}, [%[key]]\n\t"
  706        "sub	%[key], %[key], #48\n\t"
  707        "vld1.32	{q0}, [%[key]]\n\t"
  708        "add	%[key], %[key], #32\n\t"
  709        "vld1.32	{q1}, [%[key]]\n\t"
  710        "sub	%[key], %[key], #32\n\t"
  711        "aesimc.8	q0, q0\n\t"
  712        "aesimc.8	q1, q1\n\t"
  713        "vst1.32	{q1}, [%[key]]\n\t"
  714        "add	%[key], %[key], #32\n\t"
  715        "vst1.32	{q0}, [%[key]]\n\t"
  716        "sub	%[key], %[key], #16\n\t"
  717        "vld1.32	{q0}, [%[key]]\n\t"
  718        "aesimc.8	q0, q0\n\t"
  719        "vst1.32	{q0}, [%[key]]\n\t"
  720        "b	L_aes_set_key_arm32_crypto_done_%=\n\t"
  721        "\n"
  722    "L_aes_set_key_arm32_crypto_start_128_%=:\n\t"
  723        "ldr	r4, [%[userKey]], #4\n\t"
  724        "ldr	r5, [%[userKey]], #4\n\t"
  725        "ldr	r6, [%[userKey]], #4\n\t"
  726        "ldr	r7, [%[userKey]], #4\n\t"
  727#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  728        "stm	r2!, {r4, r5}\n\t"
  729#else
  730        "strd	r4, r5, [%[key]], #8\n\t"
  731#endif
  732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  733        "stm	r2!, {r6, r7}\n\t"
  734#else
  735        "strd	r6, r7, [%[key]], #8\n\t"
  736#endif
  737        "vdup.32	q1, r7\n\t"
  738        "vmov.i32	q0, #0\n\t"
  739        "aese.8	q0, q1\n\t"
  740        "vmov.i32	r12, s0\n\t"
  741        "ror	r12, r12, #8\n\t"
  742        "eor	r4, r4, #1\n\t"
  743        "eor	r4, r4, r12\n\t"
  744        "eor	r5, r5, r4\n\t"
  745        "eor	r6, r6, r5\n\t"
  746        "eor	r7, r7, r6\n\t"
  747#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  748        "stm	r2!, {r4, r5}\n\t"
  749#else
  750        "strd	r4, r5, [%[key]], #8\n\t"
  751#endif
  752#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  753        "stm	r2!, {r6, r7}\n\t"
  754#else
  755        "strd	r6, r7, [%[key]], #8\n\t"
  756#endif
  757        "vdup.32	q1, r7\n\t"
  758        "vmov.i32	q0, #0\n\t"
  759        "aese.8	q0, q1\n\t"
  760        "vmov.i32	r12, s0\n\t"
  761        "ror	r12, r12, #8\n\t"
  762        "eor	r4, r4, #2\n\t"
  763        "eor	r4, r4, r12\n\t"
  764        "eor	r5, r5, r4\n\t"
  765        "eor	r6, r6, r5\n\t"
  766        "eor	r7, r7, r6\n\t"
  767#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  768        "stm	r2!, {r4, r5}\n\t"
  769#else
  770        "strd	r4, r5, [%[key]], #8\n\t"
  771#endif
  772#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  773        "stm	r2!, {r6, r7}\n\t"
  774#else
  775        "strd	r6, r7, [%[key]], #8\n\t"
  776#endif
  777        "vdup.32	q1, r7\n\t"
  778        "vmov.i32	q0, #0\n\t"
  779        "aese.8	q0, q1\n\t"
  780        "vmov.i32	r12, s0\n\t"
  781        "ror	r12, r12, #8\n\t"
  782        "eor	r4, r4, #4\n\t"
  783        "eor	r4, r4, r12\n\t"
  784        "eor	r5, r5, r4\n\t"
  785        "eor	r6, r6, r5\n\t"
  786        "eor	r7, r7, r6\n\t"
  787#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  788        "stm	r2!, {r4, r5}\n\t"
  789#else
  790        "strd	r4, r5, [%[key]], #8\n\t"
  791#endif
  792#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  793        "stm	r2!, {r6, r7}\n\t"
  794#else
  795        "strd	r6, r7, [%[key]], #8\n\t"
  796#endif
  797        "vdup.32	q1, r7\n\t"
  798        "vmov.i32	q0, #0\n\t"
  799        "aese.8	q0, q1\n\t"
  800        "vmov.i32	r12, s0\n\t"
  801        "ror	r12, r12, #8\n\t"
  802        "eor	r4, r4, #8\n\t"
  803        "eor	r4, r4, r12\n\t"
  804        "eor	r5, r5, r4\n\t"
  805        "eor	r6, r6, r5\n\t"
  806        "eor	r7, r7, r6\n\t"
  807#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  808        "stm	r2!, {r4, r5}\n\t"
  809#else
  810        "strd	r4, r5, [%[key]], #8\n\t"
  811#endif
  812#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  813        "stm	r2!, {r6, r7}\n\t"
  814#else
  815        "strd	r6, r7, [%[key]], #8\n\t"
  816#endif
  817        "vdup.32	q1, r7\n\t"
  818        "vmov.i32	q0, #0\n\t"
  819        "aese.8	q0, q1\n\t"
  820        "vmov.i32	r12, s0\n\t"
  821        "ror	r12, r12, #8\n\t"
  822        "eor	r4, r4, #16\n\t"
  823        "eor	r4, r4, r12\n\t"
  824        "eor	r5, r5, r4\n\t"
  825        "eor	r6, r6, r5\n\t"
  826        "eor	r7, r7, r6\n\t"
  827#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  828        "stm	r2!, {r4, r5}\n\t"
  829#else
  830        "strd	r4, r5, [%[key]], #8\n\t"
  831#endif
  832#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  833        "stm	r2!, {r6, r7}\n\t"
  834#else
  835        "strd	r6, r7, [%[key]], #8\n\t"
  836#endif
  837        "vdup.32	q1, r7\n\t"
  838        "vmov.i32	q0, #0\n\t"
  839        "aese.8	q0, q1\n\t"
  840        "vmov.i32	r12, s0\n\t"
  841        "ror	r12, r12, #8\n\t"
  842        "eor	r4, r4, #32\n\t"
  843        "eor	r4, r4, r12\n\t"
  844        "eor	r5, r5, r4\n\t"
  845        "eor	r6, r6, r5\n\t"
  846        "eor	r7, r7, r6\n\t"
  847#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  848        "stm	r2!, {r4, r5}\n\t"
  849#else
  850        "strd	r4, r5, [%[key]], #8\n\t"
  851#endif
  852#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  853        "stm	r2!, {r6, r7}\n\t"
  854#else
  855        "strd	r6, r7, [%[key]], #8\n\t"
  856#endif
  857        "vdup.32	q1, r7\n\t"
  858        "vmov.i32	q0, #0\n\t"
  859        "aese.8	q0, q1\n\t"
  860        "vmov.i32	r12, s0\n\t"
  861        "ror	r12, r12, #8\n\t"
  862        "eor	r4, r4, #0x40\n\t"
  863        "eor	r4, r4, r12\n\t"
  864        "eor	r5, r5, r4\n\t"
  865        "eor	r6, r6, r5\n\t"
  866        "eor	r7, r7, r6\n\t"
  867#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  868        "stm	r2!, {r4, r5}\n\t"
  869#else
  870        "strd	r4, r5, [%[key]], #8\n\t"
  871#endif
  872#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  873        "stm	r2!, {r6, r7}\n\t"
  874#else
  875        "strd	r6, r7, [%[key]], #8\n\t"
  876#endif
  877        "vdup.32	q1, r7\n\t"
  878        "vmov.i32	q0, #0\n\t"
  879        "aese.8	q0, q1\n\t"
  880        "vmov.i32	r12, s0\n\t"
  881        "ror	r12, r12, #8\n\t"
  882        "eor	r4, r4, #0x80\n\t"
  883        "eor	r4, r4, r12\n\t"
  884        "eor	r5, r5, r4\n\t"
  885        "eor	r6, r6, r5\n\t"
  886        "eor	r7, r7, r6\n\t"
  887#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  888        "stm	r2!, {r4, r5}\n\t"
  889#else
  890        "strd	r4, r5, [%[key]], #8\n\t"
  891#endif
  892#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  893        "stm	r2!, {r6, r7}\n\t"
  894#else
  895        "strd	r6, r7, [%[key]], #8\n\t"
  896#endif
  897        "vdup.32	q1, r7\n\t"
  898        "vmov.i32	q0, #0\n\t"
  899        "aese.8	q0, q1\n\t"
  900        "vmov.i32	r12, s0\n\t"
  901        "mov	lr, #27\n\t"
  902        "ror	r12, r12, #8\n\t"
  903        "eor	r4, r4, lr\n\t"
  904        "eor	r4, r4, r12\n\t"
  905        "eor	r5, r5, r4\n\t"
  906        "eor	r6, r6, r5\n\t"
  907        "eor	r7, r7, r6\n\t"
  908#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  909        "stm	r2!, {r4, r5}\n\t"
  910#else
  911        "strd	r4, r5, [%[key]], #8\n\t"
  912#endif
  913#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  914        "stm	r2!, {r6, r7}\n\t"
  915#else
  916        "strd	r6, r7, [%[key]], #8\n\t"
  917#endif
  918        "vdup.32	q1, r7\n\t"
  919        "vmov.i32	q0, #0\n\t"
  920        "aese.8	q0, q1\n\t"
  921        "vmov.i32	r12, s0\n\t"
  922        "mov	lr, #54\n\t"
  923        "ror	r12, r12, #8\n\t"
  924        "eor	r4, r4, lr\n\t"
  925        "eor	r4, r4, r12\n\t"
  926        "eor	r5, r5, r4\n\t"
  927        "eor	r6, r6, r5\n\t"
  928        "eor	r7, r7, r6\n\t"
  929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  930        "stm	r2!, {r4, r5}\n\t"
  931#else
  932        "strd	r4, r5, [%[key]], #8\n\t"
  933#endif
  934#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  935        "stm	r2!, {r6, r7}\n\t"
  936#else
  937        "strd	r6, r7, [%[key]], #8\n\t"
  938#endif
  939        "cmp	%[dir], #0\n\t"
  940        "beq	L_aes_set_key_arm32_crypto_done_%=\n\t"
  941        "sub	%[key], %[key], #0xb0\n\t"
  942        "vld1.32	{q0}, [%[key]]\n\t"
  943        "add	%[key], %[key], #0xa0\n\t"
  944        "vld1.32	{q1}, [%[key]]\n\t"
  945        "sub	%[key], %[key], #0xa0\n\t"
  946        "vst1.32	{q1}, [%[key]]\n\t"
  947        "add	%[key], %[key], #0xa0\n\t"
  948        "vst1.32	{q0}, [%[key]]\n\t"
  949        "sub	%[key], %[key], #0x90\n\t"
  950        "vld1.32	{q0}, [%[key]]\n\t"
  951        "add	%[key], %[key], #0x80\n\t"
  952        "vld1.32	{q1}, [%[key]]\n\t"
  953        "sub	%[key], %[key], #0x80\n\t"
  954        "aesimc.8	q0, q0\n\t"
  955        "aesimc.8	q1, q1\n\t"
  956        "vst1.32	{q1}, [%[key]]\n\t"
  957        "add	%[key], %[key], #0x80\n\t"
  958        "vst1.32	{q0}, [%[key]]\n\t"
  959        "sub	%[key], %[key], #0x70\n\t"
  960        "vld1.32	{q0}, [%[key]]\n\t"
  961        "add	%[key], %[key], #0x60\n\t"
  962        "vld1.32	{q1}, [%[key]]\n\t"
  963        "sub	%[key], %[key], #0x60\n\t"
  964        "aesimc.8	q0, q0\n\t"
  965        "aesimc.8	q1, q1\n\t"
  966        "vst1.32	{q1}, [%[key]]\n\t"
  967        "add	%[key], %[key], #0x60\n\t"
  968        "vst1.32	{q0}, [%[key]]\n\t"
  969        "sub	%[key], %[key], #0x50\n\t"
  970        "vld1.32	{q0}, [%[key]]\n\t"
  971        "add	%[key], %[key], #0x40\n\t"
  972        "vld1.32	{q1}, [%[key]]\n\t"
  973        "sub	%[key], %[key], #0x40\n\t"
  974        "aesimc.8	q0, q0\n\t"
  975        "aesimc.8	q1, q1\n\t"
  976        "vst1.32	{q1}, [%[key]]\n\t"
  977        "add	%[key], %[key], #0x40\n\t"
  978        "vst1.32	{q0}, [%[key]]\n\t"
  979        "sub	%[key], %[key], #48\n\t"
  980        "vld1.32	{q0}, [%[key]]\n\t"
  981        "add	%[key], %[key], #32\n\t"
  982        "vld1.32	{q1}, [%[key]]\n\t"
  983        "sub	%[key], %[key], #32\n\t"
  984        "aesimc.8	q0, q0\n\t"
  985        "aesimc.8	q1, q1\n\t"
  986        "vst1.32	{q1}, [%[key]]\n\t"
  987        "add	%[key], %[key], #32\n\t"
  988        "vst1.32	{q0}, [%[key]]\n\t"
  989        "sub	%[key], %[key], #16\n\t"
  990        "vld1.32	{q0}, [%[key]]\n\t"
  991        "aesimc.8	q0, q0\n\t"
  992        "vst1.32	{q0}, [%[key]]\n\t"
  993        "\n"
  994    "L_aes_set_key_arm32_crypto_done_%=:\n\t"
  995#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
  996        : [userKey] "+r" (userKey), [keylen] "+r" (keylen), [key] "+r" (key),
  997          [dir] "+r" (dir)
  998        :
  999#else
 1000        :
 1001        : [userKey] "r" (userKey), [keylen] "r" (keylen), [key] "r" (key),
 1002          [dir] "r" (dir)
 1003#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 1004        : "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
 1005            "r10", "r11", "q0", "q1"
 1006    );
 1007}
 1008
 1009#if defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \
 1010        defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
 1011        defined(HAVE_AES_CBC)
 1012#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 1013WC_OMIT_FRAME_POINTER void AES_encrypt_AARCH32(const byte* inBlock_p,
 1014    byte* outBlock_p, byte* key_p, int nr_p)
 1015#else
 1016WC_OMIT_FRAME_POINTER void AES_encrypt_AARCH32(const byte* inBlock,
 1017    byte* outBlock, byte* key, int nr)
 1018#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 1019{
 1020#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 1021    register const byte* inBlock __asm__ ("r0") = (const byte*)inBlock_p;
 1022    register byte* outBlock __asm__ ("r1") = (byte*)outBlock_p;
 1023    register byte* key __asm__ ("r2") = (byte*)key_p;
 1024    register int nr __asm__ ("r3") = (int)nr_p;
 1025#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 1026
 1027    __asm__ __volatile__ (
 1028        "vld1.8	{q0}, [%[inBlock]]\n\t"
 1029        "vldm	%[key]!, {q1-q4}\n\t"
 1030        "aese.8	q0, q1\n\t"
 1031        "aesmc.8	q0, q0\n\t"
 1032        "aese.8	q0, q2\n\t"
 1033        "aesmc.8	q0, q0\n\t"
 1034        "aese.8	q0, q3\n\t"
 1035        "aesmc.8	q0, q0\n\t"
 1036        "aese.8	q0, q4\n\t"
 1037        "aesmc.8	q0, q0\n\t"
 1038        "vldm	%[key]!, {q1-q4}\n\t"
 1039        "aese.8	q0, q1\n\t"
 1040        "aesmc.8	q0, q0\n\t"
 1041        "aese.8	q0, q2\n\t"
 1042        "aesmc.8	q0, q0\n\t"
 1043        "aese.8	q0, q3\n\t"
 1044        "aesmc.8	q0, q0\n\t"
 1045        "aese.8	q0, q4\n\t"
 1046        "aesmc.8	q0, q0\n\t"
 1047        "subs	%[nr], %[nr], #10\n\t"
 1048        "vld1.32	{q1-q2}, [%[key]]!\n\t"
 1049        "aese.8	q0, q1\n\t"
 1050        "aesmc.8	q0, q0\n\t"
 1051        "aese.8	q0, q2\n\t"
 1052        "beq	L_aes_encrypt_arm32_crypto_round_done_%=\n\t"
 1053        "vld1.32	{q1-q2}, [%[key]]!\n\t"
 1054        "subs	%[nr], %[nr], #2\n\t"
 1055        "aesmc.8	q0, q0\n\t"
 1056        "aese.8	q0, q1\n\t"
 1057        "aesmc.8	q0, q0\n\t"
 1058        "aese.8	q0, q2\n\t"
 1059        "beq	L_aes_encrypt_arm32_crypto_round_done_%=\n\t"
 1060        "vld1.32	{q1-q2}, [%[key]]!\n\t"
 1061        "aesmc.8	q0, q0\n\t"
 1062        "aese.8	q0, q1\n\t"
 1063        "aesmc.8	q0, q0\n\t"
 1064        "aese.8	q0, q2\n\t"
 1065        "\n"
 1066    "L_aes_encrypt_arm32_crypto_round_done_%=:\n\t"
 1067        "vld1.32	{q1}, [%[key]]\n\t"
 1068        "veor.32	q0, q0, q1\n\t"
 1069        "vst1.8	{q0}, [%[outBlock]]\n\t"
 1070#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 1071        : [inBlock] "+r" (inBlock), [outBlock] "+r" (outBlock),
 1072          [key] "+r" (key), [nr] "+r" (nr)
 1073        :
 1074#else
 1075        :
 1076        : [inBlock] "r" (inBlock), [outBlock] "r" (outBlock), [key] "r" (key),
 1077          [nr] "r" (nr)
 1078#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 1079        : "memory", "cc", "q0", "q1", "q2", "q3", "q4"
 1080    );
 1081}
 1082
 1083#endif /* defined(HAVE_AESCCM) || defined(HAVE_AESGCM) ||
 1084        * defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) ||
 1085        * defined(HAVE_AES_CBC) */
 1086#if !defined(WC_AES_BITSLICED) || defined(WOLFSSL_AES_DIRECT) || \
 1087        defined(WOLFSSL_AES_COUNTER)
 1088#ifdef HAVE_AES_DECRYPT
 1089#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 1090WC_OMIT_FRAME_POINTER void AES_decrypt_AARCH32(const byte* inBlock_p,
 1091    byte* outBlock_p, byte* key_p, int nr_p)
 1092#else
 1093WC_OMIT_FRAME_POINTER void AES_decrypt_AARCH32(const byte* inBlock,
 1094    byte* outBlock, byte* key, int nr)
 1095#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 1096{
 1097#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 1098    register const byte* inBlock __asm__ ("r0") = (const byte*)inBlock_p;
 1099    register byte* outBlock __asm__ ("r1") = (byte*)outBlock_p;
 1100    register byte* key __asm__ ("r2") = (byte*)key_p;
 1101    register int nr __asm__ ("r3") = (int)nr_p;
 1102#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 1103
 1104    __asm__ __volatile__ (
 1105        "vld1.8	{q0}, [%[inBlock]]\n\t"
 1106        "vldm	%[key]!, {q1-q4}\n\t"
 1107        "aesd.8	q0, q1\n\t"
 1108        "aesimc.8	q0, q0\n\t"
 1109        "aesd.8	q0, q2\n\t"
 1110        "aesimc.8	q0, q0\n\t"
 1111        "aesd.8	q0, q3\n\t"
 1112        "aesimc.8	q0, q0\n\t"
 1113        "aesd.8	q0, q4\n\t"
 1114        "aesimc.8	q0, q0\n\t"
 1115        "vldm	%[key]!, {q1-q4}\n\t"
 1116        "aesd.8	q0, q1\n\t"
 1117        "aesimc.8	q0, q0\n\t"
 1118        "aesd.8	q0, q2\n\t"
 1119        "aesimc.8	q0, q0\n\t"
 1120        "aesd.8	q0, q3\n\t"
 1121        "aesimc.8	q0, q0\n\t"
 1122        "aesd.8	q0, q4\n\t"
 1123        "aesimc.8	q0, q0\n\t"
 1124        "vld1.32	{q1-q2}, [%[key]]!\n\t"
 1125        "aesd.8	q0, q1\n\t"
 1126        "aesimc.8	q0, q0\n\t"
 1127        "aesd.8	q0, q2\n\t"
 1128        "subs	%[nr], %[nr], #10\n\t"
 1129        "beq	L_aes_decrypt_arm32_crypto_round_done_%=\n\t"
 1130        "vld1.32	{q1-q2}, [%[key]]!\n\t"
 1131        "aesimc.8	q0, q0\n\t"
 1132        "aesd.8	q0, q1\n\t"
 1133        "aesimc.8	q0, q0\n\t"
 1134        "aesd.8	q0, q2\n\t"
 1135        "subs	%[nr], %[nr], #2\n\t"
 1136        "beq	L_aes_decrypt_arm32_crypto_round_done_%=\n\t"
 1137        "vld1.32	{q1-q2}, [%[key]]!\n\t"
 1138        "aesimc.8	q0, q0\n\t"
 1139        "aesd.8	q0, q1\n\t"
 1140        "aesimc.8	q0, q0\n\t"
 1141        "aesd.8	q0, q2\n\t"
 1142        "\n"
 1143    "L_aes_decrypt_arm32_crypto_round_done_%=:\n\t"
 1144        "vld1.32	{q1}, [%[key]]\n\t"
 1145        "veor.32	q0, q0, q1\n\t"
 1146        "vst1.8	{q0}, [%[outBlock]]\n\t"
 1147#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 1148        : [inBlock] "+r" (inBlock), [outBlock] "+r" (outBlock),
 1149          [key] "+r" (key), [nr] "+r" (nr)
 1150        :
 1151#else
 1152        :
 1153        : [inBlock] "r" (inBlock), [outBlock] "r" (outBlock), [key] "r" (key),
 1154          [nr] "r" (nr)
 1155#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 1156        : "memory", "cc", "q0", "q1", "q2", "q3", "q4"
 1157    );
 1158}
 1159
 1160#endif /* HAVE_AES_DECRYPT */
 1161#endif /* !defined(WC_AES_BITSLICED) || defined(WOLFSSL_AES_DIRECT) ||
 1162        * defined(WOLFSSL_AES_COUNTER) */
 1163#ifdef HAVE_AES_ECB
 1164#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 1165WC_OMIT_FRAME_POINTER void AES_encrypt_blocks_AARCH32(const byte* in_p,
 1166    byte* out_p, word32 sz_p, byte* key_p, int nr_p)
 1167#else
 1168WC_OMIT_FRAME_POINTER void AES_encrypt_blocks_AARCH32(const byte* in, byte* out,
 1169    word32 sz, byte* key, int nr)
 1170#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 1171{
 1172#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 1173    register const byte* in __asm__ ("r0") = (const byte*)in_p;
 1174    register byte* out __asm__ ("r1") = (byte*)out_p;
 1175    register word32 sz __asm__ ("r2") = (word32)sz_p;
 1176    register byte* key __asm__ ("r3") = (byte*)key_p;
 1177    register int nr __asm__ ("r12") = (int)nr_p;
 1178#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 1179
 1180    __asm__ __volatile__ (
 1181        "push	{%[nr]}\n\t"
 1182        "ldr	r12, [sp]\n\t"
 1183        "vldm.32	%[key]!, {q0-q7}\n\t"
 1184        "lsr	%[sz], %[sz], #4\n\t"
 1185        "cmp	r12, #12\n\t"
 1186        "blt	L_aes_encrypt_blocks_arm32_crypto_start_128_%=\n\t"
 1187        "bgt	L_aes_encrypt_blocks_arm32_crypto_start_256_%=\n\t"
 1188        /* AES_ECB_192 */
 1189#ifndef NO_AES_192
 1190        "vld1.32	{q8-q9}, [%[key]]!\n\t"
 1191        "cmp	%[sz], #1\n\t"
 1192        "beq	L_aes_encrypt_blocks_arm32_crypto_192_start_1_%=\n\t"
 1193        "\n"
 1194    "L_aes_encrypt_blocks_arm32_crypto_192_start_4_%=:\n\t"
 1195        "cmp	%[sz], #4\n\t"
 1196        "blt	L_aes_encrypt_blocks_arm32_crypto_192_start_2_%=\n\t"
 1197        "vldm.8	%[in]!, {q12-q15}\n\t"
 1198        "aese.8	q12, q0\n\t"
 1199        "aesmc.8	q12, q12\n\t"
 1200        "aese.8	q13, q0\n\t"
 1201        "aesmc.8	q13, q13\n\t"
 1202        "aese.8	q14, q0\n\t"
 1203        "aesmc.8	q14, q14\n\t"
 1204        "aese.8	q15, q0\n\t"
 1205        "aesmc.8	q15, q15\n\t"
 1206        "aese.8	q12, q1\n\t"
 1207        "aesmc.8	q12, q12\n\t"
 1208        "aese.8	q13, q1\n\t"
 1209        "aesmc.8	q13, q13\n\t"
 1210        "aese.8	q14, q1\n\t"
 1211        "aesmc.8	q14, q14\n\t"
 1212        "aese.8	q15, q1\n\t"
 1213        "aesmc.8	q15, q15\n\t"
 1214        "aese.8	q12, q2\n\t"
 1215        "aesmc.8	q12, q12\n\t"
 1216        "aese.8	q13, q2\n\t"
 1217        "aesmc.8	q13, q13\n\t"
 1218        "aese.8	q14, q2\n\t"
 1219        "aesmc.8	q14, q14\n\t"
 1220        "aese.8	q15, q2\n\t"
 1221        "aesmc.8	q15, q15\n\t"
 1222        "aese.8	q12, q3\n\t"
 1223        "aesmc.8	q12, q12\n\t"
 1224        "aese.8	q13, q3\n\t"
 1225        "aesmc.8	q13, q13\n\t"
 1226        "aese.8	q14, q3\n\t"
 1227        "aesmc.8	q14, q14\n\t"
 1228        "aese.8	q15, q3\n\t"
 1229        "aesmc.8	q15, q15\n\t"
 1230        "aese.8	q12, q4\n\t"
 1231        "aesmc.8	q12, q12\n\t"
 1232        "aese.8	q13, q4\n\t"
 1233        "aesmc.8	q13, q13\n\t"
 1234        "aese.8	q14, q4\n\t"
 1235        "aesmc.8	q14, q14\n\t"
 1236        "aese.8	q15, q4\n\t"
 1237        "aesmc.8	q15, q15\n\t"
 1238        "aese.8	q12, q5\n\t"
 1239        "aesmc.8	q12, q12\n\t"
 1240        "aese.8	q13, q5\n\t"
 1241        "aesmc.8	q13, q13\n\t"
 1242        "aese.8	q14, q5\n\t"
 1243        "aesmc.8	q14, q14\n\t"
 1244        "aese.8	q15, q5\n\t"
 1245        "aesmc.8	q15, q15\n\t"
 1246        "aese.8	q12, q6\n\t"
 1247        "aesmc.8	q12, q12\n\t"
 1248        "aese.8	q13, q6\n\t"
 1249        "aesmc.8	q13, q13\n\t"
 1250        "aese.8	q14, q6\n\t"
 1251        "aesmc.8	q14, q14\n\t"
 1252        "aese.8	q15, q6\n\t"
 1253        "aesmc.8	q15, q15\n\t"
 1254        "aese.8	q12, q7\n\t"
 1255        "aesmc.8	q12, q12\n\t"
 1256        "aese.8	q13, q7\n\t"
 1257        "aesmc.8	q13, q13\n\t"
 1258        "aese.8	q14, q7\n\t"
 1259        "aesmc.8	q14, q14\n\t"
 1260        "aese.8	q15, q7\n\t"
 1261        "aesmc.8	q15, q15\n\t"
 1262        "aese.8	q12, q8\n\t"
 1263        "aesmc.8	q12, q12\n\t"
 1264        "aese.8	q13, q8\n\t"
 1265        "aesmc.8	q13, q13\n\t"
 1266        "aese.8	q14, q8\n\t"
 1267        "aesmc.8	q14, q14\n\t"
 1268        "aese.8	q15, q8\n\t"
 1269        "aesmc.8	q15, q15\n\t"
 1270        "vld1.32	{q10}, [%[key]]!\n\t"
 1271        "aese.8	q12, q9\n\t"
 1272        "aesmc.8	q12, q12\n\t"
 1273        "aese.8	q13, q9\n\t"
 1274        "aesmc.8	q13, q13\n\t"
 1275        "aese.8	q14, q9\n\t"
 1276        "aesmc.8	q14, q14\n\t"
 1277        "aese.8	q15, q9\n\t"
 1278        "aesmc.8	q15, q15\n\t"
 1279        "vld1.32	{q11}, [%[key]]!\n\t"
 1280        "aese.8	q12, q10\n\t"
 1281        "aesmc.8	q12, q12\n\t"
 1282        "aese.8	q13, q10\n\t"
 1283        "aesmc.8	q13, q13\n\t"
 1284        "aese.8	q14, q10\n\t"
 1285        "aesmc.8	q14, q14\n\t"
 1286        "aese.8	q15, q10\n\t"
 1287        "aesmc.8	q15, q15\n\t"
 1288        "vld1.32	{q10}, [%[key]]!\n\t"
 1289        "aese.8	q12, q11\n\t"
 1290        "veor.32	q12, q12, q10\n\t"
 1291        "aese.8	q13, q11\n\t"
 1292        "veor.32	q13, q13, q10\n\t"
 1293        "aese.8	q14, q11\n\t"
 1294        "veor.32	q14, q14, q10\n\t"
 1295        "aese.8	q15, q11\n\t"
 1296        "veor.32	q15, q15, q10\n\t"
 1297        "sub	%[key], %[key], #48\n\t"
 1298        "sub	%[sz], %[sz], #4\n\t"
 1299        "vstm.8	%[out]!, {q12-q15}\n\t"
 1300        "cmp	%[sz], #4\n\t"
 1301        "bge	L_aes_encrypt_blocks_arm32_crypto_192_start_4_%=\n\t"
 1302        "\n"
 1303    "L_aes_encrypt_blocks_arm32_crypto_192_start_2_%=:\n\t"
 1304        "cmp	%[sz], #2\n\t"
 1305        "blt	L_aes_encrypt_blocks_arm32_crypto_192_start_1_%=\n\t"
 1306        "vld1.8	{q12-q13}, [%[in]]!\n\t"
 1307        "aese.8	q12, q0\n\t"
 1308        "aesmc.8	q12, q12\n\t"
 1309        "aese.8	q13, q0\n\t"
 1310        "aesmc.8	q13, q13\n\t"
 1311        "aese.8	q12, q1\n\t"
 1312        "aesmc.8	q12, q12\n\t"
 1313        "aese.8	q13, q1\n\t"
 1314        "aesmc.8	q13, q13\n\t"
 1315        "aese.8	q12, q2\n\t"
 1316        "aesmc.8	q12, q12\n\t"
 1317        "aese.8	q13, q2\n\t"
 1318        "aesmc.8	q13, q13\n\t"
 1319        "aese.8	q12, q3\n\t"
 1320        "aesmc.8	q12, q12\n\t"
 1321        "aese.8	q13, q3\n\t"
 1322        "aesmc.8	q13, q13\n\t"
 1323        "aese.8	q12, q4\n\t"
 1324        "aesmc.8	q12, q12\n\t"
 1325        "aese.8	q13, q4\n\t"
 1326        "aesmc.8	q13, q13\n\t"
 1327        "aese.8	q12, q5\n\t"
 1328        "aesmc.8	q12, q12\n\t"
 1329        "aese.8	q13, q5\n\t"
 1330        "aesmc.8	q13, q13\n\t"
 1331        "aese.8	q12, q6\n\t"
 1332        "aesmc.8	q12, q12\n\t"
 1333        "aese.8	q13, q6\n\t"
 1334        "aesmc.8	q13, q13\n\t"
 1335        "aese.8	q12, q7\n\t"
 1336        "aesmc.8	q12, q12\n\t"
 1337        "aese.8	q13, q7\n\t"
 1338        "aesmc.8	q13, q13\n\t"
 1339        "aese.8	q12, q8\n\t"
 1340        "aesmc.8	q12, q12\n\t"
 1341        "aese.8	q13, q8\n\t"
 1342        "aesmc.8	q13, q13\n\t"
 1343        "vld1.32	{q10}, [%[key]]!\n\t"
 1344        "aese.8	q12, q9\n\t"
 1345        "aesmc.8	q12, q12\n\t"
 1346        "aese.8	q13, q9\n\t"
 1347        "aesmc.8	q13, q13\n\t"
 1348        "vld1.32	{q11}, [%[key]]!\n\t"
 1349        "aese.8	q12, q10\n\t"
 1350        "aesmc.8	q12, q12\n\t"
 1351        "aese.8	q13, q10\n\t"
 1352        "aesmc.8	q13, q13\n\t"
 1353        "vld1.32	{q10}, [%[key]]!\n\t"
 1354        "aese.8	q12, q11\n\t"
 1355        "veor.32	q12, q12, q10\n\t"
 1356        "aese.8	q13, q11\n\t"
 1357        "veor.32	q13, q13, q10\n\t"
 1358        "sub	%[key], %[key], #48\n\t"
 1359        "sub	%[sz], %[sz], #2\n\t"
 1360        "vst1.8	{q12-q13}, [%[out]]!\n\t"
 1361        "\n"
 1362    "L_aes_encrypt_blocks_arm32_crypto_192_start_1_%=:\n\t"
 1363        "cmp	%[sz], #0\n\t"
 1364        "beq	L_aes_encrypt_blocks_arm32_crypto_192_done_%=\n\t"
 1365        "vld1.8	{q12}, [%[in]]!\n\t"
 1366        "aese.8	q12, q0\n\t"
 1367        "aesmc.8	q12, q12\n\t"
 1368        "aese.8	q12, q1\n\t"
 1369        "aesmc.8	q12, q12\n\t"
 1370        "aese.8	q12, q2\n\t"
 1371        "aesmc.8	q12, q12\n\t"
 1372        "aese.8	q12, q3\n\t"
 1373        "aesmc.8	q12, q12\n\t"
 1374        "aese.8	q12, q4\n\t"
 1375        "aesmc.8	q12, q12\n\t"
 1376        "aese.8	q12, q5\n\t"
 1377        "aesmc.8	q12, q12\n\t"
 1378        "aese.8	q12, q6\n\t"
 1379        "aesmc.8	q12, q12\n\t"
 1380        "aese.8	q12, q7\n\t"
 1381        "aesmc.8	q12, q12\n\t"
 1382        "aese.8	q12, q8\n\t"
 1383        "aesmc.8	q12, q12\n\t"
 1384        "vld1.32	{q10}, [%[key]]!\n\t"
 1385        "aese.8	q12, q9\n\t"
 1386        "aesmc.8	q12, q12\n\t"
 1387        "vld1.32	{q11}, [%[key]]!\n\t"
 1388        "aese.8	q12, q10\n\t"
 1389        "aesmc.8	q12, q12\n\t"
 1390        "vld1.32	{q10}, [%[key]]!\n\t"
 1391        "aese.8	q12, q11\n\t"
 1392        "veor.32	q12, q12, q10\n\t"
 1393        "sub	%[key], %[key], #48\n\t"
 1394        "vst1.8	{q12}, [%[out]]!\n\t"
 1395        "\n"
 1396    "L_aes_encrypt_blocks_arm32_crypto_192_done_%=:\n\t"
 1397#endif /* !NO_AES_192 */
 1398        "b	L_aes_encrypt_blocks_arm32_crypto_done_%=\n\t"
 1399        /* AES_ECB_256 */
 1400        "\n"
 1401    "L_aes_encrypt_blocks_arm32_crypto_start_256_%=:\n\t"
 1402#ifndef NO_AES_256
 1403        "vld1.32	{q8-q9}, [%[key]]!\n\t"
 1404        "cmp	%[sz], #1\n\t"
 1405        "beq	L_aes_encrypt_blocks_arm32_crypto_256_start_1_%=\n\t"
 1406        "\n"
 1407    "L_aes_encrypt_blocks_arm32_crypto_256_start_4_%=:\n\t"
 1408        "cmp	%[sz], #4\n\t"
 1409        "blt	L_aes_encrypt_blocks_arm32_crypto_256_start_2_%=\n\t"
 1410        "vldm.8	%[in]!, {q12-q15}\n\t"
 1411        "aese.8	q12, q0\n\t"
 1412        "aesmc.8	q12, q12\n\t"
 1413        "aese.8	q13, q0\n\t"
 1414        "aesmc.8	q13, q13\n\t"
 1415        "aese.8	q14, q0\n\t"
 1416        "aesmc.8	q14, q14\n\t"
 1417        "aese.8	q15, q0\n\t"
 1418        "aesmc.8	q15, q15\n\t"
 1419        "aese.8	q12, q1\n\t"
 1420        "aesmc.8	q12, q12\n\t"
 1421        "aese.8	q13, q1\n\t"
 1422        "aesmc.8	q13, q13\n\t"
 1423        "aese.8	q14, q1\n\t"
 1424        "aesmc.8	q14, q14\n\t"
 1425        "aese.8	q15, q1\n\t"
 1426        "aesmc.8	q15, q15\n\t"
 1427        "aese.8	q12, q2\n\t"
 1428        "aesmc.8	q12, q12\n\t"
 1429        "aese.8	q13, q2\n\t"
 1430        "aesmc.8	q13, q13\n\t"
 1431        "aese.8	q14, q2\n\t"
 1432        "aesmc.8	q14, q14\n\t"
 1433        "aese.8	q15, q2\n\t"
 1434        "aesmc.8	q15, q15\n\t"
 1435        "aese.8	q12, q3\n\t"
 1436        "aesmc.8	q12, q12\n\t"
 1437        "aese.8	q13, q3\n\t"
 1438        "aesmc.8	q13, q13\n\t"
 1439        "aese.8	q14, q3\n\t"
 1440        "aesmc.8	q14, q14\n\t"
 1441        "aese.8	q15, q3\n\t"
 1442        "aesmc.8	q15, q15\n\t"
 1443        "aese.8	q12, q4\n\t"
 1444        "aesmc.8	q12, q12\n\t"
 1445        "aese.8	q13, q4\n\t"
 1446        "aesmc.8	q13, q13\n\t"
 1447        "aese.8	q14, q4\n\t"
 1448        "aesmc.8	q14, q14\n\t"
 1449        "aese.8	q15, q4\n\t"
 1450        "aesmc.8	q15, q15\n\t"
 1451        "aese.8	q12, q5\n\t"
 1452        "aesmc.8	q12, q12\n\t"
 1453        "aese.8	q13, q5\n\t"
 1454        "aesmc.8	q13, q13\n\t"
 1455        "aese.8	q14, q5\n\t"
 1456        "aesmc.8	q14, q14\n\t"
 1457        "aese.8	q15, q5\n\t"
 1458        "aesmc.8	q15, q15\n\t"
 1459        "aese.8	q12, q6\n\t"
 1460        "aesmc.8	q12, q12\n\t"
 1461        "aese.8	q13, q6\n\t"
 1462        "aesmc.8	q13, q13\n\t"
 1463        "aese.8	q14, q6\n\t"
 1464        "aesmc.8	q14, q14\n\t"
 1465        "aese.8	q15, q6\n\t"
 1466        "aesmc.8	q15, q15\n\t"
 1467        "aese.8	q12, q7\n\t"
 1468        "aesmc.8	q12, q12\n\t"
 1469        "aese.8	q13, q7\n\t"
 1470        "aesmc.8	q13, q13\n\t"
 1471        "aese.8	q14, q7\n\t"
 1472        "aesmc.8	q14, q14\n\t"
 1473        "aese.8	q15, q7\n\t"
 1474        "aesmc.8	q15, q15\n\t"
 1475        "aese.8	q12, q8\n\t"
 1476        "aesmc.8	q12, q12\n\t"
 1477        "aese.8	q13, q8\n\t"
 1478        "aesmc.8	q13, q13\n\t"
 1479        "aese.8	q14, q8\n\t"
 1480        "aesmc.8	q14, q14\n\t"
 1481        "aese.8	q15, q8\n\t"
 1482        "aesmc.8	q15, q15\n\t"
 1483        "vld1.32	{q10}, [%[key]]!\n\t"
 1484        "aese.8	q12, q9\n\t"
 1485        "aesmc.8	q12, q12\n\t"
 1486        "aese.8	q13, q9\n\t"
 1487        "aesmc.8	q13, q13\n\t"
 1488        "aese.8	q14, q9\n\t"
 1489        "aesmc.8	q14, q14\n\t"
 1490        "aese.8	q15, q9\n\t"
 1491        "aesmc.8	q15, q15\n\t"
 1492        "vld1.32	{q11}, [%[key]]!\n\t"
 1493        "aese.8	q12, q10\n\t"
 1494        "aesmc.8	q12, q12\n\t"
 1495        "aese.8	q13, q10\n\t"
 1496        "aesmc.8	q13, q13\n\t"
 1497        "aese.8	q14, q10\n\t"
 1498        "aesmc.8	q14, q14\n\t"
 1499        "aese.8	q15, q10\n\t"
 1500        "aesmc.8	q15, q15\n\t"
 1501        "vld1.32	{q10}, [%[key]]!\n\t"
 1502        "aese.8	q12, q11\n\t"
 1503        "aesmc.8	q12, q12\n\t"
 1504        "aese.8	q13, q11\n\t"
 1505        "aesmc.8	q13, q13\n\t"
 1506        "aese.8	q14, q11\n\t"
 1507        "aesmc.8	q14, q14\n\t"
 1508        "aese.8	q15, q11\n\t"
 1509        "aesmc.8	q15, q15\n\t"
 1510        "vld1.32	{q11}, [%[key]]!\n\t"
 1511        "aese.8	q12, q10\n\t"
 1512        "aesmc.8	q12, q12\n\t"
 1513        "aese.8	q13, q10\n\t"
 1514        "aesmc.8	q13, q13\n\t"
 1515        "aese.8	q14, q10\n\t"
 1516        "aesmc.8	q14, q14\n\t"
 1517        "aese.8	q15, q10\n\t"
 1518        "aesmc.8	q15, q15\n\t"
 1519        "vld1.32	{q10}, [%[key]]!\n\t"
 1520        "aese.8	q12, q11\n\t"
 1521        "veor.32	q12, q12, q10\n\t"
 1522        "aese.8	q13, q11\n\t"
 1523        "veor.32	q13, q13, q10\n\t"
 1524        "aese.8	q14, q11\n\t"
 1525        "veor.32	q14, q14, q10\n\t"
 1526        "aese.8	q15, q11\n\t"
 1527        "veor.32	q15, q15, q10\n\t"
 1528        "sub	%[key], %[key], #0x50\n\t"
 1529        "sub	%[sz], %[sz], #4\n\t"
 1530        "vstm.8	%[out]!, {q12-q15}\n\t"
 1531        "cmp	%[sz], #4\n\t"
 1532        "bge	L_aes_encrypt_blocks_arm32_crypto_256_start_4_%=\n\t"
 1533        "\n"
 1534    "L_aes_encrypt_blocks_arm32_crypto_256_start_2_%=:\n\t"
 1535        "cmp	%[sz], #2\n\t"
 1536        "blt	L_aes_encrypt_blocks_arm32_crypto_256_start_1_%=\n\t"
 1537        "vld1.8	{q12-q13}, [%[in]]!\n\t"
 1538        "aese.8	q12, q0\n\t"
 1539        "aesmc.8	q12, q12\n\t"
 1540        "aese.8	q13, q0\n\t"
 1541        "aesmc.8	q13, q13\n\t"
 1542        "aese.8	q12, q1\n\t"
 1543        "aesmc.8	q12, q12\n\t"
 1544        "aese.8	q13, q1\n\t"
 1545        "aesmc.8	q13, q13\n\t"
 1546        "aese.8	q12, q2\n\t"
 1547        "aesmc.8	q12, q12\n\t"
 1548        "aese.8	q13, q2\n\t"
 1549        "aesmc.8	q13, q13\n\t"
 1550        "aese.8	q12, q3\n\t"
 1551        "aesmc.8	q12, q12\n\t"
 1552        "aese.8	q13, q3\n\t"
 1553        "aesmc.8	q13, q13\n\t"
 1554        "aese.8	q12, q4\n\t"
 1555        "aesmc.8	q12, q12\n\t"
 1556        "aese.8	q13, q4\n\t"
 1557        "aesmc.8	q13, q13\n\t"
 1558        "aese.8	q12, q5\n\t"
 1559        "aesmc.8	q12, q12\n\t"
 1560        "aese.8	q13, q5\n\t"
 1561        "aesmc.8	q13, q13\n\t"
 1562        "aese.8	q12, q6\n\t"
 1563        "aesmc.8	q12, q12\n\t"
 1564        "aese.8	q13, q6\n\t"
 1565        "aesmc.8	q13, q13\n\t"
 1566        "aese.8	q12, q7\n\t"
 1567        "aesmc.8	q12, q12\n\t"
 1568        "aese.8	q13, q7\n\t"
 1569        "aesmc.8	q13, q13\n\t"
 1570        "aese.8	q12, q8\n\t"
 1571        "aesmc.8	q12, q12\n\t"
 1572        "aese.8	q13, q8\n\t"
 1573        "aesmc.8	q13, q13\n\t"
 1574        "vld1.32	{q10}, [%[key]]!\n\t"
 1575        "aese.8	q12, q9\n\t"
 1576        "aesmc.8	q12, q12\n\t"
 1577        "aese.8	q13, q9\n\t"
 1578        "aesmc.8	q13, q13\n\t"
 1579        "vld1.32	{q11}, [%[key]]!\n\t"
 1580        "aese.8	q12, q10\n\t"
 1581        "aesmc.8	q12, q12\n\t"
 1582        "aese.8	q13, q10\n\t"
 1583        "aesmc.8	q13, q13\n\t"
 1584        "vld1.32	{q10}, [%[key]]!\n\t"
 1585        "aese.8	q12, q11\n\t"
 1586        "aesmc.8	q12, q12\n\t"
 1587        "aese.8	q13, q11\n\t"
 1588        "aesmc.8	q13, q13\n\t"
 1589        "vld1.32	{q11}, [%[key]]!\n\t"
 1590        "aese.8	q12, q10\n\t"
 1591        "aesmc.8	q12, q12\n\t"
 1592        "aese.8	q13, q10\n\t"
 1593        "aesmc.8	q13, q13\n\t"
 1594        "vld1.32	{q10}, [%[key]]!\n\t"
 1595        "aese.8	q12, q11\n\t"
 1596        "veor.32	q12, q12, q10\n\t"
 1597        "aese.8	q13, q11\n\t"
 1598        "veor.32	q13, q13, q10\n\t"
 1599        "sub	%[key], %[key], #0x50\n\t"
 1600        "sub	%[sz], %[sz], #2\n\t"
 1601        "vst1.8	{q12-q13}, [%[out]]!\n\t"
 1602        "\n"
 1603    "L_aes_encrypt_blocks_arm32_crypto_256_start_1_%=:\n\t"
 1604        "cmp	%[sz], #0\n\t"
 1605        "beq	L_aes_encrypt_blocks_arm32_crypto_256_done_%=\n\t"
 1606        "vld1.8	{q12}, [%[in]]!\n\t"
 1607        "aese.8	q12, q0\n\t"
 1608        "aesmc.8	q12, q12\n\t"
 1609        "aese.8	q12, q1\n\t"
 1610        "aesmc.8	q12, q12\n\t"
 1611        "aese.8	q12, q2\n\t"
 1612        "aesmc.8	q12, q12\n\t"
 1613        "aese.8	q12, q3\n\t"
 1614        "aesmc.8	q12, q12\n\t"
 1615        "aese.8	q12, q4\n\t"
 1616        "aesmc.8	q12, q12\n\t"
 1617        "aese.8	q12, q5\n\t"
 1618        "aesmc.8	q12, q12\n\t"
 1619        "aese.8	q12, q6\n\t"
 1620        "aesmc.8	q12, q12\n\t"
 1621        "aese.8	q12, q7\n\t"
 1622        "aesmc.8	q12, q12\n\t"
 1623        "aese.8	q12, q8\n\t"
 1624        "aesmc.8	q12, q12\n\t"
 1625        "vld1.32	{q10}, [%[key]]!\n\t"
 1626        "aese.8	q12, q9\n\t"
 1627        "aesmc.8	q12, q12\n\t"
 1628        "vld1.32	{q11}, [%[key]]!\n\t"
 1629        "aese.8	q12, q10\n\t"
 1630        "aesmc.8	q12, q12\n\t"
 1631        "vld1.32	{q10}, [%[key]]!\n\t"
 1632        "aese.8	q12, q11\n\t"
 1633        "aesmc.8	q12, q12\n\t"
 1634        "vld1.32	{q11}, [%[key]]!\n\t"
 1635        "aese.8	q12, q10\n\t"
 1636        "aesmc.8	q12, q12\n\t"
 1637        "vld1.32	{q10}, [%[key]]!\n\t"
 1638        "aese.8	q12, q11\n\t"
 1639        "veor.32	q12, q12, q10\n\t"
 1640        "sub	%[key], %[key], #0x50\n\t"
 1641        "vst1.8	{q12}, [%[out]]!\n\t"
 1642        "\n"
 1643    "L_aes_encrypt_blocks_arm32_crypto_256_done_%=:\n\t"
 1644#endif /* !NO_AES_256 */
 1645        "b	L_aes_encrypt_blocks_arm32_crypto_done_%=\n\t"
 1646        /* AES_ECB_128 */
 1647        "\n"
 1648    "L_aes_encrypt_blocks_arm32_crypto_start_128_%=:\n\t"
 1649#ifndef NO_AES_128
 1650        "vldm.32	%[key]!, {q8-q10}\n\t"
 1651        "cmp	%[sz], #1\n\t"
 1652        "beq	L_aes_encrypt_blocks_arm32_crypto_128_start_1_%=\n\t"
 1653        "\n"
 1654    "L_aes_encrypt_blocks_arm32_crypto_128_start_4_%=:\n\t"
 1655        "cmp	%[sz], #4\n\t"
 1656        "blt	L_aes_encrypt_blocks_arm32_crypto_128_start_2_%=\n\t"
 1657        "vldm.8	%[in]!, {q12-q15}\n\t"
 1658        "aese.8	q12, q0\n\t"
 1659        "aesmc.8	q12, q12\n\t"
 1660        "aese.8	q13, q0\n\t"
 1661        "aesmc.8	q13, q13\n\t"
 1662        "aese.8	q14, q0\n\t"
 1663        "aesmc.8	q14, q14\n\t"
 1664        "aese.8	q15, q0\n\t"
 1665        "aesmc.8	q15, q15\n\t"
 1666        "aese.8	q12, q1\n\t"
 1667        "aesmc.8	q12, q12\n\t"
 1668        "aese.8	q13, q1\n\t"
 1669        "aesmc.8	q13, q13\n\t"
 1670        "aese.8	q14, q1\n\t"
 1671        "aesmc.8	q14, q14\n\t"
 1672        "aese.8	q15, q1\n\t"
 1673        "aesmc.8	q15, q15\n\t"
 1674        "aese.8	q12, q2\n\t"
 1675        "aesmc.8	q12, q12\n\t"
 1676        "aese.8	q13, q2\n\t"
 1677        "aesmc.8	q13, q13\n\t"
 1678        "aese.8	q14, q2\n\t"
 1679        "aesmc.8	q14, q14\n\t"
 1680        "aese.8	q15, q2\n\t"
 1681        "aesmc.8	q15, q15\n\t"
 1682        "aese.8	q12, q3\n\t"
 1683        "aesmc.8	q12, q12\n\t"
 1684        "aese.8	q13, q3\n\t"
 1685        "aesmc.8	q13, q13\n\t"
 1686        "aese.8	q14, q3\n\t"
 1687        "aesmc.8	q14, q14\n\t"
 1688        "aese.8	q15, q3\n\t"
 1689        "aesmc.8	q15, q15\n\t"
 1690        "aese.8	q12, q4\n\t"
 1691        "aesmc.8	q12, q12\n\t"
 1692        "aese.8	q13, q4\n\t"
 1693        "aesmc.8	q13, q13\n\t"
 1694        "aese.8	q14, q4\n\t"
 1695        "aesmc.8	q14, q14\n\t"
 1696        "aese.8	q15, q4\n\t"
 1697        "aesmc.8	q15, q15\n\t"
 1698        "aese.8	q12, q5\n\t"
 1699        "aesmc.8	q12, q12\n\t"
 1700        "aese.8	q13, q5\n\t"
 1701        "aesmc.8	q13, q13\n\t"
 1702        "aese.8	q14, q5\n\t"
 1703        "aesmc.8	q14, q14\n\t"
 1704        "aese.8	q15, q5\n\t"
 1705        "aesmc.8	q15, q15\n\t"
 1706        "aese.8	q12, q6\n\t"
 1707        "aesmc.8	q12, q12\n\t"
 1708        "aese.8	q13, q6\n\t"
 1709        "aesmc.8	q13, q13\n\t"
 1710        "aese.8	q14, q6\n\t"
 1711        "aesmc.8	q14, q14\n\t"
 1712        "aese.8	q15, q6\n\t"
 1713        "aesmc.8	q15, q15\n\t"
 1714        "aese.8	q12, q7\n\t"
 1715        "aesmc.8	q12, q12\n\t"
 1716        "aese.8	q13, q7\n\t"
 1717        "aesmc.8	q13, q13\n\t"
 1718        "aese.8	q14, q7\n\t"
 1719        "aesmc.8	q14, q14\n\t"
 1720        "aese.8	q15, q7\n\t"
 1721        "aesmc.8	q15, q15\n\t"
 1722        "aese.8	q12, q8\n\t"
 1723        "aesmc.8	q12, q12\n\t"
 1724        "aese.8	q13, q8\n\t"
 1725        "aesmc.8	q13, q13\n\t"
 1726        "aese.8	q14, q8\n\t"
 1727        "aesmc.8	q14, q14\n\t"
 1728        "aese.8	q15, q8\n\t"
 1729        "aesmc.8	q15, q15\n\t"
 1730        "aese.8	q12, q9\n\t"
 1731        "veor.32	q12, q12, q10\n\t"
 1732        "aese.8	q13, q9\n\t"
 1733        "veor.32	q13, q13, q10\n\t"
 1734        "aese.8	q14, q9\n\t"
 1735        "veor.32	q14, q14, q10\n\t"
 1736        "aese.8	q15, q9\n\t"
 1737        "veor.32	q15, q15, q10\n\t"
 1738        "sub	%[sz], %[sz], #4\n\t"
 1739        "vstm.8	%[out]!, {q12-q15}\n\t"
 1740        "cmp	%[sz], #4\n\t"
 1741        "bge	L_aes_encrypt_blocks_arm32_crypto_128_start_4_%=\n\t"
 1742        "\n"
 1743    "L_aes_encrypt_blocks_arm32_crypto_128_start_2_%=:\n\t"
 1744        "cmp	%[sz], #2\n\t"
 1745        "blt	L_aes_encrypt_blocks_arm32_crypto_128_start_1_%=\n\t"
 1746        "vld1.8	{q12-q13}, [%[in]]!\n\t"
 1747        "aese.8	q12, q0\n\t"
 1748        "aesmc.8	q12, q12\n\t"
 1749        "aese.8	q13, q0\n\t"
 1750        "aesmc.8	q13, q13\n\t"
 1751        "aese.8	q12, q1\n\t"
 1752        "aesmc.8	q12, q12\n\t"
 1753        "aese.8	q13, q1\n\t"
 1754        "aesmc.8	q13, q13\n\t"
 1755        "aese.8	q12, q2\n\t"
 1756        "aesmc.8	q12, q12\n\t"
 1757        "aese.8	q13, q2\n\t"
 1758        "aesmc.8	q13, q13\n\t"
 1759        "aese.8	q12, q3\n\t"
 1760        "aesmc.8	q12, q12\n\t"
 1761        "aese.8	q13, q3\n\t"
 1762        "aesmc.8	q13, q13\n\t"
 1763        "aese.8	q12, q4\n\t"
 1764        "aesmc.8	q12, q12\n\t"
 1765        "aese.8	q13, q4\n\t"
 1766        "aesmc.8	q13, q13\n\t"
 1767        "aese.8	q12, q5\n\t"
 1768        "aesmc.8	q12, q12\n\t"
 1769        "aese.8	q13, q5\n\t"
 1770        "aesmc.8	q13, q13\n\t"
 1771        "aese.8	q12, q6\n\t"
 1772        "aesmc.8	q12, q12\n\t"
 1773        "aese.8	q13, q6\n\t"
 1774        "aesmc.8	q13, q13\n\t"
 1775        "aese.8	q12, q7\n\t"
 1776        "aesmc.8	q12, q12\n\t"
 1777        "aese.8	q13, q7\n\t"
 1778        "aesmc.8	q13, q13\n\t"
 1779        "aese.8	q12, q8\n\t"
 1780        "aesmc.8	q12, q12\n\t"
 1781        "aese.8	q13, q8\n\t"
 1782        "aesmc.8	q13, q13\n\t"
 1783        "aese.8	q12, q9\n\t"
 1784        "veor.32	q12, q12, q10\n\t"
 1785        "aese.8	q13, q9\n\t"
 1786        "veor.32	q13, q13, q10\n\t"
 1787        "sub	%[sz], %[sz], #2\n\t"
 1788        "vst1.8	{q12-q13}, [%[out]]!\n\t"
 1789        "\n"
 1790    "L_aes_encrypt_blocks_arm32_crypto_128_start_1_%=:\n\t"
 1791        "cmp	%[sz], #0\n\t"
 1792        "beq	L_aes_encrypt_blocks_arm32_crypto_128_done_%=\n\t"
 1793        "vld1.8	{q12}, [%[in]]!\n\t"
 1794        "aese.8	q12, q0\n\t"
 1795        "aesmc.8	q12, q12\n\t"
 1796        "aese.8	q12, q1\n\t"
 1797        "aesmc.8	q12, q12\n\t"
 1798        "aese.8	q12, q2\n\t"
 1799        "aesmc.8	q12, q12\n\t"
 1800        "aese.8	q12, q3\n\t"
 1801        "aesmc.8	q12, q12\n\t"
 1802        "aese.8	q12, q4\n\t"
 1803        "aesmc.8	q12, q12\n\t"
 1804        "aese.8	q12, q5\n\t"
 1805        "aesmc.8	q12, q12\n\t"
 1806        "aese.8	q12, q6\n\t"
 1807        "aesmc.8	q12, q12\n\t"
 1808        "aese.8	q12, q7\n\t"
 1809        "aesmc.8	q12, q12\n\t"
 1810        "aese.8	q12, q8\n\t"
 1811        "aesmc.8	q12, q12\n\t"
 1812        "aese.8	q12, q9\n\t"
 1813        "veor.32	q12, q12, q10\n\t"
 1814        "vst1.8	{q12}, [%[out]]!\n\t"
 1815        "\n"
 1816    "L_aes_encrypt_blocks_arm32_crypto_128_done_%=:\n\t"
 1817#endif /* !NO_AES_128 */
 1818        "\n"
 1819    "L_aes_encrypt_blocks_arm32_crypto_done_%=:\n\t"
 1820        "pop	{%[nr]}\n\t"
 1821#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 1822        : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [key] "+r" (key),
 1823          [nr] "+r" (nr)
 1824        :
 1825#else
 1826        :
 1827        : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [key] "r" (key),
 1828          [nr] "r" (nr)
 1829#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 1830        : "memory", "cc", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8",
 1831            "q9", "q10", "q11", "q12", "q13", "q14", "q15"
 1832    );
 1833}
 1834
 1835#ifdef HAVE_AES_DECRYPT
 1836#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 1837WC_OMIT_FRAME_POINTER void AES_decrypt_blocks_AARCH32(const byte* in_p,
 1838    byte* out_p, word32 sz_p, byte* key_p, int nr_p)
 1839#else
 1840WC_OMIT_FRAME_POINTER void AES_decrypt_blocks_AARCH32(const byte* in, byte* out,
 1841    word32 sz, byte* key, int nr)
 1842#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 1843{
 1844#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 1845    register const byte* in __asm__ ("r0") = (const byte*)in_p;
 1846    register byte* out __asm__ ("r1") = (byte*)out_p;
 1847    register word32 sz __asm__ ("r2") = (word32)sz_p;
 1848    register byte* key __asm__ ("r3") = (byte*)key_p;
 1849    register int nr __asm__ ("r12") = (int)nr_p;
 1850#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 1851
 1852    __asm__ __volatile__ (
 1853        "push	{%[nr]}\n\t"
 1854        "ldr	r12, [sp]\n\t"
 1855        "vldm.32	%[key]!, {q0-q7}\n\t"
 1856        "lsr	%[sz], %[sz], #4\n\t"
 1857        "cmp	r12, #12\n\t"
 1858        "blt	L_aes_decrypt_blocks_arm32_crypto_start_128_%=\n\t"
 1859        "bgt	L_aes_decrypt_blocks_arm32_crypto_start_256_%=\n\t"
 1860        /* AES_ECB_192 */
 1861#ifndef NO_AES_192
 1862        "vld1.32	{q8-q9}, [%[key]]!\n\t"
 1863        "cmp	%[sz], #1\n\t"
 1864        "beq	L_aes_decrypt_blocks_arm32_crypto_192_start_1_%=\n\t"
 1865        "cmp	%[sz], #4\n\t"
 1866        "blt	L_aes_decrypt_blocks_arm32_crypto_192_start_2_%=\n\t"
 1867        "\n"
 1868    "L_aes_decrypt_blocks_arm32_crypto_192_start_4_%=:\n\t"
 1869        "vldm.8	%[in]!, {q12-q15}\n\t"
 1870        "aesd.8	q12, q0\n\t"
 1871        "aesimc.8	q12, q12\n\t"
 1872        "aesd.8	q13, q0\n\t"
 1873        "aesimc.8	q13, q13\n\t"
 1874        "aesd.8	q14, q0\n\t"
 1875        "aesimc.8	q14, q14\n\t"
 1876        "aesd.8	q15, q0\n\t"
 1877        "aesimc.8	q15, q15\n\t"
 1878        "aesd.8	q12, q1\n\t"
 1879        "aesimc.8	q12, q12\n\t"
 1880        "aesd.8	q13, q1\n\t"
 1881        "aesimc.8	q13, q13\n\t"
 1882        "aesd.8	q14, q1\n\t"
 1883        "aesimc.8	q14, q14\n\t"
 1884        "aesd.8	q15, q1\n\t"
 1885        "aesimc.8	q15, q15\n\t"
 1886        "aesd.8	q12, q2\n\t"
 1887        "aesimc.8	q12, q12\n\t"
 1888        "aesd.8	q13, q2\n\t"
 1889        "aesimc.8	q13, q13\n\t"
 1890        "aesd.8	q14, q2\n\t"
 1891        "aesimc.8	q14, q14\n\t"
 1892        "aesd.8	q15, q2\n\t"
 1893        "aesimc.8	q15, q15\n\t"
 1894        "aesd.8	q12, q3\n\t"
 1895        "aesimc.8	q12, q12\n\t"
 1896        "aesd.8	q13, q3\n\t"
 1897        "aesimc.8	q13, q13\n\t"
 1898        "aesd.8	q14, q3\n\t"
 1899        "aesimc.8	q14, q14\n\t"
 1900        "aesd.8	q15, q3\n\t"
 1901        "aesimc.8	q15, q15\n\t"
 1902        "aesd.8	q12, q4\n\t"
 1903        "aesimc.8	q12, q12\n\t"
 1904        "aesd.8	q13, q4\n\t"
 1905        "aesimc.8	q13, q13\n\t"
 1906        "aesd.8	q14, q4\n\t"
 1907        "aesimc.8	q14, q14\n\t"
 1908        "aesd.8	q15, q4\n\t"
 1909        "aesimc.8	q15, q15\n\t"
 1910        "aesd.8	q12, q5\n\t"
 1911        "aesimc.8	q12, q12\n\t"
 1912        "aesd.8	q13, q5\n\t"
 1913        "aesimc.8	q13, q13\n\t"
 1914        "aesd.8	q14, q5\n\t"
 1915        "aesimc.8	q14, q14\n\t"
 1916        "aesd.8	q15, q5\n\t"
 1917        "aesimc.8	q15, q15\n\t"
 1918        "aesd.8	q12, q6\n\t"
 1919        "aesimc.8	q12, q12\n\t"
 1920        "aesd.8	q13, q6\n\t"
 1921        "aesimc.8	q13, q13\n\t"
 1922        "aesd.8	q14, q6\n\t"
 1923        "aesimc.8	q14, q14\n\t"
 1924        "aesd.8	q15, q6\n\t"
 1925        "aesimc.8	q15, q15\n\t"
 1926        "aesd.8	q12, q7\n\t"
 1927        "aesimc.8	q12, q12\n\t"
 1928        "aesd.8	q13, q7\n\t"
 1929        "aesimc.8	q13, q13\n\t"
 1930        "aesd.8	q14, q7\n\t"
 1931        "aesimc.8	q14, q14\n\t"
 1932        "aesd.8	q15, q7\n\t"
 1933        "aesimc.8	q15, q15\n\t"
 1934        "aesd.8	q12, q8\n\t"
 1935        "aesimc.8	q12, q12\n\t"
 1936        "aesd.8	q13, q8\n\t"
 1937        "aesimc.8	q13, q13\n\t"
 1938        "aesd.8	q14, q8\n\t"
 1939        "aesimc.8	q14, q14\n\t"
 1940        "aesd.8	q15, q8\n\t"
 1941        "aesimc.8	q15, q15\n\t"
 1942        "vld1.32	{q10}, [%[key]]!\n\t"
 1943        "aesd.8	q12, q9\n\t"
 1944        "aesimc.8	q12, q12\n\t"
 1945        "aesd.8	q13, q9\n\t"
 1946        "aesimc.8	q13, q13\n\t"
 1947        "aesd.8	q14, q9\n\t"
 1948        "aesimc.8	q14, q14\n\t"
 1949        "aesd.8	q15, q9\n\t"
 1950        "aesimc.8	q15, q15\n\t"
 1951        "vld1.32	{q11}, [%[key]]!\n\t"
 1952        "aesd.8	q12, q10\n\t"
 1953        "aesimc.8	q12, q12\n\t"
 1954        "aesd.8	q13, q10\n\t"
 1955        "aesimc.8	q13, q13\n\t"
 1956        "aesd.8	q14, q10\n\t"
 1957        "aesimc.8	q14, q14\n\t"
 1958        "aesd.8	q15, q10\n\t"
 1959        "aesimc.8	q15, q15\n\t"
 1960        "vld1.32	{q10}, [%[key]]!\n\t"
 1961        "aesd.8	q12, q11\n\t"
 1962        "veor.32	q12, q12, q10\n\t"
 1963        "aesd.8	q13, q11\n\t"
 1964        "veor.32	q13, q13, q10\n\t"
 1965        "aesd.8	q14, q11\n\t"
 1966        "veor.32	q14, q14, q10\n\t"
 1967        "aesd.8	q15, q11\n\t"
 1968        "veor.32	q15, q15, q10\n\t"
 1969        "sub	%[key], %[key], #48\n\t"
 1970        "sub	%[sz], %[sz], #4\n\t"
 1971        "vstm.8	%[out]!, {q12-q15}\n\t"
 1972        "cmp	%[sz], #4\n\t"
 1973        "bge	L_aes_decrypt_blocks_arm32_crypto_192_start_4_%=\n\t"
 1974        "\n"
 1975    "L_aes_decrypt_blocks_arm32_crypto_192_start_2_%=:\n\t"
 1976        "cmp	%[sz], #2\n\t"
 1977        "blt	L_aes_decrypt_blocks_arm32_crypto_192_start_1_%=\n\t"
 1978        "vld1.8	{q12-q13}, [%[in]]!\n\t"
 1979        "aesd.8	q12, q0\n\t"
 1980        "aesimc.8	q12, q12\n\t"
 1981        "aesd.8	q13, q0\n\t"
 1982        "aesimc.8	q13, q13\n\t"
 1983        "aesd.8	q12, q1\n\t"
 1984        "aesimc.8	q12, q12\n\t"
 1985        "aesd.8	q13, q1\n\t"
 1986        "aesimc.8	q13, q13\n\t"
 1987        "aesd.8	q12, q2\n\t"
 1988        "aesimc.8	q12, q12\n\t"
 1989        "aesd.8	q13, q2\n\t"
 1990        "aesimc.8	q13, q13\n\t"
 1991        "aesd.8	q12, q3\n\t"
 1992        "aesimc.8	q12, q12\n\t"
 1993        "aesd.8	q13, q3\n\t"
 1994        "aesimc.8	q13, q13\n\t"
 1995        "aesd.8	q12, q4\n\t"
 1996        "aesimc.8	q12, q12\n\t"
 1997        "aesd.8	q13, q4\n\t"
 1998        "aesimc.8	q13, q13\n\t"
 1999        "aesd.8	q12, q5\n\t"
 2000        "aesimc.8	q12, q12\n\t"
 2001        "aesd.8	q13, q5\n\t"
 2002        "aesimc.8	q13, q13\n\t"
 2003        "aesd.8	q12, q6\n\t"
 2004        "aesimc.8	q12, q12\n\t"
 2005        "aesd.8	q13, q6\n\t"
 2006        "aesimc.8	q13, q13\n\t"
 2007        "aesd.8	q12, q7\n\t"
 2008        "aesimc.8	q12, q12\n\t"
 2009        "aesd.8	q13, q7\n\t"
 2010        "aesimc.8	q13, q13\n\t"
 2011        "aesd.8	q12, q8\n\t"
 2012        "aesimc.8	q12, q12\n\t"
 2013        "aesd.8	q13, q8\n\t"
 2014        "aesimc.8	q13, q13\n\t"
 2015        "vld1.32	{q10}, [%[key]]!\n\t"
 2016        "aesd.8	q12, q9\n\t"
 2017        "aesimc.8	q12, q12\n\t"
 2018        "aesd.8	q13, q9\n\t"
 2019        "aesimc.8	q13, q13\n\t"
 2020        "vld1.32	{q11}, [%[key]]!\n\t"
 2021        "aesd.8	q12, q10\n\t"
 2022        "aesimc.8	q12, q12\n\t"
 2023        "aesd.8	q13, q10\n\t"
 2024        "aesimc.8	q13, q13\n\t"
 2025        "vld1.32	{q10}, [%[key]]!\n\t"
 2026        "aesd.8	q12, q11\n\t"
 2027        "veor.32	q12, q12, q10\n\t"
 2028        "aesd.8	q13, q11\n\t"
 2029        "veor.32	q13, q13, q10\n\t"
 2030        "sub	%[key], %[key], #48\n\t"
 2031        "sub	%[sz], %[sz], #2\n\t"
 2032        "vst1.8	{q12-q13}, [%[out]]!\n\t"
 2033        "\n"
 2034    "L_aes_decrypt_blocks_arm32_crypto_192_start_1_%=:\n\t"
 2035        "cmp	%[sz], #0\n\t"
 2036        "beq	L_aes_decrypt_blocks_arm32_crypto_192_done_%=\n\t"
 2037        "vld1.8	{q12}, [%[in]]!\n\t"
 2038        "aesd.8	q12, q0\n\t"
 2039        "aesimc.8	q12, q12\n\t"
 2040        "aesd.8	q12, q1\n\t"
 2041        "aesimc.8	q12, q12\n\t"
 2042        "aesd.8	q12, q2\n\t"
 2043        "aesimc.8	q12, q12\n\t"
 2044        "aesd.8	q12, q3\n\t"
 2045        "aesimc.8	q12, q12\n\t"
 2046        "aesd.8	q12, q4\n\t"
 2047        "aesimc.8	q12, q12\n\t"
 2048        "aesd.8	q12, q5\n\t"
 2049        "aesimc.8	q12, q12\n\t"
 2050        "aesd.8	q12, q6\n\t"
 2051        "aesimc.8	q12, q12\n\t"
 2052        "aesd.8	q12, q7\n\t"
 2053        "aesimc.8	q12, q12\n\t"
 2054        "aesd.8	q12, q8\n\t"
 2055        "aesimc.8	q12, q12\n\t"
 2056        "vld1.32	{q10}, [%[key]]!\n\t"
 2057        "aesd.8	q12, q9\n\t"
 2058        "aesimc.8	q12, q12\n\t"
 2059        "vld1.32	{q11}, [%[key]]!\n\t"
 2060        "aesd.8	q12, q10\n\t"
 2061        "aesimc.8	q12, q12\n\t"
 2062        "vld1.32	{q10}, [%[key]]!\n\t"
 2063        "aesd.8	q12, q11\n\t"
 2064        "veor.32	q12, q12, q10\n\t"
 2065        "sub	%[key], %[key], #48\n\t"
 2066        "vst1.8	{q12}, [%[out]]!\n\t"
 2067        "\n"
 2068    "L_aes_decrypt_blocks_arm32_crypto_192_done_%=:\n\t"
 2069#endif /* !NO_AES_192 */
 2070        "b	L_aes_decrypt_blocks_arm32_crypto_done_%=\n\t"
 2071        /* AES_ECB_256 */
 2072        "\n"
 2073    "L_aes_decrypt_blocks_arm32_crypto_start_256_%=:\n\t"
 2074#ifndef NO_AES_256
 2075        "vld1.32	{q8-q9}, [%[key]]!\n\t"
 2076        "cmp	%[sz], #1\n\t"
 2077        "beq	L_aes_decrypt_blocks_arm32_crypto_256_start_1_%=\n\t"
 2078        "cmp	%[sz], #4\n\t"
 2079        "blt	L_aes_decrypt_blocks_arm32_crypto_256_start_2_%=\n\t"
 2080        "\n"
 2081    "L_aes_decrypt_blocks_arm32_crypto_256_start_4_%=:\n\t"
 2082        "vldm.8	%[in]!, {q12-q15}\n\t"
 2083        "aesd.8	q12, q0\n\t"
 2084        "aesimc.8	q12, q12\n\t"
 2085        "aesd.8	q13, q0\n\t"
 2086        "aesimc.8	q13, q13\n\t"
 2087        "aesd.8	q14, q0\n\t"
 2088        "aesimc.8	q14, q14\n\t"
 2089        "aesd.8	q15, q0\n\t"
 2090        "aesimc.8	q15, q15\n\t"
 2091        "aesd.8	q12, q1\n\t"
 2092        "aesimc.8	q12, q12\n\t"
 2093        "aesd.8	q13, q1\n\t"
 2094        "aesimc.8	q13, q13\n\t"
 2095        "aesd.8	q14, q1\n\t"
 2096        "aesimc.8	q14, q14\n\t"
 2097        "aesd.8	q15, q1\n\t"
 2098        "aesimc.8	q15, q15\n\t"
 2099        "aesd.8	q12, q2\n\t"
 2100        "aesimc.8	q12, q12\n\t"
 2101        "aesd.8	q13, q2\n\t"
 2102        "aesimc.8	q13, q13\n\t"
 2103        "aesd.8	q14, q2\n\t"
 2104        "aesimc.8	q14, q14\n\t"
 2105        "aesd.8	q15, q2\n\t"
 2106        "aesimc.8	q15, q15\n\t"
 2107        "aesd.8	q12, q3\n\t"
 2108        "aesimc.8	q12, q12\n\t"
 2109        "aesd.8	q13, q3\n\t"
 2110        "aesimc.8	q13, q13\n\t"
 2111        "aesd.8	q14, q3\n\t"
 2112        "aesimc.8	q14, q14\n\t"
 2113        "aesd.8	q15, q3\n\t"
 2114        "aesimc.8	q15, q15\n\t"
 2115        "aesd.8	q12, q4\n\t"
 2116        "aesimc.8	q12, q12\n\t"
 2117        "aesd.8	q13, q4\n\t"
 2118        "aesimc.8	q13, q13\n\t"
 2119        "aesd.8	q14, q4\n\t"
 2120        "aesimc.8	q14, q14\n\t"
 2121        "aesd.8	q15, q4\n\t"
 2122        "aesimc.8	q15, q15\n\t"
 2123        "aesd.8	q12, q5\n\t"
 2124        "aesimc.8	q12, q12\n\t"
 2125        "aesd.8	q13, q5\n\t"
 2126        "aesimc.8	q13, q13\n\t"
 2127        "aesd.8	q14, q5\n\t"
 2128        "aesimc.8	q14, q14\n\t"
 2129        "aesd.8	q15, q5\n\t"
 2130        "aesimc.8	q15, q15\n\t"
 2131        "aesd.8	q12, q6\n\t"
 2132        "aesimc.8	q12, q12\n\t"
 2133        "aesd.8	q13, q6\n\t"
 2134        "aesimc.8	q13, q13\n\t"
 2135        "aesd.8	q14, q6\n\t"
 2136        "aesimc.8	q14, q14\n\t"
 2137        "aesd.8	q15, q6\n\t"
 2138        "aesimc.8	q15, q15\n\t"
 2139        "aesd.8	q12, q7\n\t"
 2140        "aesimc.8	q12, q12\n\t"
 2141        "aesd.8	q13, q7\n\t"
 2142        "aesimc.8	q13, q13\n\t"
 2143        "aesd.8	q14, q7\n\t"
 2144        "aesimc.8	q14, q14\n\t"
 2145        "aesd.8	q15, q7\n\t"
 2146        "aesimc.8	q15, q15\n\t"
 2147        "aesd.8	q12, q8\n\t"
 2148        "aesimc.8	q12, q12\n\t"
 2149        "aesd.8	q13, q8\n\t"
 2150        "aesimc.8	q13, q13\n\t"
 2151        "aesd.8	q14, q8\n\t"
 2152        "aesimc.8	q14, q14\n\t"
 2153        "aesd.8	q15, q8\n\t"
 2154        "aesimc.8	q15, q15\n\t"
 2155        "vld1.32	{q10}, [%[key]]!\n\t"
 2156        "aesd.8	q12, q9\n\t"
 2157        "aesimc.8	q12, q12\n\t"
 2158        "aesd.8	q13, q9\n\t"
 2159        "aesimc.8	q13, q13\n\t"
 2160        "aesd.8	q14, q9\n\t"
 2161        "aesimc.8	q14, q14\n\t"
 2162        "aesd.8	q15, q9\n\t"
 2163        "aesimc.8	q15, q15\n\t"
 2164        "vld1.32	{q11}, [%[key]]!\n\t"
 2165        "aesd.8	q12, q10\n\t"
 2166        "aesimc.8	q12, q12\n\t"
 2167        "aesd.8	q13, q10\n\t"
 2168        "aesimc.8	q13, q13\n\t"
 2169        "aesd.8	q14, q10\n\t"
 2170        "aesimc.8	q14, q14\n\t"
 2171        "aesd.8	q15, q10\n\t"
 2172        "aesimc.8	q15, q15\n\t"
 2173        "vld1.32	{q10}, [%[key]]!\n\t"
 2174        "aesd.8	q12, q11\n\t"
 2175        "aesimc.8	q12, q12\n\t"
 2176        "aesd.8	q13, q11\n\t"
 2177        "aesimc.8	q13, q13\n\t"
 2178        "aesd.8	q14, q11\n\t"
 2179        "aesimc.8	q14, q14\n\t"
 2180        "aesd.8	q15, q11\n\t"
 2181        "aesimc.8	q15, q15\n\t"
 2182        "vld1.32	{q11}, [%[key]]!\n\t"
 2183        "aesd.8	q12, q10\n\t"
 2184        "aesimc.8	q12, q12\n\t"
 2185        "aesd.8	q13, q10\n\t"
 2186        "aesimc.8	q13, q13\n\t"
 2187        "aesd.8	q14, q10\n\t"
 2188        "aesimc.8	q14, q14\n\t"
 2189        "aesd.8	q15, q10\n\t"
 2190        "aesimc.8	q15, q15\n\t"
 2191        "vld1.32	{q10}, [%[key]]!\n\t"
 2192        "aesd.8	q12, q11\n\t"
 2193        "veor.32	q12, q12, q10\n\t"
 2194        "aesd.8	q13, q11\n\t"
 2195        "veor.32	q13, q13, q10\n\t"
 2196        "aesd.8	q14, q11\n\t"
 2197        "veor.32	q14, q14, q10\n\t"
 2198        "aesd.8	q15, q11\n\t"
 2199        "veor.32	q15, q15, q10\n\t"
 2200        "sub	%[key], %[key], #0x50\n\t"
 2201        "sub	%[sz], %[sz], #4\n\t"
 2202        "vstm.8	%[out]!, {q12-q15}\n\t"
 2203        "cmp	%[sz], #4\n\t"
 2204        "bge	L_aes_decrypt_blocks_arm32_crypto_256_start_4_%=\n\t"
 2205        "\n"
 2206    "L_aes_decrypt_blocks_arm32_crypto_256_start_2_%=:\n\t"
 2207        "cmp	%[sz], #2\n\t"
 2208        "blt	L_aes_decrypt_blocks_arm32_crypto_256_start_1_%=\n\t"
 2209        "vld1.8	{q12-q13}, [%[in]]!\n\t"
 2210        "aesd.8	q12, q0\n\t"
 2211        "aesimc.8	q12, q12\n\t"
 2212        "aesd.8	q13, q0\n\t"
 2213        "aesimc.8	q13, q13\n\t"
 2214        "aesd.8	q12, q1\n\t"
 2215        "aesimc.8	q12, q12\n\t"
 2216        "aesd.8	q13, q1\n\t"
 2217        "aesimc.8	q13, q13\n\t"
 2218        "aesd.8	q12, q2\n\t"
 2219        "aesimc.8	q12, q12\n\t"
 2220        "aesd.8	q13, q2\n\t"
 2221        "aesimc.8	q13, q13\n\t"
 2222        "aesd.8	q12, q3\n\t"
 2223        "aesimc.8	q12, q12\n\t"
 2224        "aesd.8	q13, q3\n\t"
 2225        "aesimc.8	q13, q13\n\t"
 2226        "aesd.8	q12, q4\n\t"
 2227        "aesimc.8	q12, q12\n\t"
 2228        "aesd.8	q13, q4\n\t"
 2229        "aesimc.8	q13, q13\n\t"
 2230        "aesd.8	q12, q5\n\t"
 2231        "aesimc.8	q12, q12\n\t"
 2232        "aesd.8	q13, q5\n\t"
 2233        "aesimc.8	q13, q13\n\t"
 2234        "aesd.8	q12, q6\n\t"
 2235        "aesimc.8	q12, q12\n\t"
 2236        "aesd.8	q13, q6\n\t"
 2237        "aesimc.8	q13, q13\n\t"
 2238        "aesd.8	q12, q7\n\t"
 2239        "aesimc.8	q12, q12\n\t"
 2240        "aesd.8	q13, q7\n\t"
 2241        "aesimc.8	q13, q13\n\t"
 2242        "aesd.8	q12, q8\n\t"
 2243        "aesimc.8	q12, q12\n\t"
 2244        "aesd.8	q13, q8\n\t"
 2245        "aesimc.8	q13, q13\n\t"
 2246        "vld1.32	{q10}, [%[key]]!\n\t"
 2247        "aesd.8	q12, q9\n\t"
 2248        "aesimc.8	q12, q12\n\t"
 2249        "aesd.8	q13, q9\n\t"
 2250        "aesimc.8	q13, q13\n\t"
 2251        "vld1.32	{q11}, [%[key]]!\n\t"
 2252        "aesd.8	q12, q10\n\t"
 2253        "aesimc.8	q12, q12\n\t"
 2254        "aesd.8	q13, q10\n\t"
 2255        "aesimc.8	q13, q13\n\t"
 2256        "vld1.32	{q10}, [%[key]]!\n\t"
 2257        "aesd.8	q12, q11\n\t"
 2258        "aesimc.8	q12, q12\n\t"
 2259        "aesd.8	q13, q11\n\t"
 2260        "aesimc.8	q13, q13\n\t"
 2261        "vld1.32	{q11}, [%[key]]!\n\t"
 2262        "aesd.8	q12, q10\n\t"
 2263        "aesimc.8	q12, q12\n\t"
 2264        "aesd.8	q13, q10\n\t"
 2265        "aesimc.8	q13, q13\n\t"
 2266        "vld1.32	{q10}, [%[key]]!\n\t"
 2267        "aesd.8	q12, q11\n\t"
 2268        "veor.32	q12, q12, q10\n\t"
 2269        "aesd.8	q13, q11\n\t"
 2270        "veor.32	q13, q13, q10\n\t"
 2271        "sub	%[key], %[key], #0x50\n\t"
 2272        "sub	%[sz], %[sz], #2\n\t"
 2273        "vst1.8	{q12-q13}, [%[out]]!\n\t"
 2274        "\n"
 2275    "L_aes_decrypt_blocks_arm32_crypto_256_start_1_%=:\n\t"
 2276        "cmp	%[sz], #0\n\t"
 2277        "beq	L_aes_decrypt_blocks_arm32_crypto_256_done_%=\n\t"
 2278        "vld1.8	{q12}, [%[in]]!\n\t"
 2279        "aesd.8	q12, q0\n\t"
 2280        "aesimc.8	q12, q12\n\t"
 2281        "aesd.8	q12, q1\n\t"
 2282        "aesimc.8	q12, q12\n\t"
 2283        "aesd.8	q12, q2\n\t"
 2284        "aesimc.8	q12, q12\n\t"
 2285        "aesd.8	q12, q3\n\t"
 2286        "aesimc.8	q12, q12\n\t"
 2287        "aesd.8	q12, q4\n\t"
 2288        "aesimc.8	q12, q12\n\t"
 2289        "aesd.8	q12, q5\n\t"
 2290        "aesimc.8	q12, q12\n\t"
 2291        "aesd.8	q12, q6\n\t"
 2292        "aesimc.8	q12, q12\n\t"
 2293        "aesd.8	q12, q7\n\t"
 2294        "aesimc.8	q12, q12\n\t"
 2295        "aesd.8	q12, q8\n\t"
 2296        "aesimc.8	q12, q12\n\t"
 2297        "vld1.32	{q10}, [%[key]]!\n\t"
 2298        "aesd.8	q12, q9\n\t"
 2299        "aesimc.8	q12, q12\n\t"
 2300        "vld1.32	{q11}, [%[key]]!\n\t"
 2301        "aesd.8	q12, q10\n\t"
 2302        "aesimc.8	q12, q12\n\t"
 2303        "vld1.32	{q10}, [%[key]]!\n\t"
 2304        "aesd.8	q12, q11\n\t"
 2305        "aesimc.8	q12, q12\n\t"
 2306        "vld1.32	{q11}, [%[key]]!\n\t"
 2307        "aesd.8	q12, q10\n\t"
 2308        "aesimc.8	q12, q12\n\t"
 2309        "vld1.32	{q10}, [%[key]]!\n\t"
 2310        "aesd.8	q12, q11\n\t"
 2311        "veor.32	q12, q12, q10\n\t"
 2312        "sub	%[key], %[key], #0x50\n\t"
 2313        "vst1.8	{q12}, [%[out]]!\n\t"
 2314        "\n"
 2315    "L_aes_decrypt_blocks_arm32_crypto_256_done_%=:\n\t"
 2316#endif /* !NO_AES_256 */
 2317        "b	L_aes_decrypt_blocks_arm32_crypto_done_%=\n\t"
 2318        /* AES_ECB_128 */
 2319        "\n"
 2320    "L_aes_decrypt_blocks_arm32_crypto_start_128_%=:\n\t"
 2321#ifndef NO_AES_128
 2322        "vldm.32	%[key]!, {q8-q10}\n\t"
 2323        "cmp	%[sz], #1\n\t"
 2324        "beq	L_aes_decrypt_blocks_arm32_crypto_128_start_1_%=\n\t"
 2325        "cmp	%[sz], #4\n\t"
 2326        "blt	L_aes_decrypt_blocks_arm32_crypto_128_start_2_%=\n\t"
 2327        "\n"
 2328    "L_aes_decrypt_blocks_arm32_crypto_128_start_4_%=:\n\t"
 2329        "vldm.8	%[in]!, {q12-q15}\n\t"
 2330        "aesd.8	q12, q0\n\t"
 2331        "aesimc.8	q12, q12\n\t"
 2332        "aesd.8	q13, q0\n\t"
 2333        "aesimc.8	q13, q13\n\t"
 2334        "aesd.8	q14, q0\n\t"
 2335        "aesimc.8	q14, q14\n\t"
 2336        "aesd.8	q15, q0\n\t"
 2337        "aesimc.8	q15, q15\n\t"
 2338        "aesd.8	q12, q1\n\t"
 2339        "aesimc.8	q12, q12\n\t"
 2340        "aesd.8	q13, q1\n\t"
 2341        "aesimc.8	q13, q13\n\t"
 2342        "aesd.8	q14, q1\n\t"
 2343        "aesimc.8	q14, q14\n\t"
 2344        "aesd.8	q15, q1\n\t"
 2345        "aesimc.8	q15, q15\n\t"
 2346        "aesd.8	q12, q2\n\t"
 2347        "aesimc.8	q12, q12\n\t"
 2348        "aesd.8	q13, q2\n\t"
 2349        "aesimc.8	q13, q13\n\t"
 2350        "aesd.8	q14, q2\n\t"
 2351        "aesimc.8	q14, q14\n\t"
 2352        "aesd.8	q15, q2\n\t"
 2353        "aesimc.8	q15, q15\n\t"
 2354        "aesd.8	q12, q3\n\t"
 2355        "aesimc.8	q12, q12\n\t"
 2356        "aesd.8	q13, q3\n\t"
 2357        "aesimc.8	q13, q13\n\t"
 2358        "aesd.8	q14, q3\n\t"
 2359        "aesimc.8	q14, q14\n\t"
 2360        "aesd.8	q15, q3\n\t"
 2361        "aesimc.8	q15, q15\n\t"
 2362        "aesd.8	q12, q4\n\t"
 2363        "aesimc.8	q12, q12\n\t"
 2364        "aesd.8	q13, q4\n\t"
 2365        "aesimc.8	q13, q13\n\t"
 2366        "aesd.8	q14, q4\n\t"
 2367        "aesimc.8	q14, q14\n\t"
 2368        "aesd.8	q15, q4\n\t"
 2369        "aesimc.8	q15, q15\n\t"
 2370        "aesd.8	q12, q5\n\t"
 2371        "aesimc.8	q12, q12\n\t"
 2372        "aesd.8	q13, q5\n\t"
 2373        "aesimc.8	q13, q13\n\t"
 2374        "aesd.8	q14, q5\n\t"
 2375        "aesimc.8	q14, q14\n\t"
 2376        "aesd.8	q15, q5\n\t"
 2377        "aesimc.8	q15, q15\n\t"
 2378        "aesd.8	q12, q6\n\t"
 2379        "aesimc.8	q12, q12\n\t"
 2380        "aesd.8	q13, q6\n\t"
 2381        "aesimc.8	q13, q13\n\t"
 2382        "aesd.8	q14, q6\n\t"
 2383        "aesimc.8	q14, q14\n\t"
 2384        "aesd.8	q15, q6\n\t"
 2385        "aesimc.8	q15, q15\n\t"
 2386        "aesd.8	q12, q7\n\t"
 2387        "aesimc.8	q12, q12\n\t"
 2388        "aesd.8	q13, q7\n\t"
 2389        "aesimc.8	q13, q13\n\t"
 2390        "aesd.8	q14, q7\n\t"
 2391        "aesimc.8	q14, q14\n\t"
 2392        "aesd.8	q15, q7\n\t"
 2393        "aesimc.8	q15, q15\n\t"
 2394        "aesd.8	q12, q8\n\t"
 2395        "aesimc.8	q12, q12\n\t"
 2396        "aesd.8	q13, q8\n\t"
 2397        "aesimc.8	q13, q13\n\t"
 2398        "aesd.8	q14, q8\n\t"
 2399        "aesimc.8	q14, q14\n\t"
 2400        "aesd.8	q15, q8\n\t"
 2401        "aesimc.8	q15, q15\n\t"
 2402        "aesd.8	q12, q9\n\t"
 2403        "veor.32	q12, q12, q10\n\t"
 2404        "aesd.8	q13, q9\n\t"
 2405        "veor.32	q13, q13, q10\n\t"
 2406        "aesd.8	q14, q9\n\t"
 2407        "veor.32	q14, q14, q10\n\t"
 2408        "aesd.8	q15, q9\n\t"
 2409        "veor.32	q15, q15, q10\n\t"
 2410        "sub	%[sz], %[sz], #4\n\t"
 2411        "vstm.8	%[out]!, {q12-q15}\n\t"
 2412        "cmp	%[sz], #4\n\t"
 2413        "bge	L_aes_decrypt_blocks_arm32_crypto_128_start_4_%=\n\t"
 2414        "\n"
 2415    "L_aes_decrypt_blocks_arm32_crypto_128_start_2_%=:\n\t"
 2416        "cmp	%[sz], #2\n\t"
 2417        "blt	L_aes_decrypt_blocks_arm32_crypto_128_start_1_%=\n\t"
 2418        "vld1.8	{q12-q13}, [%[in]]!\n\t"
 2419        "aesd.8	q12, q0\n\t"
 2420        "aesimc.8	q12, q12\n\t"
 2421        "aesd.8	q13, q0\n\t"
 2422        "aesimc.8	q13, q13\n\t"
 2423        "aesd.8	q12, q1\n\t"
 2424        "aesimc.8	q12, q12\n\t"
 2425        "aesd.8	q13, q1\n\t"
 2426        "aesimc.8	q13, q13\n\t"
 2427        "aesd.8	q12, q2\n\t"
 2428        "aesimc.8	q12, q12\n\t"
 2429        "aesd.8	q13, q2\n\t"
 2430        "aesimc.8	q13, q13\n\t"
 2431        "aesd.8	q12, q3\n\t"
 2432        "aesimc.8	q12, q12\n\t"
 2433        "aesd.8	q13, q3\n\t"
 2434        "aesimc.8	q13, q13\n\t"
 2435        "aesd.8	q12, q4\n\t"
 2436        "aesimc.8	q12, q12\n\t"
 2437        "aesd.8	q13, q4\n\t"
 2438        "aesimc.8	q13, q13\n\t"
 2439        "aesd.8	q12, q5\n\t"
 2440        "aesimc.8	q12, q12\n\t"
 2441        "aesd.8	q13, q5\n\t"
 2442        "aesimc.8	q13, q13\n\t"
 2443        "aesd.8	q12, q6\n\t"
 2444        "aesimc.8	q12, q12\n\t"
 2445        "aesd.8	q13, q6\n\t"
 2446        "aesimc.8	q13, q13\n\t"
 2447        "aesd.8	q12, q7\n\t"
 2448        "aesimc.8	q12, q12\n\t"
 2449        "aesd.8	q13, q7\n\t"
 2450        "aesimc.8	q13, q13\n\t"
 2451        "aesd.8	q12, q8\n\t"
 2452        "aesimc.8	q12, q12\n\t"
 2453        "aesd.8	q13, q8\n\t"
 2454        "aesimc.8	q13, q13\n\t"
 2455        "aesd.8	q12, q9\n\t"
 2456        "veor.32	q12, q12, q10\n\t"
 2457        "aesd.8	q13, q9\n\t"
 2458        "veor.32	q13, q13, q10\n\t"
 2459        "sub	%[sz], %[sz], #2\n\t"
 2460        "vst1.8	{q12-q13}, [%[out]]!\n\t"
 2461        "\n"
 2462    "L_aes_decrypt_blocks_arm32_crypto_128_start_1_%=:\n\t"
 2463        "cmp	%[sz], #0\n\t"
 2464        "beq	L_aes_decrypt_blocks_arm32_crypto_128_done_%=\n\t"
 2465        "vld1.8	{q12}, [%[in]]!\n\t"
 2466        "aesd.8	q12, q0\n\t"
 2467        "aesimc.8	q12, q12\n\t"
 2468        "aesd.8	q12, q1\n\t"
 2469        "aesimc.8	q12, q12\n\t"
 2470        "aesd.8	q12, q2\n\t"
 2471        "aesimc.8	q12, q12\n\t"
 2472        "aesd.8	q12, q3\n\t"
 2473        "aesimc.8	q12, q12\n\t"
 2474        "aesd.8	q12, q4\n\t"
 2475        "aesimc.8	q12, q12\n\t"
 2476        "aesd.8	q12, q5\n\t"
 2477        "aesimc.8	q12, q12\n\t"
 2478        "aesd.8	q12, q6\n\t"
 2479        "aesimc.8	q12, q12\n\t"
 2480        "aesd.8	q12, q7\n\t"
 2481        "aesimc.8	q12, q12\n\t"
 2482        "aesd.8	q12, q8\n\t"
 2483        "aesimc.8	q12, q12\n\t"
 2484        "aesd.8	q12, q9\n\t"
 2485        "veor.32	q12, q12, q10\n\t"
 2486        "vst1.8	{q12}, [%[out]]!\n\t"
 2487        "\n"
 2488    "L_aes_decrypt_blocks_arm32_crypto_128_done_%=:\n\t"
 2489#endif /* !NO_AES_128 */
 2490        "\n"
 2491    "L_aes_decrypt_blocks_arm32_crypto_done_%=:\n\t"
 2492        "pop	{%[nr]}\n\t"
 2493#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 2494        : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [key] "+r" (key),
 2495          [nr] "+r" (nr)
 2496        :
 2497#else
 2498        :
 2499        : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [key] "r" (key),
 2500          [nr] "r" (nr)
 2501#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 2502        : "memory", "cc", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8",
 2503            "q9", "q10", "q11", "q12", "q13", "q14", "q15"
 2504    );
 2505}
 2506
 2507#endif /* HAVE_AES_DECRYPT */
 2508#endif /* HAVE_AES_ECB */
 2509#ifdef HAVE_AES_CBC
 2510#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 2511WC_OMIT_FRAME_POINTER void AES_CBC_encrypt_AARCH32(const byte* in_p,
 2512    byte* out_p, word32 sz_p, byte* reg_p, byte* key_p, int nr_p)
 2513#else
 2514WC_OMIT_FRAME_POINTER void AES_CBC_encrypt_AARCH32(const byte* in, byte* out,
 2515    word32 sz, byte* reg, byte* key, int nr)
 2516#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 2517{
 2518#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 2519    register const byte* in __asm__ ("r0") = (const byte*)in_p;
 2520    register byte* out __asm__ ("r1") = (byte*)out_p;
 2521    register word32 sz __asm__ ("r2") = (word32)sz_p;
 2522    register byte* reg __asm__ ("r3") = (byte*)reg_p;
 2523    register byte* key __asm__ ("r12") = (byte*)key_p;
 2524    register int nr __asm__ ("lr") = (int)nr_p;
 2525#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 2526
 2527    __asm__ __volatile__ (
 2528        "push	{%[key], %[nr]}\n\t"
 2529        "ldr	r12, [sp]\n\t"
 2530        "ldr	lr, [sp, #4]\n\t"
 2531        "vldm.32	r12!, {q0-q7}\n\t"
 2532        "vld1.32	{q15}, [%[reg]]\n\t"
 2533        "subs	lr, lr, #12\n\t"
 2534        "lsr	%[sz], %[sz], #4\n\t"
 2535        "blt	L_aes_cbc_encrypt_arm32_crypto_start_128_%=\n\t"
 2536        "bgt	L_aes_cbc_encrypt_arm32_crypto_start_256_%=\n\t"
 2537        /* AES_CBC_192 */
 2538#ifndef NO_AES_192
 2539        "vld1.8	{q14}, [%[in]]!\n\t"
 2540        "vldm.32	r12!, {q8-q12}\n\t"
 2541        "cmp	%[sz], #1\n\t"
 2542        "beq	L_aes_cbc_encrypt_arm32_crypto_192_start_1_%=\n\t"
 2543        "cmp	%[sz], #4\n\t"
 2544        "blt	L_aes_cbc_encrypt_arm32_crypto_192_start_2_%=\n\t"
 2545        "\n"
 2546    "L_aes_cbc_encrypt_arm32_crypto_192_start_4_%=:\n\t"
 2547        "veor.32	q15, q15, q14\n\t"
 2548        "aese.8	q15, q0\n\t"
 2549        "aesmc.8	q15, q15\n\t"
 2550        "aese.8	q15, q1\n\t"
 2551        "aesmc.8	q15, q15\n\t"
 2552        "aese.8	q15, q2\n\t"
 2553        "aesmc.8	q15, q15\n\t"
 2554        "aese.8	q15, q3\n\t"
 2555        "aesmc.8	q15, q15\n\t"
 2556        "aese.8	q15, q4\n\t"
 2557        "aesmc.8	q15, q15\n\t"
 2558        "aese.8	q15, q5\n\t"
 2559        "aesmc.8	q15, q15\n\t"
 2560        "aese.8	q15, q6\n\t"
 2561        "aesmc.8	q15, q15\n\t"
 2562        "aese.8	q15, q7\n\t"
 2563        "aesmc.8	q15, q15\n\t"
 2564        "aese.8	q15, q8\n\t"
 2565        "aesmc.8	q15, q15\n\t"
 2566        "aese.8	q15, q9\n\t"
 2567        "aesmc.8	q15, q15\n\t"
 2568        "aese.8	q15, q10\n\t"
 2569        "aesmc.8	q15, q15\n\t"
 2570        "vld1.8	{q14}, [%[in]]!\n\t"
 2571        "aese.8	q15, q11\n\t"
 2572        "veor.32	q15, q15, q12\n\t"
 2573        "vst1.8	{q15}, [%[out]]!\n\t"
 2574        "veor.32	q15, q15, q14\n\t"
 2575        "aese.8	q15, q0\n\t"
 2576        "aesmc.8	q15, q15\n\t"
 2577        "aese.8	q15, q1\n\t"
 2578        "aesmc.8	q15, q15\n\t"
 2579        "aese.8	q15, q2\n\t"
 2580        "aesmc.8	q15, q15\n\t"
 2581        "aese.8	q15, q3\n\t"
 2582        "aesmc.8	q15, q15\n\t"
 2583        "aese.8	q15, q4\n\t"
 2584        "aesmc.8	q15, q15\n\t"
 2585        "aese.8	q15, q5\n\t"
 2586        "aesmc.8	q15, q15\n\t"
 2587        "aese.8	q15, q6\n\t"
 2588        "aesmc.8	q15, q15\n\t"
 2589        "aese.8	q15, q7\n\t"
 2590        "aesmc.8	q15, q15\n\t"
 2591        "aese.8	q15, q8\n\t"
 2592        "aesmc.8	q15, q15\n\t"
 2593        "aese.8	q15, q9\n\t"
 2594        "aesmc.8	q15, q15\n\t"
 2595        "aese.8	q15, q10\n\t"
 2596        "aesmc.8	q15, q15\n\t"
 2597        "vld1.8	{q14}, [%[in]]!\n\t"
 2598        "aese.8	q15, q11\n\t"
 2599        "veor.32	q15, q15, q12\n\t"
 2600        "vst1.8	{q15}, [%[out]]!\n\t"
 2601        "veor.32	q15, q15, q14\n\t"
 2602        "aese.8	q15, q0\n\t"
 2603        "aesmc.8	q15, q15\n\t"
 2604        "aese.8	q15, q1\n\t"
 2605        "aesmc.8	q15, q15\n\t"
 2606        "aese.8	q15, q2\n\t"
 2607        "aesmc.8	q15, q15\n\t"
 2608        "aese.8	q15, q3\n\t"
 2609        "aesmc.8	q15, q15\n\t"
 2610        "aese.8	q15, q4\n\t"
 2611        "aesmc.8	q15, q15\n\t"
 2612        "aese.8	q15, q5\n\t"
 2613        "aesmc.8	q15, q15\n\t"
 2614        "aese.8	q15, q6\n\t"
 2615        "aesmc.8	q15, q15\n\t"
 2616        "aese.8	q15, q7\n\t"
 2617        "aesmc.8	q15, q15\n\t"
 2618        "aese.8	q15, q8\n\t"
 2619        "aesmc.8	q15, q15\n\t"
 2620        "aese.8	q15, q9\n\t"
 2621        "aesmc.8	q15, q15\n\t"
 2622        "aese.8	q15, q10\n\t"
 2623        "aesmc.8	q15, q15\n\t"
 2624        "vld1.8	{q14}, [%[in]]!\n\t"
 2625        "aese.8	q15, q11\n\t"
 2626        "veor.32	q15, q15, q12\n\t"
 2627        "vst1.8	{q15}, [%[out]]!\n\t"
 2628        "veor.32	q15, q15, q14\n\t"
 2629        "aese.8	q15, q0\n\t"
 2630        "aesmc.8	q15, q15\n\t"
 2631        "aese.8	q15, q1\n\t"
 2632        "aesmc.8	q15, q15\n\t"
 2633        "aese.8	q15, q2\n\t"
 2634        "aesmc.8	q15, q15\n\t"
 2635        "aese.8	q15, q3\n\t"
 2636        "aesmc.8	q15, q15\n\t"
 2637        "aese.8	q15, q4\n\t"
 2638        "aesmc.8	q15, q15\n\t"
 2639        "aese.8	q15, q5\n\t"
 2640        "aesmc.8	q15, q15\n\t"
 2641        "aese.8	q15, q6\n\t"
 2642        "aesmc.8	q15, q15\n\t"
 2643        "aese.8	q15, q7\n\t"
 2644        "aesmc.8	q15, q15\n\t"
 2645        "aese.8	q15, q8\n\t"
 2646        "aesmc.8	q15, q15\n\t"
 2647        "aese.8	q15, q9\n\t"
 2648        "aesmc.8	q15, q15\n\t"
 2649        "subs	%[sz], %[sz], #4\n\t"
 2650        "aese.8	q15, q10\n\t"
 2651        "aesmc.8	q15, q15\n\t"
 2652        "aese.8	q15, q11\n\t"
 2653        "veor.32	q15, q15, q12\n\t"
 2654        "beq	L_aes_cbc_encrypt_arm32_crypto_192_done_%=\n\t"
 2655        "vld1.8	{q14}, [%[in]]!\n\t"
 2656        "cmp	%[sz], #4\n\t"
 2657        "vst1.8	{q15}, [%[out]]!\n\t"
 2658        "bge	L_aes_cbc_encrypt_arm32_crypto_192_start_4_%=\n\t"
 2659        "cmp	%[sz], #2\n\t"
 2660        "blt	L_aes_cbc_encrypt_arm32_crypto_192_start_1_%=\n\t"
 2661        "\n"
 2662    "L_aes_cbc_encrypt_arm32_crypto_192_start_2_%=:\n\t"
 2663        "veor.32	q15, q15, q14\n\t"
 2664        "aese.8	q15, q0\n\t"
 2665        "aesmc.8	q15, q15\n\t"
 2666        "aese.8	q15, q1\n\t"
 2667        "aesmc.8	q15, q15\n\t"
 2668        "aese.8	q15, q2\n\t"
 2669        "aesmc.8	q15, q15\n\t"
 2670        "aese.8	q15, q3\n\t"
 2671        "aesmc.8	q15, q15\n\t"
 2672        "aese.8	q15, q4\n\t"
 2673        "aesmc.8	q15, q15\n\t"
 2674        "aese.8	q15, q5\n\t"
 2675        "aesmc.8	q15, q15\n\t"
 2676        "aese.8	q15, q6\n\t"
 2677        "aesmc.8	q15, q15\n\t"
 2678        "aese.8	q15, q7\n\t"
 2679        "aesmc.8	q15, q15\n\t"
 2680        "aese.8	q15, q8\n\t"
 2681        "aesmc.8	q15, q15\n\t"
 2682        "aese.8	q15, q9\n\t"
 2683        "aesmc.8	q15, q15\n\t"
 2684        "aese.8	q15, q10\n\t"
 2685        "aesmc.8	q15, q15\n\t"
 2686        "vld1.8	{q14}, [%[in]]!\n\t"
 2687        "aese.8	q15, q11\n\t"
 2688        "veor.32	q15, q15, q12\n\t"
 2689        "vst1.8	{q15}, [%[out]]!\n\t"
 2690        "veor.32	q15, q15, q14\n\t"
 2691        "aese.8	q15, q0\n\t"
 2692        "aesmc.8	q15, q15\n\t"
 2693        "aese.8	q15, q1\n\t"
 2694        "aesmc.8	q15, q15\n\t"
 2695        "aese.8	q15, q2\n\t"
 2696        "aesmc.8	q15, q15\n\t"
 2697        "aese.8	q15, q3\n\t"
 2698        "aesmc.8	q15, q15\n\t"
 2699        "aese.8	q15, q4\n\t"
 2700        "aesmc.8	q15, q15\n\t"
 2701        "aese.8	q15, q5\n\t"
 2702        "aesmc.8	q15, q15\n\t"
 2703        "aese.8	q15, q6\n\t"
 2704        "aesmc.8	q15, q15\n\t"
 2705        "aese.8	q15, q7\n\t"
 2706        "aesmc.8	q15, q15\n\t"
 2707        "aese.8	q15, q8\n\t"
 2708        "aesmc.8	q15, q15\n\t"
 2709        "aese.8	q15, q9\n\t"
 2710        "aesmc.8	q15, q15\n\t"
 2711        "subs	%[sz], %[sz], #2\n\t"
 2712        "aese.8	q15, q10\n\t"
 2713        "aesmc.8	q15, q15\n\t"
 2714        "aese.8	q15, q11\n\t"
 2715        "veor.32	q15, q15, q12\n\t"
 2716        "beq	L_aes_cbc_encrypt_arm32_crypto_192_done_%=\n\t"
 2717        "vld1.8	{q14}, [%[in]]!\n\t"
 2718        "vst1.8	{q15}, [%[out]]!\n\t"
 2719        "\n"
 2720    "L_aes_cbc_encrypt_arm32_crypto_192_start_1_%=:\n\t"
 2721        "veor.32	q15, q15, q14\n\t"
 2722        "aese.8	q15, q0\n\t"
 2723        "aesmc.8	q15, q15\n\t"
 2724        "aese.8	q15, q1\n\t"
 2725        "aesmc.8	q15, q15\n\t"
 2726        "aese.8	q15, q2\n\t"
 2727        "aesmc.8	q15, q15\n\t"
 2728        "aese.8	q15, q3\n\t"
 2729        "aesmc.8	q15, q15\n\t"
 2730        "aese.8	q15, q4\n\t"
 2731        "aesmc.8	q15, q15\n\t"
 2732        "aese.8	q15, q5\n\t"
 2733        "aesmc.8	q15, q15\n\t"
 2734        "aese.8	q15, q6\n\t"
 2735        "aesmc.8	q15, q15\n\t"
 2736        "aese.8	q15, q7\n\t"
 2737        "aesmc.8	q15, q15\n\t"
 2738        "aese.8	q15, q8\n\t"
 2739        "aesmc.8	q15, q15\n\t"
 2740        "aese.8	q15, q9\n\t"
 2741        "aesmc.8	q15, q15\n\t"
 2742        "aese.8	q15, q10\n\t"
 2743        "aesmc.8	q15, q15\n\t"
 2744        "aese.8	q15, q11\n\t"
 2745        "veor.32	q15, q15, q12\n\t"
 2746        "\n"
 2747    "L_aes_cbc_encrypt_arm32_crypto_192_done_%=:\n\t"
 2748        "vst1.8	{q15}, [%[out]]!\n\t"
 2749#endif /* !NO_AES_192 */
 2750        "b	L_aes_cbc_encrypt_arm32_crypto_done_%=\n\t"
 2751        /* AES_CBC_256 */
 2752        "\n"
 2753    "L_aes_cbc_encrypt_arm32_crypto_start_256_%=:\n\t"
 2754#ifndef NO_AES_256
 2755        "vld1.8	{q14}, [%[in]]!\n\t"
 2756        "vldm.32	r12!, {q8-q11}\n\t"
 2757        "add	r12, r12, #16\n\t"
 2758        "vld1.32	{q12-q13}, [r12]\n\t"
 2759        "sub	r12, r12, #16\n\t"
 2760        "cmp	%[sz], #1\n\t"
 2761        "beq	L_aes_cbc_encrypt_arm32_crypto_256_start_1_%=\n\t"
 2762        "cmp	%[sz], #4\n\t"
 2763        "blt	L_aes_cbc_encrypt_arm32_crypto_256_start_2_%=\n\t"
 2764        "\n"
 2765    "L_aes_cbc_encrypt_arm32_crypto_256_start_4_%=:\n\t"
 2766        "veor.32	q15, q15, q14\n\t"
 2767        "aese.8	q15, q0\n\t"
 2768        "aesmc.8	q15, q15\n\t"
 2769        "aese.8	q15, q1\n\t"
 2770        "aesmc.8	q15, q15\n\t"
 2771        "aese.8	q15, q2\n\t"
 2772        "aesmc.8	q15, q15\n\t"
 2773        "aese.8	q15, q3\n\t"
 2774        "aesmc.8	q15, q15\n\t"
 2775        "aese.8	q15, q4\n\t"
 2776        "aesmc.8	q15, q15\n\t"
 2777        "aese.8	q15, q5\n\t"
 2778        "aesmc.8	q15, q15\n\t"
 2779        "aese.8	q15, q6\n\t"
 2780        "aesmc.8	q15, q15\n\t"
 2781        "aese.8	q15, q7\n\t"
 2782        "aesmc.8	q15, q15\n\t"
 2783        "aese.8	q15, q8\n\t"
 2784        "aesmc.8	q15, q15\n\t"
 2785        "aese.8	q15, q9\n\t"
 2786        "aesmc.8	q15, q15\n\t"
 2787        "aese.8	q15, q10\n\t"
 2788        "aesmc.8	q15, q15\n\t"
 2789        "vld1.32	{q14}, [r12]\n\t"
 2790        "aese.8	q15, q11\n\t"
 2791        "aesmc.8	q15, q15\n\t"
 2792        "aese.8	q15, q14\n\t"
 2793        "aesmc.8	q15, q15\n\t"
 2794        "vld1.8	{q14}, [%[in]]!\n\t"
 2795        "aese.8	q15, q12\n\t"
 2796        "veor.32	q15, q15, q13\n\t"
 2797        "vst1.8	{q15}, [%[out]]!\n\t"
 2798        "veor.32	q15, q15, q14\n\t"
 2799        "aese.8	q15, q0\n\t"
 2800        "aesmc.8	q15, q15\n\t"
 2801        "aese.8	q15, q1\n\t"
 2802        "aesmc.8	q15, q15\n\t"
 2803        "aese.8	q15, q2\n\t"
 2804        "aesmc.8	q15, q15\n\t"
 2805        "aese.8	q15, q3\n\t"
 2806        "aesmc.8	q15, q15\n\t"
 2807        "aese.8	q15, q4\n\t"
 2808        "aesmc.8	q15, q15\n\t"
 2809        "aese.8	q15, q5\n\t"
 2810        "aesmc.8	q15, q15\n\t"
 2811        "aese.8	q15, q6\n\t"
 2812        "aesmc.8	q15, q15\n\t"
 2813        "aese.8	q15, q7\n\t"
 2814        "aesmc.8	q15, q15\n\t"
 2815        "aese.8	q15, q8\n\t"
 2816        "aesmc.8	q15, q15\n\t"
 2817        "aese.8	q15, q9\n\t"
 2818        "aesmc.8	q15, q15\n\t"
 2819        "aese.8	q15, q10\n\t"
 2820        "aesmc.8	q15, q15\n\t"
 2821        "vld1.32	{q14}, [r12]\n\t"
 2822        "aese.8	q15, q11\n\t"
 2823        "aesmc.8	q15, q15\n\t"
 2824        "aese.8	q15, q14\n\t"
 2825        "aesmc.8	q15, q15\n\t"
 2826        "vld1.8	{q14}, [%[in]]!\n\t"
 2827        "aese.8	q15, q12\n\t"
 2828        "veor.32	q15, q15, q13\n\t"
 2829        "vst1.8	{q15}, [%[out]]!\n\t"
 2830        "veor.32	q15, q15, q14\n\t"
 2831        "aese.8	q15, q0\n\t"
 2832        "aesmc.8	q15, q15\n\t"
 2833        "aese.8	q15, q1\n\t"
 2834        "aesmc.8	q15, q15\n\t"
 2835        "aese.8	q15, q2\n\t"
 2836        "aesmc.8	q15, q15\n\t"
 2837        "aese.8	q15, q3\n\t"
 2838        "aesmc.8	q15, q15\n\t"
 2839        "aese.8	q15, q4\n\t"
 2840        "aesmc.8	q15, q15\n\t"
 2841        "aese.8	q15, q5\n\t"
 2842        "aesmc.8	q15, q15\n\t"
 2843        "aese.8	q15, q6\n\t"
 2844        "aesmc.8	q15, q15\n\t"
 2845        "aese.8	q15, q7\n\t"
 2846        "aesmc.8	q15, q15\n\t"
 2847        "aese.8	q15, q8\n\t"
 2848        "aesmc.8	q15, q15\n\t"
 2849        "aese.8	q15, q9\n\t"
 2850        "aesmc.8	q15, q15\n\t"
 2851        "aese.8	q15, q10\n\t"
 2852        "aesmc.8	q15, q15\n\t"
 2853        "vld1.32	{q14}, [r12]\n\t"
 2854        "aese.8	q15, q11\n\t"
 2855        "aesmc.8	q15, q15\n\t"
 2856        "aese.8	q15, q14\n\t"
 2857        "aesmc.8	q15, q15\n\t"
 2858        "vld1.8	{q14}, [%[in]]!\n\t"
 2859        "aese.8	q15, q12\n\t"
 2860        "veor.32	q15, q15, q13\n\t"
 2861        "vst1.8	{q15}, [%[out]]!\n\t"
 2862        "veor.32	q15, q15, q14\n\t"
 2863        "aese.8	q15, q0\n\t"
 2864        "aesmc.8	q15, q15\n\t"
 2865        "aese.8	q15, q1\n\t"
 2866        "aesmc.8	q15, q15\n\t"
 2867        "aese.8	q15, q2\n\t"
 2868        "aesmc.8	q15, q15\n\t"
 2869        "aese.8	q15, q3\n\t"
 2870        "aesmc.8	q15, q15\n\t"
 2871        "aese.8	q15, q4\n\t"
 2872        "aesmc.8	q15, q15\n\t"
 2873        "aese.8	q15, q5\n\t"
 2874        "aesmc.8	q15, q15\n\t"
 2875        "aese.8	q15, q6\n\t"
 2876        "aesmc.8	q15, q15\n\t"
 2877        "aese.8	q15, q7\n\t"
 2878        "aesmc.8	q15, q15\n\t"
 2879        "aese.8	q15, q8\n\t"
 2880        "aesmc.8	q15, q15\n\t"
 2881        "aese.8	q15, q9\n\t"
 2882        "aesmc.8	q15, q15\n\t"
 2883        "aese.8	q15, q10\n\t"
 2884        "aesmc.8	q15, q15\n\t"
 2885        "vld1.32	{q14}, [r12]\n\t"
 2886        "aese.8	q15, q11\n\t"
 2887        "aesmc.8	q15, q15\n\t"
 2888        "subs	%[sz], %[sz], #4\n\t"
 2889        "aese.8	q15, q14\n\t"
 2890        "aesmc.8	q15, q15\n\t"
 2891        "aese.8	q15, q12\n\t"
 2892        "veor.32	q15, q15, q13\n\t"
 2893        "beq	L_aes_cbc_encrypt_arm32_crypto_256_done_%=\n\t"
 2894        "vld1.8	{q14}, [%[in]]!\n\t"
 2895        "cmp	%[sz], #4\n\t"
 2896        "vst1.8	{q15}, [%[out]]!\n\t"
 2897        "bge	L_aes_cbc_encrypt_arm32_crypto_256_start_4_%=\n\t"
 2898        "cmp	%[sz], #2\n\t"
 2899        "blt	L_aes_cbc_encrypt_arm32_crypto_256_start_1_%=\n\t"
 2900        "\n"
 2901    "L_aes_cbc_encrypt_arm32_crypto_256_start_2_%=:\n\t"
 2902        "veor.32	q15, q15, q14\n\t"
 2903        "aese.8	q15, q0\n\t"
 2904        "aesmc.8	q15, q15\n\t"
 2905        "aese.8	q15, q1\n\t"
 2906        "aesmc.8	q15, q15\n\t"
 2907        "aese.8	q15, q2\n\t"
 2908        "aesmc.8	q15, q15\n\t"
 2909        "aese.8	q15, q3\n\t"
 2910        "aesmc.8	q15, q15\n\t"
 2911        "aese.8	q15, q4\n\t"
 2912        "aesmc.8	q15, q15\n\t"
 2913        "aese.8	q15, q5\n\t"
 2914        "aesmc.8	q15, q15\n\t"
 2915        "aese.8	q15, q6\n\t"
 2916        "aesmc.8	q15, q15\n\t"
 2917        "aese.8	q15, q7\n\t"
 2918        "aesmc.8	q15, q15\n\t"
 2919        "aese.8	q15, q8\n\t"
 2920        "aesmc.8	q15, q15\n\t"
 2921        "aese.8	q15, q9\n\t"
 2922        "aesmc.8	q15, q15\n\t"
 2923        "aese.8	q15, q10\n\t"
 2924        "aesmc.8	q15, q15\n\t"
 2925        "vld1.32	{q14}, [r12]\n\t"
 2926        "aese.8	q15, q11\n\t"
 2927        "aesmc.8	q15, q15\n\t"
 2928        "aese.8	q15, q14\n\t"
 2929        "aesmc.8	q15, q15\n\t"
 2930        "vld1.8	{q14}, [%[in]]!\n\t"
 2931        "aese.8	q15, q12\n\t"
 2932        "veor.32	q15, q15, q13\n\t"
 2933        "vst1.8	{q15}, [%[out]]!\n\t"
 2934        "veor.32	q15, q15, q14\n\t"
 2935        "aese.8	q15, q0\n\t"
 2936        "aesmc.8	q15, q15\n\t"
 2937        "aese.8	q15, q1\n\t"
 2938        "aesmc.8	q15, q15\n\t"
 2939        "aese.8	q15, q2\n\t"
 2940        "aesmc.8	q15, q15\n\t"
 2941        "aese.8	q15, q3\n\t"
 2942        "aesmc.8	q15, q15\n\t"
 2943        "aese.8	q15, q4\n\t"
 2944        "aesmc.8	q15, q15\n\t"
 2945        "aese.8	q15, q5\n\t"
 2946        "aesmc.8	q15, q15\n\t"
 2947        "aese.8	q15, q6\n\t"
 2948        "aesmc.8	q15, q15\n\t"
 2949        "aese.8	q15, q7\n\t"
 2950        "aesmc.8	q15, q15\n\t"
 2951        "aese.8	q15, q8\n\t"
 2952        "aesmc.8	q15, q15\n\t"
 2953        "aese.8	q15, q9\n\t"
 2954        "aesmc.8	q15, q15\n\t"
 2955        "aese.8	q15, q10\n\t"
 2956        "aesmc.8	q15, q15\n\t"
 2957        "vld1.32	{q14}, [r12]\n\t"
 2958        "aese.8	q15, q11\n\t"
 2959        "aesmc.8	q15, q15\n\t"
 2960        "subs	%[sz], %[sz], #2\n\t"
 2961        "aese.8	q15, q14\n\t"
 2962        "aesmc.8	q15, q15\n\t"
 2963        "aese.8	q15, q12\n\t"
 2964        "veor.32	q15, q15, q13\n\t"
 2965        "beq	L_aes_cbc_encrypt_arm32_crypto_256_done_%=\n\t"
 2966        "vld1.8	{q14}, [%[in]]!\n\t"
 2967        "vst1.8	{q15}, [%[out]]!\n\t"
 2968        "\n"
 2969    "L_aes_cbc_encrypt_arm32_crypto_256_start_1_%=:\n\t"
 2970        "veor.32	q15, q15, q14\n\t"
 2971        "aese.8	q15, q0\n\t"
 2972        "aesmc.8	q15, q15\n\t"
 2973        "aese.8	q15, q1\n\t"
 2974        "aesmc.8	q15, q15\n\t"
 2975        "aese.8	q15, q2\n\t"
 2976        "aesmc.8	q15, q15\n\t"
 2977        "aese.8	q15, q3\n\t"
 2978        "aesmc.8	q15, q15\n\t"
 2979        "aese.8	q15, q4\n\t"
 2980        "aesmc.8	q15, q15\n\t"
 2981        "aese.8	q15, q5\n\t"
 2982        "aesmc.8	q15, q15\n\t"
 2983        "aese.8	q15, q6\n\t"
 2984        "aesmc.8	q15, q15\n\t"
 2985        "aese.8	q15, q7\n\t"
 2986        "aesmc.8	q15, q15\n\t"
 2987        "aese.8	q15, q8\n\t"
 2988        "aesmc.8	q15, q15\n\t"
 2989        "aese.8	q15, q9\n\t"
 2990        "aesmc.8	q15, q15\n\t"
 2991        "aese.8	q15, q10\n\t"
 2992        "aesmc.8	q15, q15\n\t"
 2993        "vld1.32	{q14}, [r12]\n\t"
 2994        "aese.8	q15, q11\n\t"
 2995        "aesmc.8	q15, q15\n\t"
 2996        "aese.8	q15, q14\n\t"
 2997        "aesmc.8	q15, q15\n\t"
 2998        "aese.8	q15, q12\n\t"
 2999        "veor.32	q15, q15, q13\n\t"
 3000        "\n"
 3001    "L_aes_cbc_encrypt_arm32_crypto_256_done_%=:\n\t"
 3002        "vst1.8	{q15}, [%[out]]!\n\t"
 3003#endif /* !NO_AES_256 */
 3004        "b	L_aes_cbc_encrypt_arm32_crypto_done_%=\n\t"
 3005        /* AES_CBC_128 */
 3006        "\n"
 3007    "L_aes_cbc_encrypt_arm32_crypto_start_128_%=:\n\t"
 3008#ifndef NO_AES_128
 3009        "vld1.8	{q14}, [%[in]]!\n\t"
 3010        "vldm.32	r12!, {q8-q10}\n\t"
 3011        "cmp	%[sz], #1\n\t"
 3012        "beq	L_aes_cbc_encrypt_arm32_crypto_128_start_1_%=\n\t"
 3013        "cmp	%[sz], #4\n\t"
 3014        "blt	L_aes_cbc_encrypt_arm32_crypto_128_start_2_%=\n\t"
 3015        "\n"
 3016    "L_aes_cbc_encrypt_arm32_crypto_128_start_4_%=:\n\t"
 3017        "veor.32	q15, q15, q14\n\t"
 3018        "aese.8	q15, q0\n\t"
 3019        "aesmc.8	q15, q15\n\t"
 3020        "aese.8	q15, q1\n\t"
 3021        "aesmc.8	q15, q15\n\t"
 3022        "aese.8	q15, q2\n\t"
 3023        "aesmc.8	q15, q15\n\t"
 3024        "aese.8	q15, q3\n\t"
 3025        "aesmc.8	q15, q15\n\t"
 3026        "aese.8	q15, q4\n\t"
 3027        "aesmc.8	q15, q15\n\t"
 3028        "aese.8	q15, q5\n\t"
 3029        "aesmc.8	q15, q15\n\t"
 3030        "aese.8	q15, q6\n\t"
 3031        "aesmc.8	q15, q15\n\t"
 3032        "aese.8	q15, q7\n\t"
 3033        "aesmc.8	q15, q15\n\t"
 3034        "aese.8	q15, q8\n\t"
 3035        "aesmc.8	q15, q15\n\t"
 3036        "vld1.8	{q14}, [%[in]]!\n\t"
 3037        "aese.8	q15, q9\n\t"
 3038        "veor.32	q15, q15, q10\n\t"
 3039        "vst1.8	{q15}, [%[out]]!\n\t"
 3040        "veor.32	q15, q15, q14\n\t"
 3041        "aese.8	q15, q0\n\t"
 3042        "aesmc.8	q15, q15\n\t"
 3043        "aese.8	q15, q1\n\t"
 3044        "aesmc.8	q15, q15\n\t"
 3045        "aese.8	q15, q2\n\t"
 3046        "aesmc.8	q15, q15\n\t"
 3047        "aese.8	q15, q3\n\t"
 3048        "aesmc.8	q15, q15\n\t"
 3049        "aese.8	q15, q4\n\t"
 3050        "aesmc.8	q15, q15\n\t"
 3051        "aese.8	q15, q5\n\t"
 3052        "aesmc.8	q15, q15\n\t"
 3053        "aese.8	q15, q6\n\t"
 3054        "aesmc.8	q15, q15\n\t"
 3055        "aese.8	q15, q7\n\t"
 3056        "aesmc.8	q15, q15\n\t"
 3057        "aese.8	q15, q8\n\t"
 3058        "aesmc.8	q15, q15\n\t"
 3059        "vld1.8	{q14}, [%[in]]!\n\t"
 3060        "aese.8	q15, q9\n\t"
 3061        "veor.32	q15, q15, q10\n\t"
 3062        "vst1.8	{q15}, [%[out]]!\n\t"
 3063        "veor.32	q15, q15, q14\n\t"
 3064        "aese.8	q15, q0\n\t"
 3065        "aesmc.8	q15, q15\n\t"
 3066        "aese.8	q15, q1\n\t"
 3067        "aesmc.8	q15, q15\n\t"
 3068        "aese.8	q15, q2\n\t"
 3069        "aesmc.8	q15, q15\n\t"
 3070        "aese.8	q15, q3\n\t"
 3071        "aesmc.8	q15, q15\n\t"
 3072        "aese.8	q15, q4\n\t"
 3073        "aesmc.8	q15, q15\n\t"
 3074        "aese.8	q15, q5\n\t"
 3075        "aesmc.8	q15, q15\n\t"
 3076        "aese.8	q15, q6\n\t"
 3077        "aesmc.8	q15, q15\n\t"
 3078        "aese.8	q15, q7\n\t"
 3079        "aesmc.8	q15, q15\n\t"
 3080        "aese.8	q15, q8\n\t"
 3081        "aesmc.8	q15, q15\n\t"
 3082        "vld1.8	{q14}, [%[in]]!\n\t"
 3083        "aese.8	q15, q9\n\t"
 3084        "veor.32	q15, q15, q10\n\t"
 3085        "vst1.8	{q15}, [%[out]]!\n\t"
 3086        "veor.32	q15, q15, q14\n\t"
 3087        "aese.8	q15, q0\n\t"
 3088        "aesmc.8	q15, q15\n\t"
 3089        "aese.8	q15, q1\n\t"
 3090        "aesmc.8	q15, q15\n\t"
 3091        "aese.8	q15, q2\n\t"
 3092        "aesmc.8	q15, q15\n\t"
 3093        "aese.8	q15, q3\n\t"
 3094        "aesmc.8	q15, q15\n\t"
 3095        "aese.8	q15, q4\n\t"
 3096        "aesmc.8	q15, q15\n\t"
 3097        "aese.8	q15, q5\n\t"
 3098        "aesmc.8	q15, q15\n\t"
 3099        "aese.8	q15, q6\n\t"
 3100        "aesmc.8	q15, q15\n\t"
 3101        "aese.8	q15, q7\n\t"
 3102        "aesmc.8	q15, q15\n\t"
 3103        "subs	%[sz], %[sz], #4\n\t"
 3104        "aese.8	q15, q8\n\t"
 3105        "aesmc.8	q15, q15\n\t"
 3106        "aese.8	q15, q9\n\t"
 3107        "veor.32	q15, q15, q10\n\t"
 3108        "beq	L_aes_cbc_encrypt_arm32_crypto_128_done_%=\n\t"
 3109        "vld1.8	{q14}, [%[in]]!\n\t"
 3110        "cmp	%[sz], #4\n\t"
 3111        "vst1.8	{q15}, [%[out]]!\n\t"
 3112        "bge	L_aes_cbc_encrypt_arm32_crypto_128_start_4_%=\n\t"
 3113        "cmp	%[sz], #2\n\t"
 3114        "blt	L_aes_cbc_encrypt_arm32_crypto_128_start_1_%=\n\t"
 3115        "\n"
 3116    "L_aes_cbc_encrypt_arm32_crypto_128_start_2_%=:\n\t"
 3117        "veor.32	q15, q15, q14\n\t"
 3118        "aese.8	q15, q0\n\t"
 3119        "aesmc.8	q15, q15\n\t"
 3120        "aese.8	q15, q1\n\t"
 3121        "aesmc.8	q15, q15\n\t"
 3122        "aese.8	q15, q2\n\t"
 3123        "aesmc.8	q15, q15\n\t"
 3124        "aese.8	q15, q3\n\t"
 3125        "aesmc.8	q15, q15\n\t"
 3126        "aese.8	q15, q4\n\t"
 3127        "aesmc.8	q15, q15\n\t"
 3128        "aese.8	q15, q5\n\t"
 3129        "aesmc.8	q15, q15\n\t"
 3130        "aese.8	q15, q6\n\t"
 3131        "aesmc.8	q15, q15\n\t"
 3132        "aese.8	q15, q7\n\t"
 3133        "aesmc.8	q15, q15\n\t"
 3134        "aese.8	q15, q8\n\t"
 3135        "aesmc.8	q15, q15\n\t"
 3136        "vld1.8	{q14}, [%[in]]!\n\t"
 3137        "aese.8	q15, q9\n\t"
 3138        "veor.32	q15, q15, q10\n\t"
 3139        "vst1.8	{q15}, [%[out]]!\n\t"
 3140        "veor.32	q15, q15, q14\n\t"
 3141        "aese.8	q15, q0\n\t"
 3142        "aesmc.8	q15, q15\n\t"
 3143        "aese.8	q15, q1\n\t"
 3144        "aesmc.8	q15, q15\n\t"
 3145        "aese.8	q15, q2\n\t"
 3146        "aesmc.8	q15, q15\n\t"
 3147        "aese.8	q15, q3\n\t"
 3148        "aesmc.8	q15, q15\n\t"
 3149        "aese.8	q15, q4\n\t"
 3150        "aesmc.8	q15, q15\n\t"
 3151        "aese.8	q15, q5\n\t"
 3152        "aesmc.8	q15, q15\n\t"
 3153        "aese.8	q15, q6\n\t"
 3154        "aesmc.8	q15, q15\n\t"
 3155        "aese.8	q15, q7\n\t"
 3156        "aesmc.8	q15, q15\n\t"
 3157        "subs	%[sz], %[sz], #2\n\t"
 3158        "aese.8	q15, q8\n\t"
 3159        "aesmc.8	q15, q15\n\t"
 3160        "aese.8	q15, q9\n\t"
 3161        "veor.32	q15, q15, q10\n\t"
 3162        "beq	L_aes_cbc_encrypt_arm32_crypto_128_done_%=\n\t"
 3163        "vld1.8	{q14}, [%[in]]!\n\t"
 3164        "vst1.8	{q15}, [%[out]]!\n\t"
 3165        "\n"
 3166    "L_aes_cbc_encrypt_arm32_crypto_128_start_1_%=:\n\t"
 3167        "veor.32	q15, q15, q14\n\t"
 3168        "aese.8	q15, q0\n\t"
 3169        "aesmc.8	q15, q15\n\t"
 3170        "aese.8	q15, q1\n\t"
 3171        "aesmc.8	q15, q15\n\t"
 3172        "aese.8	q15, q2\n\t"
 3173        "aesmc.8	q15, q15\n\t"
 3174        "aese.8	q15, q3\n\t"
 3175        "aesmc.8	q15, q15\n\t"
 3176        "aese.8	q15, q4\n\t"
 3177        "aesmc.8	q15, q15\n\t"
 3178        "aese.8	q15, q5\n\t"
 3179        "aesmc.8	q15, q15\n\t"
 3180        "aese.8	q15, q6\n\t"
 3181        "aesmc.8	q15, q15\n\t"
 3182        "aese.8	q15, q7\n\t"
 3183        "aesmc.8	q15, q15\n\t"
 3184        "aese.8	q15, q8\n\t"
 3185        "aesmc.8	q15, q15\n\t"
 3186        "aese.8	q15, q9\n\t"
 3187        "veor.32	q15, q15, q10\n\t"
 3188        "\n"
 3189    "L_aes_cbc_encrypt_arm32_crypto_128_done_%=:\n\t"
 3190        "vst1.8	{q15}, [%[out]]!\n\t"
 3191#endif /* !NO_AES_128 */
 3192        "\n"
 3193    "L_aes_cbc_encrypt_arm32_crypto_done_%=:\n\t"
 3194        "vst1.32	{q15}, [%[reg]]\n\t"
 3195        "pop	{%[key], %[nr]}\n\t"
 3196#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 3197        : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [reg] "+r" (reg),
 3198          [key] "+r" (key), [nr] "+r" (nr)
 3199        :
 3200#else
 3201        :
 3202        : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [reg] "r" (reg),
 3203          [key] "r" (key), [nr] "r" (nr)
 3204#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 3205        : "memory", "cc", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8",
 3206            "q9", "q10", "q11", "q12", "q13", "q14", "q15"
 3207    );
 3208}
 3209
 3210#ifdef HAVE_AES_DECRYPT
 3211#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 3212WC_OMIT_FRAME_POINTER void AES_CBC_decrypt_AARCH32(const byte* in_p,
 3213    byte* out_p, word32 sz_p, byte* reg_p, byte* key_p, int nr_p)
 3214#else
 3215WC_OMIT_FRAME_POINTER void AES_CBC_decrypt_AARCH32(const byte* in, byte* out,
 3216    word32 sz, byte* reg, byte* key, int nr)
 3217#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 3218{
 3219#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 3220    register const byte* in __asm__ ("r0") = (const byte*)in_p;
 3221    register byte* out __asm__ ("r1") = (byte*)out_p;
 3222    register word32 sz __asm__ ("r2") = (word32)sz_p;
 3223    register byte* reg __asm__ ("r3") = (byte*)reg_p;
 3224    register byte* key __asm__ ("r12") = (byte*)key_p;
 3225    register int nr __asm__ ("lr") = (int)nr_p;
 3226#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 3227
 3228    __asm__ __volatile__ (
 3229        "push	{%[key], %[nr]}\n\t"
 3230        "ldr	r12, [sp]\n\t"
 3231        "ldr	lr, [sp, #4]\n\t"
 3232        "vldm.32	r12!, {q0-q7}\n\t"
 3233        "vld1.32	{q13}, [%[reg]]\n\t"
 3234        "lsr	%[sz], %[sz], #4\n\t"
 3235        "cmp	lr, #12\n\t"
 3236        "blt	L_aes_cbc_decrypt_blocks_arm32_crypto_start_128_%=\n\t"
 3237        "bgt	L_aes_cbc_decrypt_blocks_arm32_crypto_start_256_%=\n\t"
 3238        /* AES_CBC_192 */
 3239#ifndef NO_AES_192
 3240        "vld1.32	{q8}, [r12]!\n\t"
 3241        "cmp	%[sz], #1\n\t"
 3242        "beq	L_aes_cbc_decrypt_blocks_arm32_crypto_192_start_1_%=\n\t"
 3243        "\n"
 3244    "L_aes_cbc_decrypt_blocks_arm32_crypto_192_start_2_%=:\n\t"
 3245        "vld1.8	{q14-q15}, [%[in]]!\n\t"
 3246        "vmov	q11, q13\n\t"
 3247        "vmov	q12, q14\n\t"
 3248        "vmov	q13, q15\n\t"
 3249        "aesd.8	q14, q0\n\t"
 3250        "aesimc.8	q14, q14\n\t"
 3251        "aesd.8	q15, q0\n\t"
 3252        "aesimc.8	q15, q15\n\t"
 3253        "aesd.8	q14, q1\n\t"
 3254        "aesimc.8	q14, q14\n\t"
 3255        "aesd.8	q15, q1\n\t"
 3256        "aesimc.8	q15, q15\n\t"
 3257        "aesd.8	q14, q2\n\t"
 3258        "aesimc.8	q14, q14\n\t"
 3259        "aesd.8	q15, q2\n\t"
 3260        "aesimc.8	q15, q15\n\t"
 3261        "aesd.8	q14, q3\n\t"
 3262        "aesimc.8	q14, q14\n\t"
 3263        "aesd.8	q15, q3\n\t"
 3264        "aesimc.8	q15, q15\n\t"
 3265        "aesd.8	q14, q4\n\t"
 3266        "aesimc.8	q14, q14\n\t"
 3267        "aesd.8	q15, q4\n\t"
 3268        "aesimc.8	q15, q15\n\t"
 3269        "aesd.8	q14, q5\n\t"
 3270        "aesimc.8	q14, q14\n\t"
 3271        "aesd.8	q15, q5\n\t"
 3272        "aesimc.8	q15, q15\n\t"
 3273        "aesd.8	q14, q6\n\t"
 3274        "aesimc.8	q14, q14\n\t"
 3275        "aesd.8	q15, q6\n\t"
 3276        "aesimc.8	q15, q15\n\t"
 3277        "aesd.8	q14, q7\n\t"
 3278        "aesimc.8	q14, q14\n\t"
 3279        "aesd.8	q15, q7\n\t"
 3280        "aesimc.8	q15, q15\n\t"
 3281        "vld1.32	{q9}, [r12]!\n\t"
 3282        "aesd.8	q14, q8\n\t"
 3283        "aesimc.8	q14, q14\n\t"
 3284        "aesd.8	q15, q8\n\t"
 3285        "aesimc.8	q15, q15\n\t"
 3286        "vld1.32	{q10}, [r12]!\n\t"
 3287        "aesd.8	q14, q9\n\t"
 3288        "aesimc.8	q14, q14\n\t"
 3289        "aesd.8	q15, q9\n\t"
 3290        "aesimc.8	q15, q15\n\t"
 3291        "vld1.32	{q9}, [r12]!\n\t"
 3292        "aesd.8	q14, q10\n\t"
 3293        "aesimc.8	q14, q14\n\t"
 3294        "aesd.8	q15, q10\n\t"
 3295        "aesimc.8	q15, q15\n\t"
 3296        "vld1.32	{q10}, [r12]\n\t"
 3297        "aesd.8	q14, q9\n\t"
 3298        "aesd.8	q15, q9\n\t"
 3299        "sub	%[sz], %[sz], #2\n\t"
 3300        "veor.32	q14, q14, q10\n\t"
 3301        "veor.32	q15, q15, q10\n\t"
 3302        "cmp	%[sz], #1\n\t"
 3303        "veor.32	q14, q14, q11\n\t"
 3304        "veor.32	q15, q15, q12\n\t"
 3305        "vst1.8	{q14-q15}, [%[out]]!\n\t"
 3306        "sub	r12, r12, #48\n\t"
 3307        "blt	L_aes_cbc_decrypt_blocks_arm32_crypto_192_done_%=\n\t"
 3308        "bgt	L_aes_cbc_decrypt_blocks_arm32_crypto_192_start_2_%=\n\t"
 3309        "\n"
 3310    "L_aes_cbc_decrypt_blocks_arm32_crypto_192_start_1_%=:\n\t"
 3311        "vld1.8	{q14}, [%[in]]!\n\t"
 3312        "vmov	q11, q13\n\t"
 3313        "vmov	q13, q14\n\t"
 3314        "aesd.8	q14, q0\n\t"
 3315        "aesimc.8	q14, q14\n\t"
 3316        "aesd.8	q14, q1\n\t"
 3317        "aesimc.8	q14, q14\n\t"
 3318        "aesd.8	q14, q2\n\t"
 3319        "aesimc.8	q14, q14\n\t"
 3320        "aesd.8	q14, q3\n\t"
 3321        "aesimc.8	q14, q14\n\t"
 3322        "aesd.8	q14, q4\n\t"
 3323        "aesimc.8	q14, q14\n\t"
 3324        "aesd.8	q14, q5\n\t"
 3325        "aesimc.8	q14, q14\n\t"
 3326        "aesd.8	q14, q6\n\t"
 3327        "aesimc.8	q14, q14\n\t"
 3328        "aesd.8	q14, q7\n\t"
 3329        "aesimc.8	q14, q14\n\t"
 3330        "vld1.32	{q9}, [r12]!\n\t"
 3331        "aesd.8	q14, q8\n\t"
 3332        "aesimc.8	q14, q14\n\t"
 3333        "vld1.32	{q10}, [r12]!\n\t"
 3334        "aesd.8	q14, q9\n\t"
 3335        "aesimc.8	q14, q14\n\t"
 3336        "vld1.32	{q9}, [r12]!\n\t"
 3337        "aesd.8	q14, q10\n\t"
 3338        "aesimc.8	q14, q14\n\t"
 3339        "vld1.32	{q10}, [r12]\n\t"
 3340        "aesd.8	q14, q9\n\t"
 3341        "veor.32	q14, q14, q10\n\t"
 3342        "veor.32	q14, q14, q11\n\t"
 3343        "vst1.8	{q14}, [%[out]]!\n\t"
 3344        "\n"
 3345    "L_aes_cbc_decrypt_blocks_arm32_crypto_192_done_%=:\n\t"
 3346#endif /* !NO_AES_192 */
 3347        "b	L_aes_cbc_decrypt_blocks_arm32_crypto_done_%=\n\t"
 3348        /* AES_CBC_256 */
 3349        "\n"
 3350    "L_aes_cbc_decrypt_blocks_arm32_crypto_start_256_%=:\n\t"
 3351#ifndef NO_AES_256
 3352        "vld1.32	{q8}, [r12]!\n\t"
 3353        "cmp	%[sz], #1\n\t"
 3354        "beq	L_aes_cbc_decrypt_blocks_arm32_crypto_256_start_1_%=\n\t"
 3355        "\n"
 3356    "L_aes_cbc_decrypt_blocks_arm32_crypto_256_start_2_%=:\n\t"
 3357        "vld1.8	{q14-q15}, [%[in]]!\n\t"
 3358        "vmov	q11, q13\n\t"
 3359        "vmov	q12, q14\n\t"
 3360        "vmov	q13, q15\n\t"
 3361        "aesd.8	q14, q0\n\t"
 3362        "aesimc.8	q14, q14\n\t"
 3363        "aesd.8	q15, q0\n\t"
 3364        "aesimc.8	q15, q15\n\t"
 3365        "aesd.8	q14, q1\n\t"
 3366        "aesimc.8	q14, q14\n\t"
 3367        "aesd.8	q15, q1\n\t"
 3368        "aesimc.8	q15, q15\n\t"
 3369        "aesd.8	q14, q2\n\t"
 3370        "aesimc.8	q14, q14\n\t"
 3371        "aesd.8	q15, q2\n\t"
 3372        "aesimc.8	q15, q15\n\t"
 3373        "aesd.8	q14, q3\n\t"
 3374        "aesimc.8	q14, q14\n\t"
 3375        "aesd.8	q15, q3\n\t"
 3376        "aesimc.8	q15, q15\n\t"
 3377        "aesd.8	q14, q4\n\t"
 3378        "aesimc.8	q14, q14\n\t"
 3379        "aesd.8	q15, q4\n\t"
 3380        "aesimc.8	q15, q15\n\t"
 3381        "aesd.8	q14, q5\n\t"
 3382        "aesimc.8	q14, q14\n\t"
 3383        "aesd.8	q15, q5\n\t"
 3384        "aesimc.8	q15, q15\n\t"
 3385        "aesd.8	q14, q6\n\t"
 3386        "aesimc.8	q14, q14\n\t"
 3387        "aesd.8	q15, q6\n\t"
 3388        "aesimc.8	q15, q15\n\t"
 3389        "aesd.8	q14, q7\n\t"
 3390        "aesimc.8	q14, q14\n\t"
 3391        "aesd.8	q15, q7\n\t"
 3392        "aesimc.8	q15, q15\n\t"
 3393        "vld1.32	{q9}, [r12]!\n\t"
 3394        "aesd.8	q14, q8\n\t"
 3395        "aesimc.8	q14, q14\n\t"
 3396        "aesd.8	q15, q8\n\t"
 3397        "aesimc.8	q15, q15\n\t"
 3398        "vld1.32	{q10}, [r12]!\n\t"
 3399        "aesd.8	q14, q9\n\t"
 3400        "aesimc.8	q14, q14\n\t"
 3401        "aesd.8	q15, q9\n\t"
 3402        "aesimc.8	q15, q15\n\t"
 3403        "vld1.32	{q9}, [r12]!\n\t"
 3404        "aesd.8	q14, q10\n\t"
 3405        "aesimc.8	q14, q14\n\t"
 3406        "aesd.8	q15, q10\n\t"
 3407        "aesimc.8	q15, q15\n\t"
 3408        "vld1.32	{q10}, [r12]!\n\t"
 3409        "aesd.8	q14, q9\n\t"
 3410        "aesimc.8	q14, q14\n\t"
 3411        "aesd.8	q15, q9\n\t"
 3412        "aesimc.8	q15, q15\n\t"
 3413        "vld1.32	{q9}, [r12]!\n\t"
 3414        "aesd.8	q14, q10\n\t"
 3415        "aesimc.8	q14, q14\n\t"
 3416        "aesd.8	q15, q10\n\t"
 3417        "aesimc.8	q15, q15\n\t"
 3418        "vld1.32	{q10}, [r12]\n\t"
 3419        "aesd.8	q14, q9\n\t"
 3420        "aesd.8	q15, q9\n\t"
 3421        "sub	%[sz], %[sz], #2\n\t"
 3422        "veor.32	q14, q14, q10\n\t"
 3423        "veor.32	q15, q15, q10\n\t"
 3424        "cmp	%[sz], #1\n\t"
 3425        "veor.32	q14, q14, q11\n\t"
 3426        "veor.32	q15, q15, q12\n\t"
 3427        "vst1.8	{q14-q15}, [%[out]]!\n\t"
 3428        "sub	r12, r12, #0x50\n\t"
 3429        "blt	L_aes_cbc_decrypt_blocks_arm32_crypto_256_done_%=\n\t"
 3430        "bgt	L_aes_cbc_decrypt_blocks_arm32_crypto_256_start_2_%=\n\t"
 3431        "\n"
 3432    "L_aes_cbc_decrypt_blocks_arm32_crypto_256_start_1_%=:\n\t"
 3433        "vld1.8	{q14}, [%[in]]!\n\t"
 3434        "vmov	q11, q13\n\t"
 3435        "vmov	q13, q14\n\t"
 3436        "aesd.8	q14, q0\n\t"
 3437        "aesimc.8	q14, q14\n\t"
 3438        "aesd.8	q14, q1\n\t"
 3439        "aesimc.8	q14, q14\n\t"
 3440        "aesd.8	q14, q2\n\t"
 3441        "aesimc.8	q14, q14\n\t"
 3442        "aesd.8	q14, q3\n\t"
 3443        "aesimc.8	q14, q14\n\t"
 3444        "aesd.8	q14, q4\n\t"
 3445        "aesimc.8	q14, q14\n\t"
 3446        "aesd.8	q14, q5\n\t"
 3447        "aesimc.8	q14, q14\n\t"
 3448        "aesd.8	q14, q6\n\t"
 3449        "aesimc.8	q14, q14\n\t"
 3450        "aesd.8	q14, q7\n\t"
 3451        "aesimc.8	q14, q14\n\t"
 3452        "vld1.32	{q9}, [r12]!\n\t"
 3453        "aesd.8	q14, q8\n\t"
 3454        "aesimc.8	q14, q14\n\t"
 3455        "vld1.32	{q10}, [r12]!\n\t"
 3456        "aesd.8	q14, q9\n\t"
 3457        "aesimc.8	q14, q14\n\t"
 3458        "vld1.32	{q9}, [r12]!\n\t"
 3459        "aesd.8	q14, q10\n\t"
 3460        "aesimc.8	q14, q14\n\t"
 3461        "vld1.32	{q10}, [r12]!\n\t"
 3462        "aesd.8	q14, q9\n\t"
 3463        "aesimc.8	q14, q14\n\t"
 3464        "vld1.32	{q9}, [r12]!\n\t"
 3465        "aesd.8	q14, q10\n\t"
 3466        "aesimc.8	q14, q14\n\t"
 3467        "vld1.32	{q10}, [r12]\n\t"
 3468        "aesd.8	q14, q9\n\t"
 3469        "veor.32	q14, q14, q10\n\t"
 3470        "veor.32	q14, q14, q11\n\t"
 3471        "vst1.8	{q14}, [%[out]]!\n\t"
 3472        "\n"
 3473    "L_aes_cbc_decrypt_blocks_arm32_crypto_256_done_%=:\n\t"
 3474#endif /* !NO_AES_256 */
 3475        "b	L_aes_cbc_decrypt_blocks_arm32_crypto_done_%=\n\t"
 3476        /* AES_CBC_128 */
 3477        "\n"
 3478    "L_aes_cbc_decrypt_blocks_arm32_crypto_start_128_%=:\n\t"
 3479#ifndef NO_AES_128
 3480        "vldm.32	r12!, {q8-q10}\n\t"
 3481        "cmp	%[sz], #1\n\t"
 3482        "beq	L_aes_cbc_decrypt_blocks_arm32_crypto_128_start_1_%=\n\t"
 3483        "\n"
 3484    "L_aes_cbc_decrypt_blocks_arm32_crypto_128_start_2_%=:\n\t"
 3485        "vld1.8	{q14-q15}, [%[in]]!\n\t"
 3486        "vmov	q11, q13\n\t"
 3487        "vmov	q12, q14\n\t"
 3488        "vmov	q13, q15\n\t"
 3489        "aesd.8	q14, q0\n\t"
 3490        "aesimc.8	q14, q14\n\t"
 3491        "aesd.8	q15, q0\n\t"
 3492        "aesimc.8	q15, q15\n\t"
 3493        "aesd.8	q14, q1\n\t"
 3494        "aesimc.8	q14, q14\n\t"
 3495        "aesd.8	q15, q1\n\t"
 3496        "aesimc.8	q15, q15\n\t"
 3497        "aesd.8	q14, q2\n\t"
 3498        "aesimc.8	q14, q14\n\t"
 3499        "aesd.8	q15, q2\n\t"
 3500        "aesimc.8	q15, q15\n\t"
 3501        "aesd.8	q14, q3\n\t"
 3502        "aesimc.8	q14, q14\n\t"
 3503        "aesd.8	q15, q3\n\t"
 3504        "aesimc.8	q15, q15\n\t"
 3505        "aesd.8	q14, q4\n\t"
 3506        "aesimc.8	q14, q14\n\t"
 3507        "aesd.8	q15, q4\n\t"
 3508        "aesimc.8	q15, q15\n\t"
 3509        "aesd.8	q14, q5\n\t"
 3510        "aesimc.8	q14, q14\n\t"
 3511        "aesd.8	q15, q5\n\t"
 3512        "aesimc.8	q15, q15\n\t"
 3513        "aesd.8	q14, q6\n\t"
 3514        "aesimc.8	q14, q14\n\t"
 3515        "aesd.8	q15, q6\n\t"
 3516        "aesimc.8	q15, q15\n\t"
 3517        "aesd.8	q14, q7\n\t"
 3518        "aesimc.8	q14, q14\n\t"
 3519        "aesd.8	q15, q7\n\t"
 3520        "aesimc.8	q15, q15\n\t"
 3521        "aesd.8	q14, q8\n\t"
 3522        "aesimc.8	q14, q14\n\t"
 3523        "aesd.8	q15, q8\n\t"
 3524        "aesimc.8	q15, q15\n\t"
 3525        "aesd.8	q14, q9\n\t"
 3526        "aesd.8	q15, q9\n\t"
 3527        "sub	%[sz], %[sz], #2\n\t"
 3528        "veor.32	q14, q14, q10\n\t"
 3529        "veor.32	q15, q15, q10\n\t"
 3530        "cmp	%[sz], #1\n\t"
 3531        "veor.32	q14, q14, q11\n\t"
 3532        "veor.32	q15, q15, q12\n\t"
 3533        "vst1.8	{q14-q15}, [%[out]]!\n\t"
 3534        "blt	L_aes_cbc_decrypt_blocks_arm32_crypto_128_done_%=\n\t"
 3535        "bgt	L_aes_cbc_decrypt_blocks_arm32_crypto_128_start_2_%=\n\t"
 3536        "\n"
 3537    "L_aes_cbc_decrypt_blocks_arm32_crypto_128_start_1_%=:\n\t"
 3538        "vld1.8	{q14}, [%[in]]!\n\t"
 3539        "vmov	q11, q13\n\t"
 3540        "vmov	q13, q14\n\t"
 3541        "aesd.8	q14, q0\n\t"
 3542        "aesimc.8	q14, q14\n\t"
 3543        "aesd.8	q14, q1\n\t"
 3544        "aesimc.8	q14, q14\n\t"
 3545        "aesd.8	q14, q2\n\t"
 3546        "aesimc.8	q14, q14\n\t"
 3547        "aesd.8	q14, q3\n\t"
 3548        "aesimc.8	q14, q14\n\t"
 3549        "aesd.8	q14, q4\n\t"
 3550        "aesimc.8	q14, q14\n\t"
 3551        "aesd.8	q14, q5\n\t"
 3552        "aesimc.8	q14, q14\n\t"
 3553        "aesd.8	q14, q6\n\t"
 3554        "aesimc.8	q14, q14\n\t"
 3555        "aesd.8	q14, q7\n\t"
 3556        "aesimc.8	q14, q14\n\t"
 3557        "aesd.8	q14, q8\n\t"
 3558        "aesimc.8	q14, q14\n\t"
 3559        "aesd.8	q14, q9\n\t"
 3560        "veor.32	q14, q14, q10\n\t"
 3561        "veor.32	q14, q14, q11\n\t"
 3562        "vst1.8	{q14}, [%[out]]!\n\t"
 3563        "\n"
 3564    "L_aes_cbc_decrypt_blocks_arm32_crypto_128_done_%=:\n\t"
 3565#endif /* !NO_AES_128 */
 3566        "\n"
 3567    "L_aes_cbc_decrypt_blocks_arm32_crypto_done_%=:\n\t"
 3568        "vst1.32	{q13}, [%[reg]]\n\t"
 3569        "pop	{%[key], %[nr]}\n\t"
 3570#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 3571        : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [reg] "+r" (reg),
 3572          [key] "+r" (key), [nr] "+r" (nr)
 3573        :
 3574#else
 3575        :
 3576        : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [reg] "r" (reg),
 3577          [key] "r" (key), [nr] "r" (nr)
 3578#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 3579        : "memory", "cc", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8",
 3580            "q9", "q10", "q11", "q12", "q13", "q14", "q15"
 3581    );
 3582}
 3583
 3584#endif /* HAVE_AES_DECRYPT */
 3585#endif /* HAVE_AES_CBC */
 3586#ifdef WOLFSSL_AES_COUNTER
 3587#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 3588WC_OMIT_FRAME_POINTER void AES_CTR_encrypt_AARCH32(const byte* in_p,
 3589    byte* out_p, word32 sz_p, byte* reg_p, byte* key_p, byte* tmp_p,
 3590    word32* left_p, word32 nr_p)
 3591#else
 3592WC_OMIT_FRAME_POINTER void AES_CTR_encrypt_AARCH32(const byte* in, byte* out,
 3593    word32 sz, byte* reg, byte* key, byte* tmp, word32* left, word32 nr)
 3594#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 3595{
 3596#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 3597    register const byte* in __asm__ ("r0") = (const byte*)in_p;
 3598    register byte* out __asm__ ("r1") = (byte*)out_p;
 3599    register word32 sz __asm__ ("r2") = (word32)sz_p;
 3600    register byte* reg __asm__ ("r3") = (byte*)reg_p;
 3601    register byte* key __asm__ ("r12") = (byte*)key_p;
 3602    register byte* tmp __asm__ ("lr") = (byte*)tmp_p;
 3603    register word32* left __asm__ ("r4") = (word32*)left_p;
 3604    register word32 nr __asm__ ("r5") = (word32)nr_p;
 3605#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 3606
 3607    __asm__ __volatile__ (
 3608        "push	{%[left], %[nr]}\n\t"
 3609        "push	{%[key], %[tmp]}\n\t"
 3610        "vld1.32	{q0}, [%[reg]]\n\t"
 3611        "ldr	r12, [sp]\n\t"
 3612        "vrev32.8	q2, q0\n\t"
 3613        "lsr	r4, %[sz], #4\n\t"
 3614        "vmov	r5, r6, d4\n\t"
 3615        "and	%[sz], %[sz], #15\n\t"
 3616        "vmov	r7, r8, d5\n\t"
 3617        "vldm.32	r12!, {q3-q10}\n\t"
 3618        "ldr	lr, [sp, #12]\n\t"
 3619        "cmp	lr, #12\n\t"
 3620        "blt	L_aes_ctr_encrypt_arm32_crypto_start_128_%=\n\t"
 3621        "bgt	L_aes_ctr_encrypt_arm32_crypto_start_256_%=\n\t"
 3622        /* AES_CTR_192 */
 3623#ifndef NO_AES_192
 3624        "vldm.32	r12!, {q11-q13}\n\t"
 3625        "mov	lr, #1\n\t"
 3626        "cmp	r4, #1\n\t"
 3627        "blt	L_aes_ctr_encrypt_arm32_crypto_192_done_%=\n\t"
 3628        "beq	L_aes_ctr_encrypt_arm32_crypto_192_start_1_%=\n\t"
 3629        "adds	r8, r8, #1\n\t"
 3630        "adcs	r7, r7, #0\n\t"
 3631        "adcs	r6, r6, #0\n\t"
 3632        "adc	r5, r5, #0\n\t"
 3633        "vmov	d3, r7, r8\n\t"
 3634        "vmov	d2, r5, r6\n\t"
 3635        "vrev32.8	q1, q1\n\t"
 3636        "\n"
 3637    "L_aes_ctr_encrypt_arm32_crypto_192_start_2_%=:\n\t"
 3638        "aese.8	q0, q3\n\t"
 3639        "aesmc.8	q0, q0\n\t"
 3640        "aese.8	q1, q3\n\t"
 3641        "aesmc.8	q1, q1\n\t"
 3642        "adds	r8, r8, #1\n\t"
 3643        "aese.8	q0, q4\n\t"
 3644        "aesmc.8	q0, q0\n\t"
 3645        "aese.8	q1, q4\n\t"
 3646        "aesmc.8	q1, q1\n\t"
 3647        "adcs	r7, r7, #0\n\t"
 3648        "aese.8	q0, q5\n\t"
 3649        "aesmc.8	q0, q0\n\t"
 3650        "aese.8	q1, q5\n\t"
 3651        "aesmc.8	q1, q1\n\t"
 3652        "adcs	r6, r6, #0\n\t"
 3653        "aese.8	q0, q6\n\t"
 3654        "aesmc.8	q0, q0\n\t"
 3655        "aese.8	q1, q6\n\t"
 3656        "aesmc.8	q1, q1\n\t"
 3657        "adc	r5, r5, #0\n\t"
 3658        "aese.8	q0, q7\n\t"
 3659        "aesmc.8	q0, q0\n\t"
 3660        "aese.8	q1, q7\n\t"
 3661        "aesmc.8	q1, q1\n\t"
 3662        "aese.8	q0, q8\n\t"
 3663        "aesmc.8	q0, q0\n\t"
 3664        "aese.8	q1, q8\n\t"
 3665        "aesmc.8	q1, q1\n\t"
 3666        "aese.8	q0, q9\n\t"
 3667        "aesmc.8	q0, q0\n\t"
 3668        "aese.8	q1, q9\n\t"
 3669        "aesmc.8	q1, q1\n\t"
 3670        "aese.8	q0, q10\n\t"
 3671        "aesmc.8	q0, q0\n\t"
 3672        "aese.8	q1, q10\n\t"
 3673        "aesmc.8	q1, q1\n\t"
 3674        "aese.8	q0, q11\n\t"
 3675        "aesmc.8	q0, q0\n\t"
 3676        "aese.8	q1, q11\n\t"
 3677        "aesmc.8	q1, q1\n\t"
 3678        "aese.8	q0, q12\n\t"
 3679        "aesmc.8	q0, q0\n\t"
 3680        "aese.8	q1, q12\n\t"
 3681        "aesmc.8	q1, q1\n\t"
 3682        "vld1.32	{q14}, [r12]!\n\t"
 3683        "vmov	d5, r7, r8\n\t"
 3684        "aese.8	q0, q13\n\t"
 3685        "aesmc.8	q0, q0\n\t"
 3686        "aese.8	q1, q13\n\t"
 3687        "aesmc.8	q1, q1\n\t"
 3688        "vld1.32	{q15}, [r12]\n\t"
 3689        "vmov	d4, r5, r6\n\t"
 3690        "aese.8	q0, q14\n\t"
 3691        "aese.8	q1, q14\n\t"
 3692        "sub	r4, r4, #2\n\t"
 3693        "veor.32	q0, q0, q15\n\t"
 3694        "veor.32	q1, q1, q15\n\t"
 3695        "adds	r8, r8, #1\n\t"
 3696        "vld1.8	{q14-q15}, [%[in]]!\n\t"
 3697        "adcs	r7, r7, #0\n\t"
 3698        "sub	r12, r12, #16\n\t"
 3699        "veor.32	q14, q14, q0\n\t"
 3700        "veor.32	q15, q15, q1\n\t"
 3701        "adcs	r6, r6, #0\n\t"
 3702        "vrev32.8	q0, q2\n\t"
 3703        "adc	r5, r5, #0\n\t"
 3704        "vmov	d2, r5, r6\n\t"
 3705        "vmov	d3, r7, r8\n\t"
 3706        "cmp	r4, #1\n\t"
 3707        "vst1.8	{q14-q15}, [%[out]]!\n\t"
 3708        "vrev32.8	q1, q1\n\t"
 3709        "bgt	L_aes_ctr_encrypt_arm32_crypto_192_start_2_%=\n\t"
 3710        "mov	lr, #0\n\t"
 3711        "blt	L_aes_ctr_encrypt_arm32_crypto_192_done_%=\n\t"
 3712        "\n"
 3713    "L_aes_ctr_encrypt_arm32_crypto_192_start_1_%=:\n\t"
 3714        "aese.8	q0, q3\n\t"
 3715        "aesmc.8	q0, q0\n\t"
 3716        "adds	r8, r8, lr\n\t"
 3717        "aese.8	q0, q4\n\t"
 3718        "aesmc.8	q0, q0\n\t"
 3719        "adcs	r7, r7, #0\n\t"
 3720        "aese.8	q0, q5\n\t"
 3721        "aesmc.8	q0, q0\n\t"
 3722        "adcs	r6, r6, #0\n\t"
 3723        "aese.8	q0, q6\n\t"
 3724        "aesmc.8	q0, q0\n\t"
 3725        "adc	r5, r5, #0\n\t"
 3726        "aese.8	q0, q7\n\t"
 3727        "aesmc.8	q0, q0\n\t"
 3728        "vmov	d5, r7, r8\n\t"
 3729        "aese.8	q0, q8\n\t"
 3730        "aesmc.8	q0, q0\n\t"
 3731        "vmov	d4, r5, r6\n\t"
 3732        "aese.8	q0, q9\n\t"
 3733        "aesmc.8	q0, q0\n\t"
 3734        "aese.8	q0, q10\n\t"
 3735        "aesmc.8	q0, q0\n\t"
 3736        "aese.8	q0, q11\n\t"
 3737        "aesmc.8	q0, q0\n\t"
 3738        "aese.8	q0, q12\n\t"
 3739        "aesmc.8	q0, q0\n\t"
 3740        "vld1.32	{q14}, [r12]!\n\t"
 3741        "aese.8	q0, q13\n\t"
 3742        "aesmc.8	q0, q0\n\t"
 3743        "vld1.32	{q15}, [r12]\n\t"
 3744        "aese.8	q0, q14\n\t"
 3745        "vld1.8	{q14}, [%[in]]!\n\t"
 3746        "veor.32	q0, q0, q15\n\t"
 3747        "veor.32	q14, q14, q0\n\t"
 3748        "sub	r12, r12, #16\n\t"
 3749        "vst1.8	{q14}, [%[out]]!\n\t"
 3750        "mov	lr, #1\n\t"
 3751        "vrev32.8	q0, q2\n\t"
 3752        "\n"
 3753    "L_aes_ctr_encrypt_arm32_crypto_192_done_%=:\n\t"
 3754        "cmp	%[sz], #0\n\t"
 3755        "beq	L_aes_ctr_encrypt_arm32_crypto_192_partial_done_%=\n\t"
 3756        "ldr	r4, [sp, #8]\n\t"
 3757        "aese.8	q0, q3\n\t"
 3758        "aesmc.8	q0, q0\n\t"
 3759        "adds	r8, r8, lr\n\t"
 3760        "aese.8	q0, q4\n\t"
 3761        "aesmc.8	q0, q0\n\t"
 3762        "adcs	r7, r7, #0\n\t"
 3763        "aese.8	q0, q5\n\t"
 3764        "aesmc.8	q0, q0\n\t"
 3765        "adcs	r6, r6, #0\n\t"
 3766        "aese.8	q0, q6\n\t"
 3767        "aesmc.8	q0, q0\n\t"
 3768        "adc	r5, r5, #0\n\t"
 3769        "aese.8	q0, q7\n\t"
 3770        "aesmc.8	q0, q0\n\t"
 3771        "vmov	d5, r7, r8\n\t"
 3772        "aese.8	q0, q8\n\t"
 3773        "aesmc.8	q0, q0\n\t"
 3774        "vmov	d4, r5, r6\n\t"
 3775        "aese.8	q0, q9\n\t"
 3776        "aesmc.8	q0, q0\n\t"
 3777        "aese.8	q0, q10\n\t"
 3778        "aesmc.8	q0, q0\n\t"
 3779        "aese.8	q0, q11\n\t"
 3780        "aesmc.8	q0, q0\n\t"
 3781        "aese.8	q0, q12\n\t"
 3782        "aesmc.8	q0, q0\n\t"
 3783        "vld1.32	{q14}, [r12]!\n\t"
 3784        "aese.8	q0, q13\n\t"
 3785        "aesmc.8	q0, q0\n\t"
 3786        "vld1.32	{q15}, [r12]\n\t"
 3787        "ldr	lr, [sp, #4]\n\t"
 3788        "aese.8	q0, q14\n\t"
 3789        "veor.32	q0, q0, q15\n\t"
 3790        "vst1.32	{q0}, [lr]\n\t"
 3791        "vmov	q0, q2\n\t"
 3792        "mov	r5, #16\n\t"
 3793        "sub	r5, r5, %[sz]\n\t"
 3794        "\n"
 3795    "L_aes_ctr_encrypt_arm32_crypto_192_start_byte_%=:\n\t"
 3796        "ldrb	r7, [lr], #1\n\t"
 3797        "ldrb	r8, [%[in]], #1\n\t"
 3798        "eor	r7, r7, r8\n\t"
 3799        "subs	%[sz], %[sz], #1\n\t"
 3800        "strb	r7, [%[out]], #1\n\t"
 3801        "bgt	L_aes_ctr_encrypt_arm32_crypto_192_start_byte_%=\n\t"
 3802        "vrev32.8	q0, q2\n\t"
 3803        "str	r5, [r4]\n\t"
 3804        "\n"
 3805    "L_aes_ctr_encrypt_arm32_crypto_192_partial_done_%=:\n\t"
 3806#endif /* !NO_AES_192 */
 3807        "b	L_aes_ctr_encrypt_arm32_crypto_done_%=\n\t"
 3808        /* AES_CTR_256 */
 3809        "\n"
 3810    "L_aes_ctr_encrypt_arm32_crypto_start_256_%=:\n\t"
 3811#ifndef NO_AES_256
 3812        "vldm.32	r12!, {q11-q13}\n\t"
 3813        "mov	lr, #1\n\t"
 3814        "cmp	r4, #1\n\t"
 3815        "blt	L_aes_ctr_encrypt_arm32_crypto_256_done_%=\n\t"
 3816        "beq	L_aes_ctr_encrypt_arm32_crypto_256_start_1_%=\n\t"
 3817        "adds	r8, r8, #1\n\t"
 3818        "adcs	r7, r7, #0\n\t"
 3819        "adcs	r6, r6, #0\n\t"
 3820        "adc	r5, r5, #0\n\t"
 3821        "vmov	d3, r7, r8\n\t"
 3822        "vmov	d2, r5, r6\n\t"
 3823        "vrev32.8	q1, q1\n\t"
 3824        "\n"
 3825    "L_aes_ctr_encrypt_arm32_crypto_256_start_2_%=:\n\t"
 3826        "aese.8	q0, q3\n\t"
 3827        "aesmc.8	q0, q0\n\t"
 3828        "aese.8	q1, q3\n\t"
 3829        "aesmc.8	q1, q1\n\t"
 3830        "adds	r8, r8, #1\n\t"
 3831        "aese.8	q0, q4\n\t"
 3832        "aesmc.8	q0, q0\n\t"
 3833        "aese.8	q1, q4\n\t"
 3834        "aesmc.8	q1, q1\n\t"
 3835        "adcs	r7, r7, #0\n\t"
 3836        "aese.8	q0, q5\n\t"
 3837        "aesmc.8	q0, q0\n\t"
 3838        "aese.8	q1, q5\n\t"
 3839        "aesmc.8	q1, q1\n\t"
 3840        "adcs	r6, r6, #0\n\t"
 3841        "aese.8	q0, q6\n\t"
 3842        "aesmc.8	q0, q0\n\t"
 3843        "aese.8	q1, q6\n\t"
 3844        "aesmc.8	q1, q1\n\t"
 3845        "adc	r5, r5, #0\n\t"
 3846        "aese.8	q0, q7\n\t"
 3847        "aesmc.8	q0, q0\n\t"
 3848        "aese.8	q1, q7\n\t"
 3849        "aesmc.8	q1, q1\n\t"
 3850        "aese.8	q0, q8\n\t"
 3851        "aesmc.8	q0, q0\n\t"
 3852        "aese.8	q1, q8\n\t"
 3853        "aesmc.8	q1, q1\n\t"
 3854        "aese.8	q0, q9\n\t"
 3855        "aesmc.8	q0, q0\n\t"
 3856        "aese.8	q1, q9\n\t"
 3857        "aesmc.8	q1, q1\n\t"
 3858        "aese.8	q0, q10\n\t"
 3859        "aesmc.8	q0, q0\n\t"
 3860        "aese.8	q1, q10\n\t"
 3861        "aesmc.8	q1, q1\n\t"
 3862        "aese.8	q0, q11\n\t"
 3863        "aesmc.8	q0, q0\n\t"
 3864        "aese.8	q1, q11\n\t"
 3865        "aesmc.8	q1, q1\n\t"
 3866        "aese.8	q0, q12\n\t"
 3867        "aesmc.8	q0, q0\n\t"
 3868        "aese.8	q1, q12\n\t"
 3869        "aesmc.8	q1, q1\n\t"
 3870        "vld1.32	{q14}, [r12]!\n\t"
 3871        "vmov	d5, r7, r8\n\t"
 3872        "aese.8	q0, q13\n\t"
 3873        "aesmc.8	q0, q0\n\t"
 3874        "aese.8	q1, q13\n\t"
 3875        "aesmc.8	q1, q1\n\t"
 3876        "vld1.32	{q15}, [r12]!\n\t"
 3877        "vmov	d4, r5, r6\n\t"
 3878        "aese.8	q0, q14\n\t"
 3879        "aesmc.8	q0, q0\n\t"
 3880        "aese.8	q1, q14\n\t"
 3881        "aesmc.8	q1, q1\n\t"
 3882        "vld1.32	{q14}, [r12]!\n\t"
 3883        "adds	r8, r8, #1\n\t"
 3884        "aese.8	q0, q15\n\t"
 3885        "aesmc.8	q0, q0\n\t"
 3886        "aese.8	q1, q15\n\t"
 3887        "aesmc.8	q1, q1\n\t"
 3888        "vld1.32	{q15}, [r12]\n\t"
 3889        "adcs	r7, r7, #0\n\t"
 3890        "aese.8	q0, q14\n\t"
 3891        "aese.8	q1, q14\n\t"
 3892        "sub	r4, r4, #2\n\t"
 3893        "veor.32	q0, q0, q15\n\t"
 3894        "veor.32	q1, q1, q15\n\t"
 3895        "adcs	r6, r6, #0\n\t"
 3896        "vld1.8	{q14-q15}, [%[in]]!\n\t"
 3897        "sub	r12, r12, #48\n\t"
 3898        "veor.32	q14, q14, q0\n\t"
 3899        "veor.32	q15, q15, q1\n\t"
 3900        "adc	r5, r5, #0\n\t"
 3901        "vrev32.8	q0, q2\n\t"
 3902        "vmov	d2, r5, r6\n\t"
 3903        "vmov	d3, r7, r8\n\t"
 3904        "cmp	r4, #1\n\t"
 3905        "vst1.8	{q14-q15}, [%[out]]!\n\t"
 3906        "vrev32.8	q1, q1\n\t"
 3907        "bgt	L_aes_ctr_encrypt_arm32_crypto_256_start_2_%=\n\t"
 3908        "mov	lr, #0\n\t"
 3909        "blt	L_aes_ctr_encrypt_arm32_crypto_256_done_%=\n\t"
 3910        "\n"
 3911    "L_aes_ctr_encrypt_arm32_crypto_256_start_1_%=:\n\t"
 3912        "aese.8	q0, q3\n\t"
 3913        "aesmc.8	q0, q0\n\t"
 3914        "adds	r8, r8, lr\n\t"
 3915        "aese.8	q0, q4\n\t"
 3916        "aesmc.8	q0, q0\n\t"
 3917        "adcs	r7, r7, #0\n\t"
 3918        "aese.8	q0, q5\n\t"
 3919        "aesmc.8	q0, q0\n\t"
 3920        "adcs	r6, r6, #0\n\t"
 3921        "aese.8	q0, q6\n\t"
 3922        "aesmc.8	q0, q0\n\t"
 3923        "adc	r5, r5, #0\n\t"
 3924        "aese.8	q0, q7\n\t"
 3925        "aesmc.8	q0, q0\n\t"
 3926        "vmov	d5, r7, r8\n\t"
 3927        "aese.8	q0, q8\n\t"
 3928        "aesmc.8	q0, q0\n\t"
 3929        "vmov	d4, r5, r6\n\t"
 3930        "aese.8	q0, q9\n\t"
 3931        "aesmc.8	q0, q0\n\t"
 3932        "aese.8	q0, q10\n\t"
 3933        "aesmc.8	q0, q0\n\t"
 3934        "aese.8	q0, q11\n\t"
 3935        "aesmc.8	q0, q0\n\t"
 3936        "aese.8	q0, q12\n\t"
 3937        "aesmc.8	q0, q0\n\t"
 3938        "vld1.32	{q14}, [r12]!\n\t"
 3939        "aese.8	q0, q13\n\t"
 3940        "aesmc.8	q0, q0\n\t"
 3941        "vld1.32	{q15}, [r12]!\n\t"
 3942        "aese.8	q0, q14\n\t"
 3943        "aesmc.8	q0, q0\n\t"
 3944        "vld1.32	{q14}, [r12]!\n\t"
 3945        "aese.8	q0, q15\n\t"
 3946        "aesmc.8	q0, q0\n\t"
 3947        "vld1.32	{q15}, [r12]\n\t"
 3948        "aese.8	q0, q14\n\t"
 3949        "vld1.8	{q14}, [%[in]]!\n\t"
 3950        "veor.32	q0, q0, q15\n\t"
 3951        "veor.32	q14, q14, q0\n\t"
 3952        "sub	r12, r12, #48\n\t"
 3953        "vst1.8	{q14}, [%[out]]!\n\t"
 3954        "mov	lr, #1\n\t"
 3955        "vrev32.8	q0, q2\n\t"
 3956        "\n"
 3957    "L_aes_ctr_encrypt_arm32_crypto_256_done_%=:\n\t"
 3958        "cmp	%[sz], #0\n\t"
 3959        "beq	L_aes_ctr_encrypt_arm32_crypto_256_partial_done_%=\n\t"
 3960        "ldr	r4, [sp, #8]\n\t"
 3961        "aese.8	q0, q3\n\t"
 3962        "aesmc.8	q0, q0\n\t"
 3963        "adds	r8, r8, lr\n\t"
 3964        "aese.8	q0, q4\n\t"
 3965        "aesmc.8	q0, q0\n\t"
 3966        "adcs	r7, r7, #0\n\t"
 3967        "aese.8	q0, q5\n\t"
 3968        "aesmc.8	q0, q0\n\t"
 3969        "adcs	r6, r6, #0\n\t"
 3970        "aese.8	q0, q6\n\t"
 3971        "aesmc.8	q0, q0\n\t"
 3972        "adc	r5, r5, #0\n\t"
 3973        "aese.8	q0, q7\n\t"
 3974        "aesmc.8	q0, q0\n\t"
 3975        "vmov	d5, r7, r8\n\t"
 3976        "aese.8	q0, q8\n\t"
 3977        "aesmc.8	q0, q0\n\t"
 3978        "vmov	d4, r5, r6\n\t"
 3979        "aese.8	q0, q9\n\t"
 3980        "aesmc.8	q0, q0\n\t"
 3981        "aese.8	q0, q10\n\t"
 3982        "aesmc.8	q0, q0\n\t"
 3983        "aese.8	q0, q11\n\t"
 3984        "aesmc.8	q0, q0\n\t"
 3985        "aese.8	q0, q12\n\t"
 3986        "aesmc.8	q0, q0\n\t"
 3987        "vld1.32	{q14}, [r12]!\n\t"
 3988        "aese.8	q0, q13\n\t"
 3989        "aesmc.8	q0, q0\n\t"
 3990        "vld1.32	{q15}, [r12]!\n\t"
 3991        "aese.8	q0, q14\n\t"
 3992        "aesmc.8	q0, q0\n\t"
 3993        "vld1.32	{q14}, [r12]!\n\t"
 3994        "aese.8	q0, q15\n\t"
 3995        "aesmc.8	q0, q0\n\t"
 3996        "vld1.32	{q15}, [r12]\n\t"
 3997        "ldr	lr, [sp, #4]\n\t"
 3998        "aese.8	q0, q14\n\t"
 3999        "veor.32	q0, q0, q15\n\t"
 4000        "vst1.32	{q0}, [lr]\n\t"
 4001        "vmov	q0, q2\n\t"
 4002        "mov	r5, #16\n\t"
 4003        "sub	r5, r5, %[sz]\n\t"
 4004        "\n"
 4005    "L_aes_ctr_encrypt_arm32_crypto_256_start_byte_%=:\n\t"
 4006        "ldrb	r7, [lr], #1\n\t"
 4007        "ldrb	r8, [%[in]], #1\n\t"
 4008        "eor	r7, r7, r8\n\t"
 4009        "subs	%[sz], %[sz], #1\n\t"
 4010        "strb	r7, [%[out]], #1\n\t"
 4011        "bgt	L_aes_ctr_encrypt_arm32_crypto_256_start_byte_%=\n\t"
 4012        "vrev32.8	q0, q2\n\t"
 4013        "str	r5, [r4]\n\t"
 4014        "\n"
 4015    "L_aes_ctr_encrypt_arm32_crypto_256_partial_done_%=:\n\t"
 4016#endif /* !NO_AES_256 */
 4017        "b	L_aes_ctr_encrypt_arm32_crypto_done_%=\n\t"
 4018        /* AES_CTR_128 */
 4019        "\n"
 4020    "L_aes_ctr_encrypt_arm32_crypto_start_128_%=:\n\t"
 4021#ifndef NO_AES_128
 4022        "vldm.32	r12!, {q11-q13}\n\t"
 4023        "mov	lr, #1\n\t"
 4024        "cmp	r4, #1\n\t"
 4025        "blt	L_aes_ctr_encrypt_arm32_crypto_128_done_%=\n\t"
 4026        "beq	L_aes_ctr_encrypt_arm32_crypto_128_start_1_%=\n\t"
 4027        "adds	r8, r8, #1\n\t"
 4028        "adcs	r7, r7, #0\n\t"
 4029        "adcs	r6, r6, #0\n\t"
 4030        "adc	r5, r5, #0\n\t"
 4031        "vmov	d3, r7, r8\n\t"
 4032        "vmov	d2, r5, r6\n\t"
 4033        "vrev32.8	q1, q1\n\t"
 4034        "\n"
 4035    "L_aes_ctr_encrypt_arm32_crypto_128_start_2_%=:\n\t"
 4036        "aese.8	q0, q3\n\t"
 4037        "aesmc.8	q0, q0\n\t"
 4038        "aese.8	q1, q3\n\t"
 4039        "aesmc.8	q1, q1\n\t"
 4040        "adds	r8, r8, #1\n\t"
 4041        "aese.8	q0, q4\n\t"
 4042        "aesmc.8	q0, q0\n\t"
 4043        "aese.8	q1, q4\n\t"
 4044        "aesmc.8	q1, q1\n\t"
 4045        "adcs	r7, r7, #0\n\t"
 4046        "aese.8	q0, q5\n\t"
 4047        "aesmc.8	q0, q0\n\t"
 4048        "aese.8	q1, q5\n\t"
 4049        "aesmc.8	q1, q1\n\t"
 4050        "adcs	r6, r6, #0\n\t"
 4051        "aese.8	q0, q6\n\t"
 4052        "aesmc.8	q0, q0\n\t"
 4053        "aese.8	q1, q6\n\t"
 4054        "aesmc.8	q1, q1\n\t"
 4055        "adc	r5, r5, #0\n\t"
 4056        "aese.8	q0, q7\n\t"
 4057        "aesmc.8	q0, q0\n\t"
 4058        "aese.8	q1, q7\n\t"
 4059        "aesmc.8	q1, q1\n\t"
 4060        "vmov	d5, r7, r8\n\t"
 4061        "aese.8	q0, q8\n\t"
 4062        "aesmc.8	q0, q0\n\t"
 4063        "aese.8	q1, q8\n\t"
 4064        "aesmc.8	q1, q1\n\t"
 4065        "vmov	d4, r5, r6\n\t"
 4066        "aese.8	q0, q9\n\t"
 4067        "aesmc.8	q0, q0\n\t"
 4068        "aese.8	q1, q9\n\t"
 4069        "aesmc.8	q1, q1\n\t"
 4070        "adds	r8, r8, #1\n\t"
 4071        "aese.8	q0, q10\n\t"
 4072        "aesmc.8	q0, q0\n\t"
 4073        "aese.8	q1, q10\n\t"
 4074        "aesmc.8	q1, q1\n\t"
 4075        "adcs	r7, r7, #0\n\t"
 4076        "aese.8	q0, q11\n\t"
 4077        "aesmc.8	q0, q0\n\t"
 4078        "aese.8	q1, q11\n\t"
 4079        "aesmc.8	q1, q1\n\t"
 4080        "adcs	r6, r6, #0\n\t"
 4081        "vld1.8	{q14-q15}, [%[in]]!\n\t"
 4082        "adc	r5, r5, #0\n\t"
 4083        "aese.8	q0, q12\n\t"
 4084        "aese.8	q1, q12\n\t"
 4085        "sub	r4, r4, #2\n\t"
 4086        "veor.32	q14, q14, q13\n\t"
 4087        "veor.32	q15, q15, q13\n\t"
 4088        "veor.32	q14, q14, q0\n\t"
 4089        "veor.32	q15, q15, q1\n\t"
 4090        "vrev32.8	q0, q2\n\t"
 4091        "vmov	d2, r5, r6\n\t"
 4092        "vmov	d3, r7, r8\n\t"
 4093        "cmp	r4, #1\n\t"
 4094        "vst1.8	{q14-q15}, [%[out]]!\n\t"
 4095        "vrev32.8	q1, q1\n\t"
 4096        "bgt	L_aes_ctr_encrypt_arm32_crypto_128_start_2_%=\n\t"
 4097        "mov	lr, #0\n\t"
 4098        "blt	L_aes_ctr_encrypt_arm32_crypto_128_done_%=\n\t"
 4099        "\n"
 4100    "L_aes_ctr_encrypt_arm32_crypto_128_start_1_%=:\n\t"
 4101        "aese.8	q0, q3\n\t"
 4102        "aesmc.8	q0, q0\n\t"
 4103        "adds	r8, r8, lr\n\t"
 4104        "aese.8	q0, q4\n\t"
 4105        "aesmc.8	q0, q0\n\t"
 4106        "adcs	r7, r7, #0\n\t"
 4107        "aese.8	q0, q5\n\t"
 4108        "aesmc.8	q0, q0\n\t"
 4109        "adcs	r6, r6, #0\n\t"
 4110        "aese.8	q0, q6\n\t"
 4111        "aesmc.8	q0, q0\n\t"
 4112        "adc	r5, r5, #0\n\t"
 4113        "aese.8	q0, q7\n\t"
 4114        "aesmc.8	q0, q0\n\t"
 4115        "vmov	d5, r7, r8\n\t"
 4116        "aese.8	q0, q8\n\t"
 4117        "aesmc.8	q0, q0\n\t"
 4118        "vmov	d4, r5, r6\n\t"
 4119        "aese.8	q0, q9\n\t"
 4120        "aesmc.8	q0, q0\n\t"
 4121        "aese.8	q0, q10\n\t"
 4122        "aesmc.8	q0, q0\n\t"
 4123        "aese.8	q0, q11\n\t"
 4124        "aesmc.8	q0, q0\n\t"
 4125        "vld1.8	{q14}, [%[in]]!\n\t"
 4126        "aese.8	q0, q12\n\t"
 4127        "veor.32	q0, q0, q13\n\t"
 4128        "veor.32	q14, q14, q0\n\t"
 4129        "vst1.8	{q14}, [%[out]]!\n\t"
 4130        "mov	lr, #1\n\t"
 4131        "vrev32.8	q0, q2\n\t"
 4132        "\n"
 4133    "L_aes_ctr_encrypt_arm32_crypto_128_done_%=:\n\t"
 4134        "cmp	%[sz], #0\n\t"
 4135        "beq	L_aes_ctr_encrypt_arm32_crypto_128_partial_done_%=\n\t"
 4136        "ldr	r4, [sp, #8]\n\t"
 4137        "aese.8	q0, q3\n\t"
 4138        "aesmc.8	q0, q0\n\t"
 4139        "adds	r8, r8, lr\n\t"
 4140        "aese.8	q0, q4\n\t"
 4141        "aesmc.8	q0, q0\n\t"
 4142        "adcs	r7, r7, #0\n\t"
 4143        "aese.8	q0, q5\n\t"
 4144        "aesmc.8	q0, q0\n\t"
 4145        "adcs	r6, r6, #0\n\t"
 4146        "aese.8	q0, q6\n\t"
 4147        "aesmc.8	q0, q0\n\t"
 4148        "adc	r5, r5, #0\n\t"
 4149        "aese.8	q0, q7\n\t"
 4150        "aesmc.8	q0, q0\n\t"
 4151        "vmov	d5, r7, r8\n\t"
 4152        "aese.8	q0, q8\n\t"
 4153        "aesmc.8	q0, q0\n\t"
 4154        "vmov	d4, r5, r6\n\t"
 4155        "aese.8	q0, q9\n\t"
 4156        "aesmc.8	q0, q0\n\t"
 4157        "aese.8	q0, q10\n\t"
 4158        "aesmc.8	q0, q0\n\t"
 4159        "aese.8	q0, q11\n\t"
 4160        "aesmc.8	q0, q0\n\t"
 4161        "ldr	lr, [sp, #4]\n\t"
 4162        "aese.8	q0, q12\n\t"
 4163        "veor.32	q0, q0, q13\n\t"
 4164        "vst1.32	{q0}, [lr]\n\t"
 4165        "vmov	q0, q2\n\t"
 4166        "mov	r5, #16\n\t"
 4167        "sub	r5, r5, %[sz]\n\t"
 4168        "\n"
 4169    "L_aes_ctr_encrypt_arm32_crypto_128_start_byte_%=:\n\t"
 4170        "ldrb	r7, [lr], #1\n\t"
 4171        "ldrb	r8, [%[in]], #1\n\t"
 4172        "eor	r7, r7, r8\n\t"
 4173        "subs	%[sz], %[sz], #1\n\t"
 4174        "strb	r7, [%[out]], #1\n\t"
 4175        "bgt	L_aes_ctr_encrypt_arm32_crypto_128_start_byte_%=\n\t"
 4176        "vrev32.8	q0, q2\n\t"
 4177        "str	r5, [r4]\n\t"
 4178        "\n"
 4179    "L_aes_ctr_encrypt_arm32_crypto_128_partial_done_%=:\n\t"
 4180#endif /* !NO_AES_128 */
 4181        "\n"
 4182    "L_aes_ctr_encrypt_arm32_crypto_done_%=:\n\t"
 4183        "vst1.32	{q0}, [%[reg]]\n\t"
 4184        "pop	{%[key], %[tmp]}\n\t"
 4185        "pop	{%[left], %[nr]}\n\t"
 4186#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 4187        : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [reg] "+r" (reg),
 4188          [key] "+r" (key), [tmp] "+r" (tmp), [left] "+r" (left),
 4189          [nr] "+r" (nr)
 4190        :
 4191#else
 4192        :
 4193        : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [reg] "r" (reg),
 4194          [key] "r" (key), [tmp] "r" (tmp), [left] "r" (left), [nr] "r" (nr)
 4195#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 4196        : "memory", "cc", "r6", "r7", "r8", "q0", "q1", "q2", "q3", "q4", "q5",
 4197            "q6", "q7", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
 4198    );
 4199}
 4200
 4201#endif /* WOLFSSL_AES_COUNTER */
 4202#ifdef HAVE_AESGCM
 4203#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 4204WC_OMIT_FRAME_POINTER void AES_GCM_set_key_AARCH32(const byte* nonce_p,
 4205    const byte* key_p, byte* gcm_h_p, int nr_p)
 4206#else
 4207WC_OMIT_FRAME_POINTER void AES_GCM_set_key_AARCH32(const byte* nonce,
 4208    const byte* key, byte* gcm_h, int nr)
 4209#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 4210{
 4211#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 4212    register const byte* nonce __asm__ ("r0") = (const byte*)nonce_p;
 4213    register const byte* key __asm__ ("r1") = (const byte*)key_p;
 4214    register byte* gcm_h __asm__ ("r2") = (byte*)gcm_h_p;
 4215    register int nr __asm__ ("r3") = (int)nr_p;
 4216#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 4217
 4218    __asm__ __volatile__ (
 4219        "vld1.8	{q0}, [%[nonce]]\n\t"
 4220        "vld1.8	{q1-q2}, [%[key]]!\n\t"
 4221        "vld1.8	{q3-q4}, [%[key]]!\n\t"
 4222        "aese.8	q0, q1\n\t"
 4223        "aesmc.8	q0, q0\n\t"
 4224        "aese.8	q0, q2\n\t"
 4225        "aesmc.8	q0, q0\n\t"
 4226        "aese.8	q0, q3\n\t"
 4227        "aesmc.8	q0, q0\n\t"
 4228        "aese.8	q0, q4\n\t"
 4229        "aesmc.8	q0, q0\n\t"
 4230        "vld1.8	{q1-q2}, [%[key]]!\n\t"
 4231        "vld1.8	{q3-q4}, [%[key]]!\n\t"
 4232        "aese.8	q0, q1\n\t"
 4233        "aesmc.8	q0, q0\n\t"
 4234        "aese.8	q0, q2\n\t"
 4235        "aesmc.8	q0, q0\n\t"
 4236        "aese.8	q0, q3\n\t"
 4237        "aesmc.8	q0, q0\n\t"
 4238        "aese.8	q0, q4\n\t"
 4239        "aesmc.8	q0, q0\n\t"
 4240        "subs	%[nr], %[nr], #10\n\t"
 4241        "vld1.8	{q1-q2}, [%[key]]!\n\t"
 4242        "aese.8	q0, q1\n\t"
 4243        "aesmc.8	q0, q0\n\t"
 4244        "aese.8	q0, q2\n\t"
 4245        "beq	L_aes_gcm_set_key_arm32_crypto_round_done_%=\n\t"
 4246        "vld1.8	{q1-q2}, [%[key]]!\n\t"
 4247        "subs	%[nr], %[nr], #2\n\t"
 4248        "aesmc.8	q0, q0\n\t"
 4249        "aese.8	q0, q1\n\t"
 4250        "aesmc.8	q0, q0\n\t"
 4251        "aese.8	q0, q2\n\t"
 4252        "beq	L_aes_gcm_set_key_arm32_crypto_round_done_%=\n\t"
 4253        "vld1.8	{q1-q2}, [%[key]]!\n\t"
 4254        "aesmc.8	q0, q0\n\t"
 4255        "aese.8	q0, q1\n\t"
 4256        "aesmc.8	q0, q0\n\t"
 4257        "aese.8	q0, q2\n\t"
 4258        "\n"
 4259    "L_aes_gcm_set_key_arm32_crypto_round_done_%=:\n\t"
 4260        "vld1.8	{q1}, [%[key]]\n\t"
 4261        "veor	q0, q0, q1\n\t"
 4262        "vmov.i8	q1, #0x55\n\t"
 4263        "vshl.u8	q2, q0, #1\n\t"
 4264        "vshr.u8	q0, q0, #1\n\t"
 4265        "vbif.8	q0, q2, q1\n\t"
 4266        "vmov.i8	q1, #51\n\t"
 4267        "vshl.u8	q2, q0, #2\n\t"
 4268        "vshr.u8	q0, q0, #2\n\t"
 4269        "vbit.8	q2, q0, q1\n\t"
 4270        "vshl.u8	q0, q2, #4\n\t"
 4271        "vsri.u8	q0, q2, #4\n\t"
 4272        "vst1.32	{q0}, [%[gcm_h]]\n\t"
 4273#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 4274        : [nonce] "+r" (nonce), [key] "+r" (key), [gcm_h] "+r" (gcm_h),
 4275          [nr] "+r" (nr)
 4276        :
 4277#else
 4278        :
 4279        : [nonce] "r" (nonce), [key] "r" (key), [gcm_h] "r" (gcm_h),
 4280          [nr] "r" (nr)
 4281#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 4282        : "memory", "cc", "r12", "q0", "q1", "q2", "q3", "q4"
 4283    );
 4284}
 4285
 4286#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 4287WC_OMIT_FRAME_POINTER void AES_GCM_encrypt_AARCH32(const byte* in_p,
 4288    byte* out_p, word32 sz_p, const byte* nonce_p, word32 nonceSz_p,
 4289    byte* tag_p, word32 tagSz_p, const byte* aad_p, word32 aadSz_p, byte* key_p,
 4290    byte* gcm_h_p, byte* tmp_p, byte* reg_p, int nr_p)
 4291#else
 4292WC_OMIT_FRAME_POINTER void AES_GCM_encrypt_AARCH32(const byte* in, byte* out,
 4293    word32 sz, const byte* nonce, word32 nonceSz, byte* tag, word32 tagSz,
 4294    const byte* aad, word32 aadSz, byte* key, byte* gcm_h, byte* tmp, byte* reg,
 4295    int nr)
 4296#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 4297{
 4298#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 4299    register const byte* in __asm__ ("r0") = (const byte*)in_p;
 4300    register byte* out __asm__ ("r1") = (byte*)out_p;
 4301    register word32 sz __asm__ ("r2") = (word32)sz_p;
 4302    register const byte* nonce __asm__ ("r3") = (const byte*)nonce_p;
 4303    register word32 nonceSz __asm__ ("r12") = (word32)nonceSz_p;
 4304    register byte* tag __asm__ ("lr") = (byte*)tag_p;
 4305    register word32 tagSz __asm__ ("r4") = (word32)tagSz_p;
 4306    register const byte* aad __asm__ ("r5") = (const byte*)aad_p;
 4307    register word32 aadSz __asm__ ("r6") = (word32)aadSz_p;
 4308    register byte* key __asm__ ("r7") = (byte*)key_p;
 4309    register byte* gcm_h __asm__ ("r8") = (byte*)gcm_h_p;
 4310    register byte* tmp __asm__ ("r9") = (byte*)tmp_p;
 4311    register byte* reg __asm__ ("r10") = (byte*)reg_p;
 4312    register int nr __asm__ ("r11") = (int)nr_p;
 4313#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 4314
 4315    __asm__ __volatile__ (
 4316        "push	{%[tagSz], %[aad], %[aadSz], %[key], %[gcm_h], %[tmp], %[reg], %[nr]}\n\t"
 4317        "push	{%[nonceSz], %[tag]}\n\t"
 4318        /* key */
 4319        "ldr	r7, [sp, #20]\n\t"
 4320        /* tmp */
 4321        "ldr	r9, [sp, #28]\n\t"
 4322        /* nonceSz */
 4323        "ldr	r12, [sp]\n\t"
 4324        "cmp	r12, #12\n\t"
 4325        "beq	L_aes_gcm_encrypt_arm32_crypto_nonce_setup_done_%=\n\t"
 4326        "vmov.i8	q13, #0x87\n\t"
 4327        /* gcm_h */
 4328        "ldr	r8, [sp, #24]\n\t"
 4329        "veor.8	q6, q6, q6\n\t"
 4330        "vshr.u64	q13, q13, #56\n\t"
 4331        "vld1.32	{q8}, [r8]\n\t"
 4332        "\n"
 4333    "L_aes_gcm_encrypt_arm32_crypto_nonce_setup_done_%=:\n\t"
 4334        /* Load Nonce */
 4335        "cmp	r12, #12\n\t"
 4336        "bne	L_aes_gcm_encrypt_arm32_crypto_ghash_nonce_%=\n\t"
 4337        "ldr	r5, [%[nonce]]\n\t"
 4338        "ldr	r8, [%[nonce], #4]\n\t"
 4339        "ldr	r12, [%[nonce], #8]\n\t"
 4340        "vmov.i32	q6, #0x1000000\n\t"
 4341        "vmov.32	s24, r5\n\t"
 4342        "vmov.32	s25, r8\n\t"
 4343        "vmov.32	s26, r12\n\t"
 4344        "mov	r5, #1\n\t"
 4345        "b	L_aes_gcm_encrypt_arm32_crypto_done_nonce_%=\n\t"
 4346        "\n"
 4347    "L_aes_gcm_encrypt_arm32_crypto_ghash_nonce_%=:\n\t"
 4348        "lsr	r10, r12, #4\n\t"
 4349        "cmp	r10, #0\n\t"
 4350        "beq	L_aes_gcm_encrypt_arm32_crypto_nonce_done_%=\n\t"
 4351        "\n"
 4352    "L_aes_gcm_encrypt_arm32_crypto_nonce_start_1_%=:\n\t"
 4353        "vld1.32	{q14}, [%[nonce]]!\n\t"
 4354        "vmov.i8	q12, #0x55\n\t"
 4355        "vshl.u8	q0, q14, #1\n\t"
 4356        "vshr.u8	q14, q14, #1\n\t"
 4357        "vbif.8	q14, q0, q12\n\t"
 4358        "vmov.i8	q12, #51\n\t"
 4359        "vshl.u8	q0, q14, #2\n\t"
 4360        "vshr.u8	q14, q14, #2\n\t"
 4361        "vbit.8	q0, q14, q12\n\t"
 4362        "vshl.u8	q14, q0, #4\n\t"
 4363        "vsri.u8	q14, q0, #4\n\t"
 4364        "veor.8	q12, q6, q14\n\t"
 4365        /*   X  = C * H^1 */
 4366        "vmull.p64	q2, d25, d16\n\t"
 4367        "vmull.p64	q6, d24, d17\n\t"
 4368        "vmull.p64	q0, d24, d16\n\t"
 4369        "vmull.p64	q1, d25, d17\n\t"
 4370        "veor.8	q2, q2, q6\n\t"
 4371        /*   Reduce */
 4372        "vmull.p64	q6, d3, d27\n\t"
 4373        "veor.8	d2, d2, d5\n\t"
 4374        "veor.8	d1, d1, d4\n\t"
 4375        "veor.8	d2, d2, d13\n\t"
 4376        "veor.8	d1, d1, d12\n\t"
 4377        "vmull.p64	q6, d2, d26\n\t"
 4378        "veor.8	q6, q6, q0\n\t"
 4379        /* Done GHASH */
 4380        "subs	r10, r10, #1\n\t"
 4381        "bne	L_aes_gcm_encrypt_arm32_crypto_nonce_start_1_%=\n\t"
 4382        "\n"
 4383    "L_aes_gcm_encrypt_arm32_crypto_nonce_done_%=:\n\t"
 4384        "ands	r11, r12, #15\n\t"
 4385        "beq	L_aes_gcm_encrypt_arm32_crypto_nonce_partial_done_%=\n\t"
 4386        "veor.8	q0, q0, q0\n\t"
 4387        "mov	r12, r11\n\t"
 4388        "vst1.32	{q0}, [r9]\n\t"
 4389        "cmp	r12, #4\n\t"
 4390        "blt	L_aes_gcm_encrypt_arm32_crypto_nonce_start_sw_%=\n\t"
 4391        "\n"
 4392    "L_aes_gcm_encrypt_arm32_crypto_nonce_start_dw_%=:\n\t"
 4393        "ldr	r8, [%[nonce]], #4\n\t"
 4394        "sub	r12, r12, #4\n\t"
 4395        "str	r8, [r9], #4\n\t"
 4396        "cmp	r12, #4\n\t"
 4397        "bge	L_aes_gcm_encrypt_arm32_crypto_nonce_start_dw_%=\n\t"
 4398        "\n"
 4399    "L_aes_gcm_encrypt_arm32_crypto_nonce_start_sw_%=:\n\t"
 4400        "cmp	r12, #2\n\t"
 4401        "blt	L_aes_gcm_encrypt_arm32_crypto_nonce_start_byte_%=\n\t"
 4402        "ldrh	r8, [%[nonce]], #2\n\t"
 4403        "sub	r12, r12, #2\n\t"
 4404        "strh	r8, [r9], #2\n\t"
 4405        "\n"
 4406    "L_aes_gcm_encrypt_arm32_crypto_nonce_start_byte_%=:\n\t"
 4407        "cmp	r12, #1\n\t"
 4408        "blt	L_aes_gcm_encrypt_arm32_crypto_nonce_end_bytes_%=\n\t"
 4409        "ldrb	r8, [%[nonce]], #1\n\t"
 4410        "subs	r12, r12, #1\n\t"
 4411        "strb	r8, [r9], #1\n\t"
 4412        "bne	L_aes_gcm_encrypt_arm32_crypto_nonce_start_byte_%=\n\t"
 4413        "\n"
 4414    "L_aes_gcm_encrypt_arm32_crypto_nonce_end_bytes_%=:\n\t"
 4415        "sub	r9, r9, r11\n\t"
 4416        "vld1.32	{q14}, [r9]\n\t"
 4417        "vmov.i8	q12, #0x55\n\t"
 4418        "vshl.u8	q0, q14, #1\n\t"
 4419        "vshr.u8	q14, q14, #1\n\t"
 4420        "vbif.8	q14, q0, q12\n\t"
 4421        "vmov.i8	q12, #51\n\t"
 4422        "vshl.u8	q0, q14, #2\n\t"
 4423        "vshr.u8	q14, q14, #2\n\t"
 4424        "vbit.8	q0, q14, q12\n\t"
 4425        "vshl.u8	q14, q0, #4\n\t"
 4426        "vsri.u8	q14, q0, #4\n\t"
 4427        "veor.8	q12, q6, q14\n\t"
 4428        /*   X  = C * H^1 */
 4429        "vmull.p64	q2, d25, d16\n\t"
 4430        "vmull.p64	q6, d24, d17\n\t"
 4431        "vmull.p64	q0, d24, d16\n\t"
 4432        "vmull.p64	q1, d25, d17\n\t"
 4433        "veor.8	q2, q2, q6\n\t"
 4434        /*   Reduce */
 4435        "vmull.p64	q6, d3, d27\n\t"
 4436        "veor.8	d2, d2, d5\n\t"
 4437        "veor.8	d1, d1, d4\n\t"
 4438        "veor.8	d2, d2, d13\n\t"
 4439        "veor.8	d1, d1, d12\n\t"
 4440        "vmull.p64	q6, d2, d26\n\t"
 4441        "veor.8	q6, q6, q0\n\t"
 4442        /* Done GHASH */
 4443        "\n"
 4444    "L_aes_gcm_encrypt_arm32_crypto_nonce_partial_done_%=:\n\t"
 4445        "veor.8	q0, q0, q0\n\t"
 4446        /* nonceSz */
 4447        "ldr	r12, [sp]\n\t"
 4448        "lsr	r10, r12, #29\n\t"
 4449        "lsl	r11, r12, #3\n\t"
 4450        "rbit	r10, r10\n\t"
 4451        "rbit	r11, r11\n\t"
 4452        "vmov.32	s2, r10\n\t"
 4453        "vmov.32	s3, r11\n\t"
 4454        "veor.8	q6, q6, q0\n\t"
 4455        "vmull.p64	q2, d13, d16\n\t"
 4456        "vmull.p64	q12, d12, d17\n\t"
 4457        "vmull.p64	q0, d12, d16\n\t"
 4458        "vmull.p64	q1, d13, d17\n\t"
 4459        "veor.8	q2, q2, q12\n\t"
 4460        "vmull.p64	q6, d3, d27\n\t"
 4461        "veor.8	d2, d2, d5\n\t"
 4462        "veor.8	d1, d1, d4\n\t"
 4463        "veor.8	d2, d2, d13\n\t"
 4464        "veor.8	d1, d1, d12\n\t"
 4465        "vmull.p64	q6, d2, d26\n\t"
 4466        "veor.8	q6, q6, q0\n\t"
 4467        "vmov.32	r5, s24\n\t"
 4468        "vmov.32	r8, s25\n\t"
 4469        "vmov.32	r12, s26\n\t"
 4470        "rbit	r5, r5\n\t"
 4471        "rbit	r8, r8\n\t"
 4472        "rbit	r12, r12\n\t"
 4473        "rev	r5, r5\n\t"
 4474        "rev	r8, r8\n\t"
 4475        "rev	r12, r12\n\t"
 4476        "vmov.32	s24, r5\n\t"
 4477        "vmov.32	s25, r8\n\t"
 4478        "vmov.32	s26, r12\n\t"
 4479        "vmov.32	r5, s27\n\t"
 4480        "rbit	r5, r5\n\t"
 4481        "rev	r5, r5\n\t"
 4482        "vmov.32	s27, r5\n\t"
 4483        "rev	r5, r5\n\t"
 4484        "\n"
 4485    "L_aes_gcm_encrypt_arm32_crypto_done_nonce_%=:\n\t"
 4486        "vldm.32	r7!, {q0-q3}\n\t"
 4487        "vldm.32	r7!, {q7-q13}\n\t"
 4488        /* nr */
 4489        "ldr	r12, [sp, #36]\n\t"
 4490        "lsr	r10, %[sz], #4\n\t"
 4491        "cmp	r12, #12\n\t"
 4492        "blt	L_aes_gcm_encrypt_arm32_crypto_start_128_%=\n\t"
 4493        "bgt	L_aes_gcm_encrypt_arm32_crypto_start_256_%=\n\t"
 4494        /* AES_GCM_192 */
 4495#ifndef NO_AES_192
 4496        "cmp	r10, #1\n\t"
 4497        "blt	L_aes_gcm_encrypt_arm32_crypto_192_done_%=\n\t"
 4498        "beq	L_aes_gcm_encrypt_arm32_crypto_192_start_1_%=\n\t"
 4499        "\n"
 4500    "L_aes_gcm_encrypt_arm32_crypto_192_start_2_%=:\n\t"
 4501        "add	r8, r5, #1\n\t"
 4502        "vmov.8	q4, q6\n\t"
 4503        "add	r5, r5, #2\n\t"
 4504        "vmov.8	q5, q6\n\t"
 4505        "rev	r8, r8\n\t"
 4506        "rev	r12, r5\n\t"
 4507        "vmov	s19, r8\n\t"
 4508        "vmov	s23, r12\n\t"
 4509        "aese.8	q4, q0\n\t"
 4510        "aesmc.8	q4, q4\n\t"
 4511        "aese.8	q5, q0\n\t"
 4512        "aesmc.8	q5, q5\n\t"
 4513        "aese.8	q4, q1\n\t"
 4514        "aesmc.8	q4, q4\n\t"
 4515        "aese.8	q5, q1\n\t"
 4516        "aesmc.8	q5, q5\n\t"
 4517        "aese.8	q4, q2\n\t"
 4518        "aesmc.8	q4, q4\n\t"
 4519        "aese.8	q5, q2\n\t"
 4520        "aesmc.8	q5, q5\n\t"
 4521        "aese.8	q4, q3\n\t"
 4522        "aesmc.8	q4, q4\n\t"
 4523        "aese.8	q5, q3\n\t"
 4524        "aesmc.8	q5, q5\n\t"
 4525        "aese.8	q4, q7\n\t"
 4526        "aesmc.8	q4, q4\n\t"
 4527        "aese.8	q5, q7\n\t"
 4528        "aesmc.8	q5, q5\n\t"
 4529        "aese.8	q4, q8\n\t"
 4530        "aesmc.8	q4, q4\n\t"
 4531        "aese.8	q5, q8\n\t"
 4532        "aesmc.8	q5, q5\n\t"
 4533        "aese.8	q4, q9\n\t"
 4534        "aesmc.8	q4, q4\n\t"
 4535        "aese.8	q5, q9\n\t"
 4536        "aesmc.8	q5, q5\n\t"
 4537        "subs	r10, r10, #2\n\t"
 4538        "aese.8	q4, q10\n\t"
 4539        "aesmc.8	q4, q4\n\t"
 4540        "aese.8	q5, q10\n\t"
 4541        "aesmc.8	q5, q5\n\t"
 4542        "aese.8	q4, q11\n\t"
 4543        "aesmc.8	q4, q4\n\t"
 4544        "aese.8	q5, q11\n\t"
 4545        "aesmc.8	q5, q5\n\t"
 4546        "aese.8	q4, q12\n\t"
 4547        "aesmc.8	q4, q4\n\t"
 4548        "aese.8	q5, q12\n\t"
 4549        "aesmc.8	q5, q5\n\t"
 4550        "vld1.32	{q14}, [r7]!\n\t"
 4551        "aese.8	q4, q13\n\t"
 4552        "aesmc.8	q4, q4\n\t"
 4553        "aese.8	q5, q13\n\t"
 4554        "aesmc.8	q5, q5\n\t"
 4555        "vld1.32	{q15}, [r7]\n\t"
 4556        "aese.8	q4, q14\n\t"
 4557        "veor.8	q4, q4, q15\n\t"
 4558        "aese.8	q5, q14\n\t"
 4559        "veor.8	q5, q5, q15\n\t"
 4560        "vld1.8	{q14-q15}, [%[in]]!\n\t"
 4561        "sub	r7, r7, #16\n\t"
 4562        "veor.8	q14, q14, q4\n\t"
 4563        "veor.8	q15, q15, q5\n\t"
 4564        "vst1.8	{q14-q15}, [%[out]]!\n\t"
 4565        "cmp	r10, #1\n\t"
 4566        "bgt	L_aes_gcm_encrypt_arm32_crypto_192_start_2_%=\n\t"
 4567        "blt	L_aes_gcm_encrypt_arm32_crypto_192_done_%=\n\t"
 4568        "\n"
 4569    "L_aes_gcm_encrypt_arm32_crypto_192_start_1_%=:\n\t"
 4570        "add	r5, r5, #1\n\t"
 4571        "vmov.8	q4, q6\n\t"
 4572        "rev	r8, r5\n\t"
 4573        "vmov	s19, r8\n\t"
 4574        "aese.8	q4, q0\n\t"
 4575        "aesmc.8	q4, q4\n\t"
 4576        "aese.8	q4, q1\n\t"
 4577        "aesmc.8	q4, q4\n\t"
 4578        "aese.8	q4, q2\n\t"
 4579        "aesmc.8	q4, q4\n\t"
 4580        "aese.8	q4, q3\n\t"
 4581        "aesmc.8	q4, q4\n\t"
 4582        "aese.8	q4, q7\n\t"
 4583        "aesmc.8	q4, q4\n\t"
 4584        "aese.8	q4, q8\n\t"
 4585        "aesmc.8	q4, q4\n\t"
 4586        "aese.8	q4, q9\n\t"
 4587        "aesmc.8	q4, q4\n\t"
 4588        "aese.8	q4, q10\n\t"
 4589        "aesmc.8	q4, q4\n\t"
 4590        "aese.8	q4, q11\n\t"
 4591        "aesmc.8	q4, q4\n\t"
 4592        "aese.8	q4, q12\n\t"
 4593        "aesmc.8	q4, q4\n\t"
 4594        "vld1.32	{q14}, [r7]!\n\t"
 4595        "aese.8	q4, q13\n\t"
 4596        "aesmc.8	q4, q4\n\t"
 4597        "vld1.32	{q15}, [r7]\n\t"
 4598        "aese.8	q4, q14\n\t"
 4599        "veor.8	q4, q4, q15\n\t"
 4600        "vld1.8	{q14}, [%[in]]!\n\t"
 4601        "sub	r7, r7, #16\n\t"
 4602        "veor.8	q14, q14, q4\n\t"
 4603        "vst1.32	{q14}, [%[out]]!\n\t"
 4604        "\n"
 4605    "L_aes_gcm_encrypt_arm32_crypto_192_done_%=:\n\t"
 4606        "ands	r11, %[sz], #15\n\t"
 4607        "beq	L_aes_gcm_encrypt_arm32_crypto_192_partial_done_%=\n\t"
 4608        "veor.8	q14, q14, q14\n\t"
 4609        "mov	r4, r11\n\t"
 4610        "vst1.32	{q14}, [r9]\n\t"
 4611        "cmp	r4, #4\n\t"
 4612        "blt	L_aes_gcm_encrypt_arm32_crypto_192_start_sw_%=\n\t"
 4613        "\n"
 4614    "L_aes_gcm_encrypt_arm32_crypto_192_start_dw_%=:\n\t"
 4615        "ldr	lr, [%[in]], #4\n\t"
 4616        "sub	r4, r4, #4\n\t"
 4617        "str	lr, [r9], #4\n\t"
 4618        "cmp	r4, #4\n\t"
 4619        "bge	L_aes_gcm_encrypt_arm32_crypto_192_start_dw_%=\n\t"
 4620        "\n"
 4621    "L_aes_gcm_encrypt_arm32_crypto_192_start_sw_%=:\n\t"
 4622        "cmp	r4, #2\n\t"
 4623        "blt	L_aes_gcm_encrypt_arm32_crypto_192_start_byte_%=\n\t"
 4624        "ldrh	lr, [%[in]], #2\n\t"
 4625        "sub	r4, r4, #2\n\t"
 4626        "strh	lr, [r9], #2\n\t"
 4627        "\n"
 4628    "L_aes_gcm_encrypt_arm32_crypto_192_start_byte_%=:\n\t"
 4629        "cmp	r4, #1\n\t"
 4630        "blt	L_aes_gcm_encrypt_arm32_crypto_192_end_bytes_%=\n\t"
 4631        "ldrb	lr, [%[in]], #1\n\t"
 4632        "subs	r4, r4, #1\n\t"
 4633        "strb	lr, [r9], #1\n\t"
 4634        "bne	L_aes_gcm_encrypt_arm32_crypto_192_start_byte_%=\n\t"
 4635        "\n"
 4636    "L_aes_gcm_encrypt_arm32_crypto_192_end_bytes_%=:\n\t"
 4637        "sub	r9, r9, r11\n\t"
 4638        "add	r5, r5, #1\n\t"
 4639        "vmov.8	q4, q6\n\t"
 4640        "rev	r8, r5\n\t"
 4641        "vmov	s19, r8\n\t"
 4642        "aese.8	q4, q0\n\t"
 4643        "aesmc.8	q4, q4\n\t"
 4644        "aese.8	q4, q1\n\t"
 4645        "aesmc.8	q4, q4\n\t"
 4646        "aese.8	q4, q2\n\t"
 4647        "aesmc.8	q4, q4\n\t"
 4648        "aese.8	q4, q3\n\t"
 4649        "aesmc.8	q4, q4\n\t"
 4650        "aese.8	q4, q7\n\t"
 4651        "aesmc.8	q4, q4\n\t"
 4652        "aese.8	q4, q8\n\t"
 4653        "aesmc.8	q4, q4\n\t"
 4654        "aese.8	q4, q9\n\t"
 4655        "aesmc.8	q4, q4\n\t"
 4656        "aese.8	q4, q10\n\t"
 4657        "aesmc.8	q4, q4\n\t"
 4658        "aese.8	q4, q11\n\t"
 4659        "aesmc.8	q4, q4\n\t"
 4660        "aese.8	q4, q12\n\t"
 4661        "aesmc.8	q4, q4\n\t"
 4662        "vld1.32	{q14}, [r7]!\n\t"
 4663        "aese.8	q4, q13\n\t"
 4664        "aesmc.8	q4, q4\n\t"
 4665        "vld1.32	{q15}, [r7]\n\t"
 4666        "aese.8	q4, q14\n\t"
 4667        "veor.8	q4, q4, q15\n\t"
 4668        "vld1.8	{q14}, [r9]\n\t"
 4669        "sub	r7, r7, #16\n\t"
 4670        "veor.8	q14, q14, q4\n\t"
 4671        "vst1.32	{q14}, [r9]\n\t"
 4672        "mov	r4, r11\n\t"
 4673        "cmp	r4, #4\n\t"
 4674        "blt	L_aes_gcm_encrypt_arm32_crypto_192_out_start_sw_%=\n\t"
 4675        "\n"
 4676    "L_aes_gcm_encrypt_arm32_crypto_192_out_start_dw_%=:\n\t"
 4677        "ldr	lr, [r9], #4\n\t"
 4678        "sub	r4, r4, #4\n\t"
 4679        "str	lr, [%[out]], #4\n\t"
 4680        "cmp	r4, #4\n\t"
 4681        "bge	L_aes_gcm_encrypt_arm32_crypto_192_out_start_dw_%=\n\t"
 4682        "\n"
 4683    "L_aes_gcm_encrypt_arm32_crypto_192_out_start_sw_%=:\n\t"
 4684        "cmp	r4, #2\n\t"
 4685        "blt	L_aes_gcm_encrypt_arm32_crypto_192_out_start_byte_%=\n\t"
 4686        "ldrh	lr, [r9], #2\n\t"
 4687        "sub	r4, r4, #2\n\t"
 4688        "strh	lr, [%[out]], #2\n\t"
 4689        "\n"
 4690    "L_aes_gcm_encrypt_arm32_crypto_192_out_start_byte_%=:\n\t"
 4691        "cmp	r4, #1\n\t"
 4692        "blt	L_aes_gcm_encrypt_arm32_crypto_192_out_end_bytes_%=\n\t"
 4693        "ldrb	lr, [r9], #1\n\t"
 4694        "subs	r4, r4, #1\n\t"
 4695        "strb	lr, [%[out]], #1\n\t"
 4696        "bne	L_aes_gcm_encrypt_arm32_crypto_192_out_start_byte_%=\n\t"
 4697        "\n"
 4698    "L_aes_gcm_encrypt_arm32_crypto_192_out_end_bytes_%=:\n\t"
 4699        "\n"
 4700    "L_aes_gcm_encrypt_arm32_crypto_192_partial_done_%=:\n\t"
 4701        /* Finish */
 4702        "add	r8, %[sz], #15\n\t"
 4703        "sub	r8, r5, r8, lsr #4\n\t"
 4704        "rev	r8, r8\n\t"
 4705        "vmov.32	s27, r8\n\t"
 4706        "aese.8	q6, q0\n\t"
 4707        "aesmc.8	q6, q6\n\t"
 4708        "aese.8	q6, q1\n\t"
 4709        "aesmc.8	q6, q6\n\t"
 4710        "aese.8	q6, q2\n\t"
 4711        "aesmc.8	q6, q6\n\t"
 4712        "aese.8	q6, q3\n\t"
 4713        "aesmc.8	q6, q6\n\t"
 4714        "aese.8	q6, q7\n\t"
 4715        "aesmc.8	q6, q6\n\t"
 4716        "aese.8	q6, q8\n\t"
 4717        "aesmc.8	q6, q6\n\t"
 4718        "aese.8	q6, q9\n\t"
 4719        "aesmc.8	q6, q6\n\t"
 4720        "aese.8	q6, q10\n\t"
 4721        "aesmc.8	q6, q6\n\t"
 4722        "aese.8	q6, q11\n\t"
 4723        "aesmc.8	q6, q6\n\t"
 4724        "aese.8	q6, q12\n\t"
 4725        "aesmc.8	q6, q6\n\t"
 4726        "vld1.32	{q14}, [r7]!\n\t"
 4727        "aese.8	q6, q13\n\t"
 4728        "aesmc.8	q6, q6\n\t"
 4729        "vld1.32	{q15}, [r7]\n\t"
 4730        "aese.8	q6, q14\n\t"
 4731        "veor.8	q6, q6, q15\n\t"
 4732        "sub	r7, r7, #16\n\t"
 4733#endif /* !NO_AES_192 */
 4734        "b	L_aes_gcm_encrypt_arm32_crypto_done_enc_%=\n\t"
 4735        /* AES_GCM_256 */
 4736        "\n"
 4737    "L_aes_gcm_encrypt_arm32_crypto_start_256_%=:\n\t"
 4738#ifndef NO_AES_256
 4739        "cmp	r10, #1\n\t"
 4740        "blt	L_aes_gcm_encrypt_arm32_crypto_256_done_%=\n\t"
 4741        "beq	L_aes_gcm_encrypt_arm32_crypto_256_start_1_%=\n\t"
 4742        "\n"
 4743    "L_aes_gcm_encrypt_arm32_crypto_256_start_2_%=:\n\t"
 4744        "add	r8, r5, #1\n\t"
 4745        "vmov.8	q4, q6\n\t"
 4746        "add	r5, r5, #2\n\t"
 4747        "vmov.8	q5, q6\n\t"
 4748        "rev	r8, r8\n\t"
 4749        "rev	r12, r5\n\t"
 4750        "vmov	s19, r8\n\t"
 4751        "vmov	s23, r12\n\t"
 4752        "aese.8	q4, q0\n\t"
 4753        "aesmc.8	q4, q4\n\t"
 4754        "aese.8	q5, q0\n\t"
 4755        "aesmc.8	q5, q5\n\t"
 4756        "aese.8	q4, q1\n\t"
 4757        "aesmc.8	q4, q4\n\t"
 4758        "aese.8	q5, q1\n\t"
 4759        "aesmc.8	q5, q5\n\t"
 4760        "aese.8	q4, q2\n\t"
 4761        "aesmc.8	q4, q4\n\t"
 4762        "aese.8	q5, q2\n\t"
 4763        "aesmc.8	q5, q5\n\t"
 4764        "aese.8	q4, q3\n\t"
 4765        "aesmc.8	q4, q4\n\t"
 4766        "aese.8	q5, q3\n\t"
 4767        "aesmc.8	q5, q5\n\t"
 4768        "aese.8	q4, q7\n\t"
 4769        "aesmc.8	q4, q4\n\t"
 4770        "aese.8	q5, q7\n\t"
 4771        "aesmc.8	q5, q5\n\t"
 4772        "aese.8	q4, q8\n\t"
 4773        "aesmc.8	q4, q4\n\t"
 4774        "aese.8	q5, q8\n\t"
 4775        "aesmc.8	q5, q5\n\t"
 4776        "aese.8	q4, q9\n\t"
 4777        "aesmc.8	q4, q4\n\t"
 4778        "aese.8	q5, q9\n\t"
 4779        "aesmc.8	q5, q5\n\t"
 4780        "subs	r10, r10, #2\n\t"
 4781        "aese.8	q4, q10\n\t"
 4782        "aesmc.8	q4, q4\n\t"
 4783        "aese.8	q5, q10\n\t"
 4784        "aesmc.8	q5, q5\n\t"
 4785        "aese.8	q4, q11\n\t"
 4786        "aesmc.8	q4, q4\n\t"
 4787        "aese.8	q5, q11\n\t"
 4788        "aesmc.8	q5, q5\n\t"
 4789        "aese.8	q4, q12\n\t"
 4790        "aesmc.8	q4, q4\n\t"
 4791        "aese.8	q5, q12\n\t"
 4792        "aesmc.8	q5, q5\n\t"
 4793        "vld1.32	{q14}, [r7]!\n\t"
 4794        "aese.8	q4, q13\n\t"
 4795        "aesmc.8	q4, q4\n\t"
 4796        "aese.8	q5, q13\n\t"
 4797        "aesmc.8	q5, q5\n\t"
 4798        "vld1.32	{q15}, [r7]!\n\t"
 4799        "aese.8	q4, q14\n\t"
 4800        "aesmc.8	q4, q4\n\t"
 4801        "aese.8	q5, q14\n\t"
 4802        "aesmc.8	q5, q5\n\t"
 4803        "vld1.32	{q14}, [r7]!\n\t"
 4804        "aese.8	q4, q15\n\t"
 4805        "aesmc.8	q4, q4\n\t"
 4806        "aese.8	q5, q15\n\t"
 4807        "aesmc.8	q5, q5\n\t"
 4808        "vld1.32	{q15}, [r7]\n\t"
 4809        "aese.8	q4, q14\n\t"
 4810        "veor.8	q4, q4, q15\n\t"
 4811        "aese.8	q5, q14\n\t"
 4812        "veor.8	q5, q5, q15\n\t"
 4813        "vld1.8	{q14-q15}, [%[in]]!\n\t"
 4814        "sub	r7, r7, #48\n\t"
 4815        "veor.8	q14, q14, q4\n\t"
 4816        "veor.8	q15, q15, q5\n\t"
 4817        "vst1.8	{q14-q15}, [%[out]]!\n\t"
 4818        "cmp	r10, #1\n\t"
 4819        "bgt	L_aes_gcm_encrypt_arm32_crypto_256_start_2_%=\n\t"
 4820        "blt	L_aes_gcm_encrypt_arm32_crypto_256_done_%=\n\t"
 4821        "\n"
 4822    "L_aes_gcm_encrypt_arm32_crypto_256_start_1_%=:\n\t"
 4823        "add	r5, r5, #1\n\t"
 4824        "vmov.8	q4, q6\n\t"
 4825        "rev	r8, r5\n\t"
 4826        "vmov	s19, r8\n\t"
 4827        "aese.8	q4, q0\n\t"
 4828        "aesmc.8	q4, q4\n\t"
 4829        "aese.8	q4, q1\n\t"
 4830        "aesmc.8	q4, q4\n\t"
 4831        "aese.8	q4, q2\n\t"
 4832        "aesmc.8	q4, q4\n\t"
 4833        "aese.8	q4, q3\n\t"
 4834        "aesmc.8	q4, q4\n\t"
 4835        "aese.8	q4, q7\n\t"
 4836        "aesmc.8	q4, q4\n\t"
 4837        "aese.8	q4, q8\n\t"
 4838        "aesmc.8	q4, q4\n\t"
 4839        "aese.8	q4, q9\n\t"
 4840        "aesmc.8	q4, q4\n\t"
 4841        "aese.8	q4, q10\n\t"
 4842        "aesmc.8	q4, q4\n\t"
 4843        "aese.8	q4, q11\n\t"
 4844        "aesmc.8	q4, q4\n\t"
 4845        "aese.8	q4, q12\n\t"
 4846        "aesmc.8	q4, q4\n\t"
 4847        "vld1.32	{q14}, [r7]!\n\t"
 4848        "aese.8	q4, q13\n\t"
 4849        "aesmc.8	q4, q4\n\t"
 4850        "vld1.32	{q15}, [r7]!\n\t"
 4851        "aese.8	q4, q14\n\t"
 4852        "aesmc.8	q4, q4\n\t"
 4853        "vld1.32	{q14}, [r7]!\n\t"
 4854        "aese.8	q4, q15\n\t"
 4855        "aesmc.8	q4, q4\n\t"
 4856        "vld1.32	{q15}, [r7]\n\t"
 4857        "aese.8	q4, q14\n\t"
 4858        "veor.8	q4, q4, q15\n\t"
 4859        "vld1.8	{q14}, [%[in]]!\n\t"
 4860        "sub	r7, r7, #48\n\t"
 4861        "veor.8	q14, q14, q4\n\t"
 4862        "vst1.32	{q14}, [%[out]]!\n\t"
 4863        "\n"
 4864    "L_aes_gcm_encrypt_arm32_crypto_256_done_%=:\n\t"
 4865        "ands	r11, %[sz], #15\n\t"
 4866        "beq	L_aes_gcm_encrypt_arm32_crypto_256_partial_done_%=\n\t"
 4867        "veor.8	q14, q14, q14\n\t"
 4868        "mov	r4, r11\n\t"
 4869        "vst1.32	{q14}, [r9]\n\t"
 4870        "cmp	r4, #4\n\t"
 4871        "blt	L_aes_gcm_encrypt_arm32_crypto_256_start_sw_%=\n\t"
 4872        "\n"
 4873    "L_aes_gcm_encrypt_arm32_crypto_256_start_dw_%=:\n\t"
 4874        "ldr	lr, [%[in]], #4\n\t"
 4875        "sub	r4, r4, #4\n\t"
 4876        "str	lr, [r9], #4\n\t"
 4877        "cmp	r4, #4\n\t"
 4878        "bge	L_aes_gcm_encrypt_arm32_crypto_256_start_dw_%=\n\t"
 4879        "\n"
 4880    "L_aes_gcm_encrypt_arm32_crypto_256_start_sw_%=:\n\t"
 4881        "cmp	r4, #2\n\t"
 4882        "blt	L_aes_gcm_encrypt_arm32_crypto_256_start_byte_%=\n\t"
 4883        "ldrh	lr, [%[in]], #2\n\t"
 4884        "sub	r4, r4, #2\n\t"
 4885        "strh	lr, [r9], #2\n\t"
 4886        "\n"
 4887    "L_aes_gcm_encrypt_arm32_crypto_256_start_byte_%=:\n\t"
 4888        "cmp	r4, #1\n\t"
 4889        "blt	L_aes_gcm_encrypt_arm32_crypto_256_end_bytes_%=\n\t"
 4890        "ldrb	lr, [%[in]], #1\n\t"
 4891        "subs	r4, r4, #1\n\t"
 4892        "strb	lr, [r9], #1\n\t"
 4893        "bne	L_aes_gcm_encrypt_arm32_crypto_256_start_byte_%=\n\t"
 4894        "\n"
 4895    "L_aes_gcm_encrypt_arm32_crypto_256_end_bytes_%=:\n\t"
 4896        "sub	r9, r9, r11\n\t"
 4897        "add	r5, r5, #1\n\t"
 4898        "vmov.8	q4, q6\n\t"
 4899        "rev	r8, r5\n\t"
 4900        "vmov	s19, r8\n\t"
 4901        "aese.8	q4, q0\n\t"
 4902        "aesmc.8	q4, q4\n\t"
 4903        "aese.8	q4, q1\n\t"
 4904        "aesmc.8	q4, q4\n\t"
 4905        "aese.8	q4, q2\n\t"
 4906        "aesmc.8	q4, q4\n\t"
 4907        "aese.8	q4, q3\n\t"
 4908        "aesmc.8	q4, q4\n\t"
 4909        "aese.8	q4, q7\n\t"
 4910        "aesmc.8	q4, q4\n\t"
 4911        "aese.8	q4, q8\n\t"
 4912        "aesmc.8	q4, q4\n\t"
 4913        "aese.8	q4, q9\n\t"
 4914        "aesmc.8	q4, q4\n\t"
 4915        "aese.8	q4, q10\n\t"
 4916        "aesmc.8	q4, q4\n\t"
 4917        "aese.8	q4, q11\n\t"
 4918        "aesmc.8	q4, q4\n\t"
 4919        "aese.8	q4, q12\n\t"
 4920        "aesmc.8	q4, q4\n\t"
 4921        "vld1.32	{q14}, [r7]!\n\t"
 4922        "aese.8	q4, q13\n\t"
 4923        "aesmc.8	q4, q4\n\t"
 4924        "vld1.32	{q15}, [r7]!\n\t"
 4925        "aese.8	q4, q14\n\t"
 4926        "aesmc.8	q4, q4\n\t"
 4927        "vld1.32	{q14}, [r7]!\n\t"
 4928        "aese.8	q4, q15\n\t"
 4929        "aesmc.8	q4, q4\n\t"
 4930        "vld1.32	{q15}, [r7]\n\t"
 4931        "aese.8	q4, q14\n\t"
 4932        "veor.8	q4, q4, q15\n\t"
 4933        "vld1.8	{q14}, [r9]\n\t"
 4934        "sub	r7, r7, #48\n\t"
 4935        "veor.8	q14, q14, q4\n\t"
 4936        "vst1.32	{q14}, [r9]\n\t"
 4937        "mov	r4, r11\n\t"
 4938        "cmp	r4, #4\n\t"
 4939        "blt	L_aes_gcm_encrypt_arm32_crypto_256_out_start_sw_%=\n\t"
 4940        "\n"
 4941    "L_aes_gcm_encrypt_arm32_crypto_256_out_start_dw_%=:\n\t"
 4942        "ldr	lr, [r9], #4\n\t"
 4943        "sub	r4, r4, #4\n\t"
 4944        "str	lr, [%[out]], #4\n\t"
 4945        "cmp	r4, #4\n\t"
 4946        "bge	L_aes_gcm_encrypt_arm32_crypto_256_out_start_dw_%=\n\t"
 4947        "\n"
 4948    "L_aes_gcm_encrypt_arm32_crypto_256_out_start_sw_%=:\n\t"
 4949        "cmp	r4, #2\n\t"
 4950        "blt	L_aes_gcm_encrypt_arm32_crypto_256_out_start_byte_%=\n\t"
 4951        "ldrh	lr, [r9], #2\n\t"
 4952        "sub	r4, r4, #2\n\t"
 4953        "strh	lr, [%[out]], #2\n\t"
 4954        "\n"
 4955    "L_aes_gcm_encrypt_arm32_crypto_256_out_start_byte_%=:\n\t"
 4956        "cmp	r4, #1\n\t"
 4957        "blt	L_aes_gcm_encrypt_arm32_crypto_256_out_end_bytes_%=\n\t"
 4958        "ldrb	lr, [r9], #1\n\t"
 4959        "subs	r4, r4, #1\n\t"
 4960        "strb	lr, [%[out]], #1\n\t"
 4961        "bne	L_aes_gcm_encrypt_arm32_crypto_256_out_start_byte_%=\n\t"
 4962        "\n"
 4963    "L_aes_gcm_encrypt_arm32_crypto_256_out_end_bytes_%=:\n\t"
 4964        "\n"
 4965    "L_aes_gcm_encrypt_arm32_crypto_256_partial_done_%=:\n\t"
 4966        /* Finish */
 4967        "add	r8, %[sz], #15\n\t"
 4968        "sub	r8, r5, r8, lsr #4\n\t"
 4969        "rev	r8, r8\n\t"
 4970        "vmov.32	s27, r8\n\t"
 4971        "aese.8	q6, q0\n\t"
 4972        "aesmc.8	q6, q6\n\t"
 4973        "aese.8	q6, q1\n\t"
 4974        "aesmc.8	q6, q6\n\t"
 4975        "aese.8	q6, q2\n\t"
 4976        "aesmc.8	q6, q6\n\t"
 4977        "aese.8	q6, q3\n\t"
 4978        "aesmc.8	q6, q6\n\t"
 4979        "aese.8	q6, q7\n\t"
 4980        "aesmc.8	q6, q6\n\t"
 4981        "aese.8	q6, q8\n\t"
 4982        "aesmc.8	q6, q6\n\t"
 4983        "aese.8	q6, q9\n\t"
 4984        "aesmc.8	q6, q6\n\t"
 4985        "aese.8	q6, q10\n\t"
 4986        "aesmc.8	q6, q6\n\t"
 4987        "aese.8	q6, q11\n\t"
 4988        "aesmc.8	q6, q6\n\t"
 4989        "aese.8	q6, q12\n\t"
 4990        "aesmc.8	q6, q6\n\t"
 4991        "vld1.32	{q14}, [r7]!\n\t"
 4992        "aese.8	q6, q13\n\t"
 4993        "aesmc.8	q6, q6\n\t"
 4994        "vld1.32	{q15}, [r7]!\n\t"
 4995        "aese.8	q6, q14\n\t"
 4996        "aesmc.8	q6, q6\n\t"
 4997        "vld1.32	{q14}, [r7]!\n\t"
 4998        "aese.8	q6, q15\n\t"
 4999        "aesmc.8	q6, q6\n\t"
 5000        "vld1.32	{q15}, [r7]\n\t"
 5001        "aese.8	q6, q14\n\t"
 5002        "veor.8	q6, q6, q15\n\t"
 5003        "sub	r7, r7, #48\n\t"
 5004#endif /* !NO_AES_256 */
 5005        "b	L_aes_gcm_encrypt_arm32_crypto_done_enc_%=\n\t"
 5006        /* AES_GCM_128 */
 5007        "\n"
 5008    "L_aes_gcm_encrypt_arm32_crypto_start_128_%=:\n\t"
 5009#ifndef NO_AES_128
 5010        "cmp	r10, #1\n\t"
 5011        "blt	L_aes_gcm_encrypt_arm32_crypto_128_done_%=\n\t"
 5012        "beq	L_aes_gcm_encrypt_arm32_crypto_128_start_1_%=\n\t"
 5013        "\n"
 5014    "L_aes_gcm_encrypt_arm32_crypto_128_start_2_%=:\n\t"
 5015        "add	r8, r5, #1\n\t"
 5016        "vmov.8	q4, q6\n\t"
 5017        "add	r5, r5, #2\n\t"
 5018        "vmov.8	q5, q6\n\t"
 5019        "rev	r8, r8\n\t"
 5020        "rev	r12, r5\n\t"
 5021        "vmov	s19, r8\n\t"
 5022        "vmov	s23, r12\n\t"
 5023        "aese.8	q4, q0\n\t"
 5024        "aesmc.8	q4, q4\n\t"
 5025        "aese.8	q5, q0\n\t"
 5026        "aesmc.8	q5, q5\n\t"
 5027        "aese.8	q4, q1\n\t"
 5028        "aesmc.8	q4, q4\n\t"
 5029        "aese.8	q5, q1\n\t"
 5030        "aesmc.8	q5, q5\n\t"
 5031        "aese.8	q4, q2\n\t"
 5032        "aesmc.8	q4, q4\n\t"
 5033        "aese.8	q5, q2\n\t"
 5034        "aesmc.8	q5, q5\n\t"
 5035        "aese.8	q4, q3\n\t"
 5036        "aesmc.8	q4, q4\n\t"
 5037        "aese.8	q5, q3\n\t"
 5038        "aesmc.8	q5, q5\n\t"
 5039        "aese.8	q4, q7\n\t"
 5040        "aesmc.8	q4, q4\n\t"
 5041        "aese.8	q5, q7\n\t"
 5042        "aesmc.8	q5, q5\n\t"
 5043        "aese.8	q4, q8\n\t"
 5044        "aesmc.8	q4, q4\n\t"
 5045        "aese.8	q5, q8\n\t"
 5046        "aesmc.8	q5, q5\n\t"
 5047        "aese.8	q4, q9\n\t"
 5048        "aesmc.8	q4, q4\n\t"
 5049        "aese.8	q5, q9\n\t"
 5050        "aesmc.8	q5, q5\n\t"
 5051        "subs	r10, r10, #2\n\t"
 5052        "aese.8	q4, q10\n\t"
 5053        "aesmc.8	q4, q4\n\t"
 5054        "aese.8	q5, q10\n\t"
 5055        "aesmc.8	q5, q5\n\t"
 5056        "aese.8	q4, q11\n\t"
 5057        "aesmc.8	q4, q4\n\t"
 5058        "aese.8	q5, q11\n\t"
 5059        "aesmc.8	q5, q5\n\t"
 5060        "vld1.8	{q14-q15}, [%[in]]!\n\t"
 5061        "aese.8	q4, q12\n\t"
 5062        "veor.8	q4, q4, q13\n\t"
 5063        "aese.8	q5, q12\n\t"
 5064        "veor.8	q5, q5, q13\n\t"
 5065        "veor.8	q14, q14, q4\n\t"
 5066        "veor.8	q15, q15, q5\n\t"
 5067        "vst1.8	{q14-q15}, [%[out]]!\n\t"
 5068        "cmp	r10, #1\n\t"
 5069        "bgt	L_aes_gcm_encrypt_arm32_crypto_128_start_2_%=\n\t"
 5070        "blt	L_aes_gcm_encrypt_arm32_crypto_128_done_%=\n\t"
 5071        "\n"
 5072    "L_aes_gcm_encrypt_arm32_crypto_128_start_1_%=:\n\t"
 5073        "add	r5, r5, #1\n\t"
 5074        "vmov.8	q4, q6\n\t"
 5075        "rev	r8, r5\n\t"
 5076        "vmov	s19, r8\n\t"
 5077        "aese.8	q4, q0\n\t"
 5078        "aesmc.8	q4, q4\n\t"
 5079        "aese.8	q4, q1\n\t"
 5080        "aesmc.8	q4, q4\n\t"
 5081        "aese.8	q4, q2\n\t"
 5082        "aesmc.8	q4, q4\n\t"
 5083        "aese.8	q4, q3\n\t"
 5084        "aesmc.8	q4, q4\n\t"
 5085        "aese.8	q4, q7\n\t"
 5086        "aesmc.8	q4, q4\n\t"
 5087        "aese.8	q4, q8\n\t"
 5088        "aesmc.8	q4, q4\n\t"
 5089        "aese.8	q4, q9\n\t"
 5090        "aesmc.8	q4, q4\n\t"
 5091        "aese.8	q4, q10\n\t"
 5092        "aesmc.8	q4, q4\n\t"
 5093        "aese.8	q4, q11\n\t"
 5094        "aesmc.8	q4, q4\n\t"
 5095        "vld1.8	{q14}, [%[in]]!\n\t"
 5096        "aese.8	q4, q12\n\t"
 5097        "veor.8	q4, q4, q13\n\t"
 5098        "veor.8	q14, q14, q4\n\t"
 5099        "vst1.32	{q14}, [%[out]]!\n\t"
 5100        "\n"
 5101    "L_aes_gcm_encrypt_arm32_crypto_128_done_%=:\n\t"
 5102        "ands	r11, %[sz], #15\n\t"
 5103        "beq	L_aes_gcm_encrypt_arm32_crypto_128_partial_done_%=\n\t"
 5104        "veor.8	q14, q14, q14\n\t"
 5105        "mov	r4, r11\n\t"
 5106        "vst1.32	{q14}, [r9]\n\t"
 5107        "cmp	r4, #4\n\t"
 5108        "blt	L_aes_gcm_encrypt_arm32_crypto_128_start_sw_%=\n\t"
 5109        "\n"
 5110    "L_aes_gcm_encrypt_arm32_crypto_128_start_dw_%=:\n\t"
 5111        "ldr	lr, [%[in]], #4\n\t"
 5112        "sub	r4, r4, #4\n\t"
 5113        "str	lr, [r9], #4\n\t"
 5114        "cmp	r4, #4\n\t"
 5115        "bge	L_aes_gcm_encrypt_arm32_crypto_128_start_dw_%=\n\t"
 5116        "\n"
 5117    "L_aes_gcm_encrypt_arm32_crypto_128_start_sw_%=:\n\t"
 5118        "cmp	r4, #2\n\t"
 5119        "blt	L_aes_gcm_encrypt_arm32_crypto_128_start_byte_%=\n\t"
 5120        "ldrh	lr, [%[in]], #2\n\t"
 5121        "sub	r4, r4, #2\n\t"
 5122        "strh	lr, [r9], #2\n\t"
 5123        "\n"
 5124    "L_aes_gcm_encrypt_arm32_crypto_128_start_byte_%=:\n\t"
 5125        "cmp	r4, #1\n\t"
 5126        "blt	L_aes_gcm_encrypt_arm32_crypto_128_end_bytes_%=\n\t"
 5127        "ldrb	lr, [%[in]], #1\n\t"
 5128        "subs	r4, r4, #1\n\t"
 5129        "strb	lr, [r9], #1\n\t"
 5130        "bne	L_aes_gcm_encrypt_arm32_crypto_128_start_byte_%=\n\t"
 5131        "\n"
 5132    "L_aes_gcm_encrypt_arm32_crypto_128_end_bytes_%=:\n\t"
 5133        "sub	r9, r9, r11\n\t"
 5134        "add	r5, r5, #1\n\t"
 5135        "vmov.8	q4, q6\n\t"
 5136        "rev	r8, r5\n\t"
 5137        "vmov	s19, r8\n\t"
 5138        "aese.8	q4, q0\n\t"
 5139        "aesmc.8	q4, q4\n\t"
 5140        "aese.8	q4, q1\n\t"
 5141        "aesmc.8	q4, q4\n\t"
 5142        "aese.8	q4, q2\n\t"
 5143        "aesmc.8	q4, q4\n\t"
 5144        "aese.8	q4, q3\n\t"
 5145        "aesmc.8	q4, q4\n\t"
 5146        "aese.8	q4, q7\n\t"
 5147        "aesmc.8	q4, q4\n\t"
 5148        "aese.8	q4, q8\n\t"
 5149        "aesmc.8	q4, q4\n\t"
 5150        "aese.8	q4, q9\n\t"
 5151        "aesmc.8	q4, q4\n\t"
 5152        "aese.8	q4, q10\n\t"
 5153        "aesmc.8	q4, q4\n\t"
 5154        "aese.8	q4, q11\n\t"
 5155        "aesmc.8	q4, q4\n\t"
 5156        "vld1.8	{q14}, [r9]\n\t"
 5157        "aese.8	q4, q12\n\t"
 5158        "veor.8	q4, q4, q13\n\t"
 5159        "veor.8	q14, q14, q4\n\t"
 5160        "vst1.32	{q14}, [r9]\n\t"
 5161        "mov	r4, r11\n\t"
 5162        "cmp	r4, #4\n\t"
 5163        "blt	L_aes_gcm_encrypt_arm32_crypto_128_out_start_sw_%=\n\t"
 5164        "\n"
 5165    "L_aes_gcm_encrypt_arm32_crypto_128_out_start_dw_%=:\n\t"
 5166        "ldr	lr, [r9], #4\n\t"
 5167        "sub	r4, r4, #4\n\t"
 5168        "str	lr, [%[out]], #4\n\t"
 5169        "cmp	r4, #4\n\t"
 5170        "bge	L_aes_gcm_encrypt_arm32_crypto_128_out_start_dw_%=\n\t"
 5171        "\n"
 5172    "L_aes_gcm_encrypt_arm32_crypto_128_out_start_sw_%=:\n\t"
 5173        "cmp	r4, #2\n\t"
 5174        "blt	L_aes_gcm_encrypt_arm32_crypto_128_out_start_byte_%=\n\t"
 5175        "ldrh	lr, [r9], #2\n\t"
 5176        "sub	r4, r4, #2\n\t"
 5177        "strh	lr, [%[out]], #2\n\t"
 5178        "\n"
 5179    "L_aes_gcm_encrypt_arm32_crypto_128_out_start_byte_%=:\n\t"
 5180        "cmp	r4, #1\n\t"
 5181        "blt	L_aes_gcm_encrypt_arm32_crypto_128_out_end_bytes_%=\n\t"
 5182        "ldrb	lr, [r9], #1\n\t"
 5183        "subs	r4, r4, #1\n\t"
 5184        "strb	lr, [%[out]], #1\n\t"
 5185        "bne	L_aes_gcm_encrypt_arm32_crypto_128_out_start_byte_%=\n\t"
 5186        "\n"
 5187    "L_aes_gcm_encrypt_arm32_crypto_128_out_end_bytes_%=:\n\t"
 5188        "\n"
 5189    "L_aes_gcm_encrypt_arm32_crypto_128_partial_done_%=:\n\t"
 5190        /* Finish */
 5191        "add	r8, %[sz], #15\n\t"
 5192        "sub	r8, r5, r8, lsr #4\n\t"
 5193        "rev	r8, r8\n\t"
 5194        "vmov.32	s27, r8\n\t"
 5195        "aese.8	q6, q0\n\t"
 5196        "aesmc.8	q6, q6\n\t"
 5197        "aese.8	q6, q1\n\t"
 5198        "aesmc.8	q6, q6\n\t"
 5199        "aese.8	q6, q2\n\t"
 5200        "aesmc.8	q6, q6\n\t"
 5201        "aese.8	q6, q3\n\t"
 5202        "aesmc.8	q6, q6\n\t"
 5203        "aese.8	q6, q7\n\t"
 5204        "aesmc.8	q6, q6\n\t"
 5205        "aese.8	q6, q8\n\t"
 5206        "aesmc.8	q6, q6\n\t"
 5207        "aese.8	q6, q9\n\t"
 5208        "aesmc.8	q6, q6\n\t"
 5209        "aese.8	q6, q10\n\t"
 5210        "aesmc.8	q6, q6\n\t"
 5211        "aese.8	q6, q11\n\t"
 5212        "aesmc.8	q6, q6\n\t"
 5213        "aese.8	q6, q12\n\t"
 5214        "veor.8	q6, q6, q13\n\t"
 5215#endif /* !NO_AES_128 */
 5216        "\n"
 5217    "L_aes_gcm_encrypt_arm32_crypto_done_enc_%=:\n\t"
 5218        /* aadSz */
 5219        "ldr	r6, [sp, #16]\n\t"
 5220        /* gcm_h */
 5221        "ldr	r8, [sp, #24]\n\t"
 5222        "sub	%[out], %[out], %[sz]\n\t"
 5223        "vmov.i8	q13, #0x87\n\t"
 5224        "veor.8	q7, q7, q7\n\t"
 5225        "vshr.u64	q13, q13, #56\n\t"
 5226        "vld1.32	{q8}, [r8]\n\t"
 5227        "orr	r10, r6, %[sz]\n\t"
 5228        "cmp	r10, #32\n\t"
 5229        "blt	L_aes_gcm_encrypt_arm32_crypto_h_done_%=\n\t"
 5230        /* Square H => H^2 */
 5231        "vmull.p64	q1, d17, d17\n\t"
 5232        "vmull.p64	q0, d16, d16\n\t"
 5233        "vmull.p64	q9, d3, d27\n\t"
 5234        "veor.8	d2, d2, d19\n\t"
 5235        "veor.8	d1, d1, d18\n\t"
 5236        "vmull.p64	q9, d2, d26\n\t"
 5237        "veor.8	q9, q9, q0\n\t"
 5238        "cmp	r10, #0x40\n\t"
 5239        "blt	L_aes_gcm_encrypt_arm32_crypto_h_done_%=\n\t"
 5240        /* Multiply H and H^2  => H^3 */
 5241        "vmull.p64	q2, d17, d18\n\t"
 5242        "vmull.p64	q3, d16, d19\n\t"
 5243        "vmull.p64	q0, d16, d18\n\t"
 5244        "vmull.p64	q1, d17, d19\n\t"
 5245        "veor.8	q2, q2, q3\n\t"
 5246        /*   Reduce */
 5247        "vmull.p64	q10, d3, d27\n\t"
 5248        "veor.8	d2, d2, d5\n\t"
 5249        "veor.8	d1, d1, d4\n\t"
 5250        "veor.8	d2, d2, d21\n\t"
 5251        "veor.8	d1, d1, d20\n\t"
 5252        "vmull.p64	q10, d2, d26\n\t"
 5253        "veor.8	q10, q10, q0\n\t"
 5254        /* Square H^2 => H^4 */
 5255        "vmull.p64	q1, d19, d19\n\t"
 5256        "vmull.p64	q0, d18, d18\n\t"
 5257        "vmull.p64	q11, d3, d27\n\t"
 5258        "veor.8	d2, d2, d23\n\t"
 5259        "veor.8	d1, d1, d22\n\t"
 5260        "vmull.p64	q11, d2, d26\n\t"
 5261        "veor.8	q11, q11, q0\n\t"
 5262        /* Done */
 5263        "\n"
 5264    "L_aes_gcm_encrypt_arm32_crypto_h_done_%=:\n\t"
 5265        /* aad */
 5266        "ldr	r5, [sp, #12]\n\t"
 5267        "lsr	r10, r6, #4\n\t"
 5268        "cmp	r10, #1\n\t"
 5269        "blt	L_aes_gcm_encrypt_arm32_crypto_aad_done_%=\n\t"
 5270        "beq	L_aes_gcm_encrypt_arm32_crypto_aad_start_1_%=\n\t"
 5271        "cmp	r10, #4\n\t"
 5272        "blt	L_aes_gcm_encrypt_arm32_crypto_aad_start_2_%=\n\t"
 5273        "\n"
 5274    "L_aes_gcm_encrypt_arm32_crypto_aad_start_4_%=:\n\t"
 5275        "vldm	r5!, {q0-q2}\n\t"
 5276        "vmov.i8	q12, #0x55\n\t"
 5277        "vmov.i8	q5, #51\n\t"
 5278        "vshl.u8	q14, q0, #1\n\t"
 5279        "vshl.u8	q15, q1, #1\n\t"
 5280        "vshl.u8	q4, q2, #1\n\t"
 5281        "ldr	lr, [r5], #4\n\t"
 5282        "vshr.u8	q0, q0, #1\n\t"
 5283        "vshr.u8	q1, q1, #1\n\t"
 5284        "vshr.u8	q2, q2, #1\n\t"
 5285        "ldr	r4, [r5], #4\n\t"
 5286        "vbit.8	q14, q0, q12\n\t"
 5287        "vbit.8	q15, q1, q12\n\t"
 5288        "vbit.8	q4, q2, q12\n\t"
 5289        "ldr	r8, [r5], #4\n\t"
 5290        "vshl.u8	q0, q14, #2\n\t"
 5291        "vshl.u8	q1, q15, #2\n\t"
 5292        "vshl.u8	q2, q4, #2\n\t"
 5293        "ldr	r12, [r5], #4\n\t"
 5294        "vshr.u8	q14, q14, #2\n\t"
 5295        "vshr.u8	q15, q15, #2\n\t"
 5296        "vshr.u8	q4, q4, #2\n\t"
 5297        "rbit	lr, lr\n\t"
 5298        "vbit.8	q0, q14, q5\n\t"
 5299        "rbit	r4, r4\n\t"
 5300        "vbit.8	q1, q15, q5\n\t"
 5301        "rbit	r8, r8\n\t"
 5302        "vbit.8	q2, q4, q5\n\t"
 5303        "rbit	r12, r12\n\t"
 5304        "vshl.u8	q14, q0, #4\n\t"
 5305        "rev	lr, lr\n\t"
 5306        "vshl.u8	q15, q1, #4\n\t"
 5307        "rev	r4, r4\n\t"
 5308        "vshl.u8	q4, q2, #4\n\t"
 5309        "rev	r8, r8\n\t"
 5310        "vsri.u8	q14, q0, #4\n\t"
 5311        "rev	r12, r12\n\t"
 5312        "vsri.u8	q15, q1, #4\n\t"
 5313        "vsri.u8	q4, q2, #4\n\t"
 5314        "vmov	d10, lr, r4\n\t"
 5315        "vmov	d11, r8, r12\n\t"
 5316        "veor.8	q12, q7, q14\n\t"
 5317        /*   X  = C * H^1 */
 5318        "vmull.p64	q2, d11, d16\n\t"
 5319        "vmull.p64	q7, d10, d17\n\t"
 5320        "vmull.p64	q0, d10, d16\n\t"
 5321        "vmull.p64	q1, d11, d17\n\t"
 5322        "veor.8	q2, q2, q7\n\t"
 5323        /*   X += C * H^2 */
 5324        "vmull.p64	q3, d8, d18\n\t"
 5325        "vmull.p64	q7, d9, d19\n\t"
 5326        "veor.8	q0, q0, q3\n\t"
 5327        "veor.8	q1, q1, q7\n\t"
 5328        "vmull.p64	q3, d9, d18\n\t"
 5329        "vmull.p64	q7, d8, d19\n\t"
 5330        "veor.8	q2, q2, q3\n\t"
 5331        "veor.8	q2, q2, q7\n\t"
 5332        /*   X += C * H^3 */
 5333        "vmull.p64	q3, d30, d20\n\t"
 5334        "vmull.p64	q7, d31, d21\n\t"
 5335        "veor.8	q0, q0, q3\n\t"
 5336        "veor.8	q1, q1, q7\n\t"
 5337        "vmull.p64	q3, d31, d20\n\t"
 5338        "vmull.p64	q7, d30, d21\n\t"
 5339        "veor.8	q2, q2, q3\n\t"
 5340        "veor.8	q2, q2, q7\n\t"
 5341        /*   X += C * H^4 */
 5342        "vmull.p64	q3, d24, d22\n\t"
 5343        "vmull.p64	q7, d25, d23\n\t"
 5344        "veor.8	q0, q0, q3\n\t"
 5345        "veor.8	q1, q1, q7\n\t"
 5346        "vmull.p64	q3, d25, d22\n\t"
 5347        "vmull.p64	q7, d24, d23\n\t"
 5348        "veor.8	q2, q2, q3\n\t"
 5349        "veor.8	q2, q2, q7\n\t"
 5350        /*   Reduce */
 5351        "vmull.p64	q7, d3, d27\n\t"
 5352        "veor.8	d2, d2, d5\n\t"
 5353        "veor.8	d1, d1, d4\n\t"
 5354        "veor.8	d2, d2, d15\n\t"
 5355        "veor.8	d1, d1, d14\n\t"
 5356        "vmull.p64	q7, d2, d26\n\t"
 5357        "veor.8	q7, q7, q0\n\t"
 5358        /* Done GHASH */
 5359        "sub	r10, r10, #4\n\t"
 5360        "cmp	r10, #4\n\t"
 5361        "bge	L_aes_gcm_encrypt_arm32_crypto_aad_start_4_%=\n\t"
 5362        "cmp	r10, #1\n\t"
 5363        "blt	L_aes_gcm_encrypt_arm32_crypto_aad_done_%=\n\t"
 5364        "beq	L_aes_gcm_encrypt_arm32_crypto_aad_start_1_%=\n\t"
 5365        "\n"
 5366    "L_aes_gcm_encrypt_arm32_crypto_aad_start_2_%=:\n\t"
 5367        "vld1.32	{q14-q15}, [r5]!\n\t"
 5368        "vmov.i8	q12, #0x55\n\t"
 5369        "vshl.u8	q0, q14, #1\n\t"
 5370        "vshl.u8	q1, q15, #1\n\t"
 5371        "vshr.u8	q14, q14, #1\n\t"
 5372        "vshr.u8	q15, q15, #1\n\t"
 5373        "vbif.8	q14, q0, q12\n\t"
 5374        "vbif.8	q15, q1, q12\n\t"
 5375        "vmov.i8	q12, #51\n\t"
 5376        "vshl.u8	q0, q14, #2\n\t"
 5377        "vshl.u8	q1, q15, #2\n\t"
 5378        "vshr.u8	q14, q14, #2\n\t"
 5379        "vshr.u8	q15, q15, #2\n\t"
 5380        "vbit.8	q0, q14, q12\n\t"
 5381        "vbit.8	q1, q15, q12\n\t"
 5382        "vshl.u8	q14, q0, #4\n\t"
 5383        "vshl.u8	q15, q1, #4\n\t"
 5384        "vsri.u8	q14, q0, #4\n\t"
 5385        "vsri.u8	q15, q1, #4\n\t"
 5386        "veor.8	q12, q7, q14\n\t"
 5387        /*   X  = C * H^1 */
 5388        "vmull.p64	q2, d31, d16\n\t"
 5389        "vmull.p64	q7, d30, d17\n\t"
 5390        "vmull.p64	q0, d30, d16\n\t"
 5391        "vmull.p64	q1, d31, d17\n\t"
 5392        "veor.8	q2, q2, q7\n\t"
 5393        /*   X += C * H^2 */
 5394        "vmull.p64	q3, d24, d18\n\t"
 5395        "vmull.p64	q7, d25, d19\n\t"
 5396        "veor.8	q0, q0, q3\n\t"
 5397        "veor.8	q1, q1, q7\n\t"
 5398        "vmull.p64	q3, d25, d18\n\t"
 5399        "vmull.p64	q7, d24, d19\n\t"
 5400        "veor.8	q2, q2, q3\n\t"
 5401        "veor.8	q2, q2, q7\n\t"
 5402        /*   Reduce */
 5403        "vmull.p64	q7, d3, d27\n\t"
 5404        "veor.8	d2, d2, d5\n\t"
 5405        "veor.8	d1, d1, d4\n\t"
 5406        "veor.8	d2, d2, d15\n\t"
 5407        "veor.8	d1, d1, d14\n\t"
 5408        "vmull.p64	q7, d2, d26\n\t"
 5409        "veor.8	q7, q7, q0\n\t"
 5410        /* Done GHASH */
 5411        "sub	r10, r10, #2\n\t"
 5412        "cmp	r10, #0\n\t"
 5413        "beq	L_aes_gcm_encrypt_arm32_crypto_aad_done_%=\n\t"
 5414        "\n"
 5415    "L_aes_gcm_encrypt_arm32_crypto_aad_start_1_%=:\n\t"
 5416        "vld1.32	{q14}, [r5]!\n\t"
 5417        "vmov.i8	q12, #0x55\n\t"
 5418        "vshl.u8	q0, q14, #1\n\t"
 5419        "vshr.u8	q14, q14, #1\n\t"
 5420        "vbif.8	q14, q0, q12\n\t"
 5421        "vmov.i8	q12, #51\n\t"
 5422        "vshl.u8	q0, q14, #2\n\t"
 5423        "vshr.u8	q14, q14, #2\n\t"
 5424        "vbit.8	q0, q14, q12\n\t"
 5425        "vshl.u8	q14, q0, #4\n\t"
 5426        "vsri.u8	q14, q0, #4\n\t"
 5427        "veor.8	q12, q7, q14\n\t"
 5428        /*   X  = C * H^1 */
 5429        "vmull.p64	q2, d25, d16\n\t"
 5430        "vmull.p64	q7, d24, d17\n\t"
 5431        "vmull.p64	q0, d24, d16\n\t"
 5432        "vmull.p64	q1, d25, d17\n\t"
 5433        "veor.8	q2, q2, q7\n\t"
 5434        /*   Reduce */
 5435        "vmull.p64	q7, d3, d27\n\t"
 5436        "veor.8	d2, d2, d5\n\t"
 5437        "veor.8	d1, d1, d4\n\t"
 5438        "veor.8	d2, d2, d15\n\t"
 5439        "veor.8	d1, d1, d14\n\t"
 5440        "vmull.p64	q7, d2, d26\n\t"
 5441        "veor.8	q7, q7, q0\n\t"
 5442        /* Done GHASH */
 5443        "\n"
 5444    "L_aes_gcm_encrypt_arm32_crypto_aad_done_%=:\n\t"
 5445        "ands	r11, r6, #15\n\t"
 5446        "beq	L_aes_gcm_encrypt_arm32_crypto_aad_partial_done_%=\n\t"
 5447        "veor.8	q0, q0, q0\n\t"
 5448        "mov	r12, r11\n\t"
 5449        "vst1.32	{q0}, [r9]\n\t"
 5450        "cmp	r12, #4\n\t"
 5451        "blt	L_aes_gcm_encrypt_arm32_crypto_aad_start_sw_%=\n\t"
 5452        "\n"
 5453    "L_aes_gcm_encrypt_arm32_crypto_aad_start_dw_%=:\n\t"
 5454        "ldr	r8, [r5], #4\n\t"
 5455        "sub	r12, r12, #4\n\t"
 5456        "str	r8, [r9], #4\n\t"
 5457        "cmp	r12, #4\n\t"
 5458        "bge	L_aes_gcm_encrypt_arm32_crypto_aad_start_dw_%=\n\t"
 5459        "\n"
 5460    "L_aes_gcm_encrypt_arm32_crypto_aad_start_sw_%=:\n\t"
 5461        "cmp	r12, #2\n\t"
 5462        "blt	L_aes_gcm_encrypt_arm32_crypto_aad_start_byte_%=\n\t"
 5463        "ldrh	r8, [r5], #2\n\t"
 5464        "sub	r12, r12, #2\n\t"
 5465        "strh	r8, [r9], #2\n\t"
 5466        "\n"
 5467    "L_aes_gcm_encrypt_arm32_crypto_aad_start_byte_%=:\n\t"
 5468        "cmp	r12, #1\n\t"
 5469        "blt	L_aes_gcm_encrypt_arm32_crypto_aad_end_bytes_%=\n\t"
 5470        "ldrb	r8, [r5], #1\n\t"
 5471        "subs	r12, r12, #1\n\t"
 5472        "strb	r8, [r9], #1\n\t"
 5473        "bne	L_aes_gcm_encrypt_arm32_crypto_aad_start_byte_%=\n\t"
 5474        "\n"
 5475    "L_aes_gcm_encrypt_arm32_crypto_aad_end_bytes_%=:\n\t"
 5476        "sub	r9, r9, r11\n\t"
 5477        "vld1.32	{q14}, [r9]\n\t"
 5478        "vmov.i8	q12, #0x55\n\t"
 5479        "vshl.u8	q0, q14, #1\n\t"
 5480        "vshr.u8	q14, q14, #1\n\t"
 5481        "vbif.8	q14, q0, q12\n\t"
 5482        "vmov.i8	q12, #51\n\t"
 5483        "vshl.u8	q0, q14, #2\n\t"
 5484        "vshr.u8	q14, q14, #2\n\t"
 5485        "vbit.8	q0, q14, q12\n\t"
 5486        "vshl.u8	q14, q0, #4\n\t"
 5487        "vsri.u8	q14, q0, #4\n\t"
 5488        "veor.8	q12, q7, q14\n\t"
 5489        /*   X  = C * H^1 */
 5490        "vmull.p64	q2, d25, d16\n\t"
 5491        "vmull.p64	q7, d24, d17\n\t"
 5492        "vmull.p64	q0, d24, d16\n\t"
 5493        "vmull.p64	q1, d25, d17\n\t"
 5494        "veor.8	q2, q2, q7\n\t"
 5495        /*   Reduce */
 5496        "vmull.p64	q7, d3, d27\n\t"
 5497        "veor.8	d2, d2, d5\n\t"
 5498        "veor.8	d1, d1, d4\n\t"
 5499        "veor.8	d2, d2, d15\n\t"
 5500        "veor.8	d1, d1, d14\n\t"
 5501        "vmull.p64	q7, d2, d26\n\t"
 5502        "veor.8	q7, q7, q0\n\t"
 5503        /* Done GHASH */
 5504        "\n"
 5505    "L_aes_gcm_encrypt_arm32_crypto_aad_partial_done_%=:\n\t"
 5506        /* out */
 5507        "lsr	r10, %[sz], #4\n\t"
 5508        "cmp	r10, #1\n\t"
 5509        "blt	L_aes_gcm_encrypt_arm32_crypto_out_done_%=\n\t"
 5510        "beq	L_aes_gcm_encrypt_arm32_crypto_out_start_1_%=\n\t"
 5511        "cmp	r10, #4\n\t"
 5512        "blt	L_aes_gcm_encrypt_arm32_crypto_out_start_2_%=\n\t"
 5513        "\n"
 5514    "L_aes_gcm_encrypt_arm32_crypto_out_start_4_%=:\n\t"
 5515        "vldm	%[out]!, {q0-q2}\n\t"
 5516        "vmov.i8	q12, #0x55\n\t"
 5517        "vmov.i8	q5, #51\n\t"
 5518        "vshl.u8	q14, q0, #1\n\t"
 5519        "vshl.u8	q15, q1, #1\n\t"
 5520        "vshl.u8	q4, q2, #1\n\t"
 5521        "ldr	lr, [%[out]], #4\n\t"
 5522        "vshr.u8	q0, q0, #1\n\t"
 5523        "vshr.u8	q1, q1, #1\n\t"
 5524        "vshr.u8	q2, q2, #1\n\t"
 5525        "ldr	r4, [%[out]], #4\n\t"
 5526        "vbit.8	q14, q0, q12\n\t"
 5527        "vbit.8	q15, q1, q12\n\t"
 5528        "vbit.8	q4, q2, q12\n\t"
 5529        "ldr	r8, [%[out]], #4\n\t"
 5530        "vshl.u8	q0, q14, #2\n\t"
 5531        "vshl.u8	q1, q15, #2\n\t"
 5532        "vshl.u8	q2, q4, #2\n\t"
 5533        "ldr	r12, [%[out]], #4\n\t"
 5534        "vshr.u8	q14, q14, #2\n\t"
 5535        "vshr.u8	q15, q15, #2\n\t"
 5536        "vshr.u8	q4, q4, #2\n\t"
 5537        "rbit	lr, lr\n\t"
 5538        "vbit.8	q0, q14, q5\n\t"
 5539        "rbit	r4, r4\n\t"
 5540        "vbit.8	q1, q15, q5\n\t"
 5541        "rbit	r8, r8\n\t"
 5542        "vbit.8	q2, q4, q5\n\t"
 5543        "rbit	r12, r12\n\t"
 5544        "vshl.u8	q14, q0, #4\n\t"
 5545        "rev	lr, lr\n\t"
 5546        "vshl.u8	q15, q1, #4\n\t"
 5547        "rev	r4, r4\n\t"
 5548        "vshl.u8	q4, q2, #4\n\t"
 5549        "rev	r8, r8\n\t"
 5550        "vsri.u8	q14, q0, #4\n\t"
 5551        "rev	r12, r12\n\t"
 5552        "vsri.u8	q15, q1, #4\n\t"
 5553        "vsri.u8	q4, q2, #4\n\t"
 5554        "vmov	d10, lr, r4\n\t"
 5555        "vmov	d11, r8, r12\n\t"
 5556        "veor.8	q12, q7, q14\n\t"
 5557        /*   X  = C * H^1 */
 5558        "vmull.p64	q2, d11, d16\n\t"
 5559        "vmull.p64	q7, d10, d17\n\t"
 5560        "vmull.p64	q0, d10, d16\n\t"
 5561        "vmull.p64	q1, d11, d17\n\t"
 5562        "veor.8	q2, q2, q7\n\t"
 5563        /*   X += C * H^2 */
 5564        "vmull.p64	q3, d8, d18\n\t"
 5565        "vmull.p64	q7, d9, d19\n\t"
 5566        "veor.8	q0, q0, q3\n\t"
 5567        "veor.8	q1, q1, q7\n\t"
 5568        "vmull.p64	q3, d9, d18\n\t"
 5569        "vmull.p64	q7, d8, d19\n\t"
 5570        "veor.8	q2, q2, q3\n\t"
 5571        "veor.8	q2, q2, q7\n\t"
 5572        /*   X += C * H^3 */
 5573        "vmull.p64	q3, d30, d20\n\t"
 5574        "vmull.p64	q7, d31, d21\n\t"
 5575        "veor.8	q0, q0, q3\n\t"
 5576        "veor.8	q1, q1, q7\n\t"
 5577        "vmull.p64	q3, d31, d20\n\t"
 5578        "vmull.p64	q7, d30, d21\n\t"
 5579        "veor.8	q2, q2, q3\n\t"
 5580        "veor.8	q2, q2, q7\n\t"
 5581        /*   X += C * H^4 */
 5582        "vmull.p64	q3, d24, d22\n\t"
 5583        "vmull.p64	q7, d25, d23\n\t"
 5584        "veor.8	q0, q0, q3\n\t"
 5585        "veor.8	q1, q1, q7\n\t"
 5586        "vmull.p64	q3, d25, d22\n\t"
 5587        "vmull.p64	q7, d24, d23\n\t"
 5588        "veor.8	q2, q2, q3\n\t"
 5589        "veor.8	q2, q2, q7\n\t"
 5590        /*   Reduce */
 5591        "vmull.p64	q7, d3, d27\n\t"
 5592        "veor.8	d2, d2, d5\n\t"
 5593        "veor.8	d1, d1, d4\n\t"
 5594        "veor.8	d2, d2, d15\n\t"
 5595        "veor.8	d1, d1, d14\n\t"
 5596        "vmull.p64	q7, d2, d26\n\t"
 5597        "veor.8	q7, q7, q0\n\t"
 5598        /* Done GHASH */
 5599        "sub	r10, r10, #4\n\t"
 5600        "cmp	r10, #4\n\t"
 5601        "bge	L_aes_gcm_encrypt_arm32_crypto_out_start_4_%=\n\t"
 5602        "cmp	r10, #1\n\t"
 5603        "blt	L_aes_gcm_encrypt_arm32_crypto_out_done_%=\n\t"
 5604        "beq	L_aes_gcm_encrypt_arm32_crypto_out_start_1_%=\n\t"
 5605        "\n"
 5606    "L_aes_gcm_encrypt_arm32_crypto_out_start_2_%=:\n\t"
 5607        "vld1.32	{q14-q15}, [%[out]]!\n\t"
 5608        "vmov.i8	q12, #0x55\n\t"
 5609        "vshl.u8	q0, q14, #1\n\t"
 5610        "vshl.u8	q1, q15, #1\n\t"
 5611        "vshr.u8	q14, q14, #1\n\t"
 5612        "vshr.u8	q15, q15, #1\n\t"
 5613        "vbif.8	q14, q0, q12\n\t"
 5614        "vbif.8	q15, q1, q12\n\t"
 5615        "vmov.i8	q12, #51\n\t"
 5616        "vshl.u8	q0, q14, #2\n\t"
 5617        "vshl.u8	q1, q15, #2\n\t"
 5618        "vshr.u8	q14, q14, #2\n\t"
 5619        "vshr.u8	q15, q15, #2\n\t"
 5620        "vbit.8	q0, q14, q12\n\t"
 5621        "vbit.8	q1, q15, q12\n\t"
 5622        "vshl.u8	q14, q0, #4\n\t"
 5623        "vshl.u8	q15, q1, #4\n\t"
 5624        "vsri.u8	q14, q0, #4\n\t"
 5625        "vsri.u8	q15, q1, #4\n\t"
 5626        "veor.8	q12, q7, q14\n\t"
 5627        /*   X  = C * H^1 */
 5628        "vmull.p64	q2, d31, d16\n\t"
 5629        "vmull.p64	q7, d30, d17\n\t"
 5630        "vmull.p64	q0, d30, d16\n\t"
 5631        "vmull.p64	q1, d31, d17\n\t"
 5632        "veor.8	q2, q2, q7\n\t"
 5633        /*   X += C * H^2 */
 5634        "vmull.p64	q3, d24, d18\n\t"
 5635        "vmull.p64	q7, d25, d19\n\t"
 5636        "veor.8	q0, q0, q3\n\t"
 5637        "veor.8	q1, q1, q7\n\t"
 5638        "vmull.p64	q3, d25, d18\n\t"
 5639        "vmull.p64	q7, d24, d19\n\t"
 5640        "veor.8	q2, q2, q3\n\t"
 5641        "veor.8	q2, q2, q7\n\t"
 5642        /*   Reduce */
 5643        "vmull.p64	q7, d3, d27\n\t"
 5644        "veor.8	d2, d2, d5\n\t"
 5645        "veor.8	d1, d1, d4\n\t"
 5646        "veor.8	d2, d2, d15\n\t"
 5647        "veor.8	d1, d1, d14\n\t"
 5648        "vmull.p64	q7, d2, d26\n\t"
 5649        "veor.8	q7, q7, q0\n\t"
 5650        /* Done GHASH */
 5651        "sub	r10, r10, #2\n\t"
 5652        "cmp	r10, #0\n\t"
 5653        "beq	L_aes_gcm_encrypt_arm32_crypto_out_done_%=\n\t"
 5654        "\n"
 5655    "L_aes_gcm_encrypt_arm32_crypto_out_start_1_%=:\n\t"
 5656        "vld1.32	{q14}, [%[out]]!\n\t"
 5657        "vmov.i8	q12, #0x55\n\t"
 5658        "vshl.u8	q0, q14, #1\n\t"
 5659        "vshr.u8	q14, q14, #1\n\t"
 5660        "vbif.8	q14, q0, q12\n\t"
 5661        "vmov.i8	q12, #51\n\t"
 5662        "vshl.u8	q0, q14, #2\n\t"
 5663        "vshr.u8	q14, q14, #2\n\t"
 5664        "vbit.8	q0, q14, q12\n\t"
 5665        "vshl.u8	q14, q0, #4\n\t"
 5666        "vsri.u8	q14, q0, #4\n\t"
 5667        "veor.8	q12, q7, q14\n\t"
 5668        /*   X  = C * H^1 */
 5669        "vmull.p64	q2, d25, d16\n\t"
 5670        "vmull.p64	q7, d24, d17\n\t"
 5671        "vmull.p64	q0, d24, d16\n\t"
 5672        "vmull.p64	q1, d25, d17\n\t"
 5673        "veor.8	q2, q2, q7\n\t"
 5674        /*   Reduce */
 5675        "vmull.p64	q7, d3, d27\n\t"
 5676        "veor.8	d2, d2, d5\n\t"
 5677        "veor.8	d1, d1, d4\n\t"
 5678        "veor.8	d2, d2, d15\n\t"
 5679        "veor.8	d1, d1, d14\n\t"
 5680        "vmull.p64	q7, d2, d26\n\t"
 5681        "veor.8	q7, q7, q0\n\t"
 5682        /* Done GHASH */
 5683        "\n"
 5684    "L_aes_gcm_encrypt_arm32_crypto_out_done_%=:\n\t"
 5685        "ands	r11, %[sz], #15\n\t"
 5686        "beq	L_aes_gcm_encrypt_arm32_crypto_out_partial_done_%=\n\t"
 5687        "veor.8	q0, q0, q0\n\t"
 5688        "mov	r12, r11\n\t"
 5689        "vst1.32	{q0}, [r9]\n\t"
 5690        "cmp	r12, #4\n\t"
 5691        "blt	L_aes_gcm_encrypt_arm32_crypto_out_start_sw_%=\n\t"
 5692        "\n"
 5693    "L_aes_gcm_encrypt_arm32_crypto_out_start_dw_%=:\n\t"
 5694        "ldr	r8, [%[out]], #4\n\t"
 5695        "sub	r12, r12, #4\n\t"
 5696        "str	r8, [r9], #4\n\t"
 5697        "cmp	r12, #4\n\t"
 5698        "bge	L_aes_gcm_encrypt_arm32_crypto_out_start_dw_%=\n\t"
 5699        "\n"
 5700    "L_aes_gcm_encrypt_arm32_crypto_out_start_sw_%=:\n\t"
 5701        "cmp	r12, #2\n\t"
 5702        "blt	L_aes_gcm_encrypt_arm32_crypto_out_start_byte_%=\n\t"
 5703        "ldrh	r8, [%[out]], #2\n\t"
 5704        "sub	r12, r12, #2\n\t"
 5705        "strh	r8, [r9], #2\n\t"
 5706        "\n"
 5707    "L_aes_gcm_encrypt_arm32_crypto_out_start_byte_%=:\n\t"
 5708        "cmp	r12, #1\n\t"
 5709        "blt	L_aes_gcm_encrypt_arm32_crypto_out_end_bytes_%=\n\t"
 5710        "ldrb	r8, [%[out]], #1\n\t"
 5711        "subs	r12, r12, #1\n\t"
 5712        "strb	r8, [r9], #1\n\t"
 5713        "bne	L_aes_gcm_encrypt_arm32_crypto_out_start_byte_%=\n\t"
 5714        "\n"
 5715    "L_aes_gcm_encrypt_arm32_crypto_out_end_bytes_%=:\n\t"
 5716        "sub	r9, r9, r11\n\t"
 5717        "vld1.32	{q14}, [r9]\n\t"
 5718        "vmov.i8	q12, #0x55\n\t"
 5719        "vshl.u8	q0, q14, #1\n\t"
 5720        "vshr.u8	q14, q14, #1\n\t"
 5721        "vbif.8	q14, q0, q12\n\t"
 5722        "vmov.i8	q12, #51\n\t"
 5723        "vshl.u8	q0, q14, #2\n\t"
 5724        "vshr.u8	q14, q14, #2\n\t"
 5725        "vbit.8	q0, q14, q12\n\t"
 5726        "vshl.u8	q14, q0, #4\n\t"
 5727        "vsri.u8	q14, q0, #4\n\t"
 5728        "veor.8	q12, q7, q14\n\t"
 5729        /*   X  = C * H^1 */
 5730        "vmull.p64	q2, d25, d16\n\t"
 5731        "vmull.p64	q7, d24, d17\n\t"
 5732        "vmull.p64	q0, d24, d16\n\t"
 5733        "vmull.p64	q1, d25, d17\n\t"
 5734        "veor.8	q2, q2, q7\n\t"
 5735        /*   Reduce */
 5736        "vmull.p64	q7, d3, d27\n\t"
 5737        "veor.8	d2, d2, d5\n\t"
 5738        "veor.8	d1, d1, d4\n\t"
 5739        "veor.8	d2, d2, d15\n\t"
 5740        "veor.8	d1, d1, d14\n\t"
 5741        "vmull.p64	q7, d2, d26\n\t"
 5742        "veor.8	q7, q7, q0\n\t"
 5743        /* Done GHASH */
 5744        "\n"
 5745    "L_aes_gcm_encrypt_arm32_crypto_out_partial_done_%=:\n\t"
 5746        "lsr	lr, r6, #29\n\t"
 5747        "lsl	r6, r6, #3\n\t"
 5748        "rbit	lr, lr\n\t"
 5749        "rbit	r6, r6\n\t"
 5750        "vmov	s0, lr\n\t"
 5751        "vmov	s1, r6\n\t"
 5752        "lsr	lr, %[sz], #29\n\t"
 5753        "lsl	%[sz], %[sz], #3\n\t"
 5754        "rbit	lr, lr\n\t"
 5755        "rbit	%[sz], %[sz]\n\t"
 5756        "vmov	s2, lr\n\t"
 5757        "vmov	s3, %[sz]\n\t"
 5758        "veor.8	q7, q7, q0\n\t"
 5759        "vmull.p64	q2, d15, d16\n\t"
 5760        "vmull.p64	q3, d14, d17\n\t"
 5761        "vmull.p64	q0, d14, d16\n\t"
 5762        "vmull.p64	q1, d15, d17\n\t"
 5763        "veor.8	q2, q2, q3\n\t"
 5764        /*   Reduce */
 5765        "vmull.p64	q7, d3, d27\n\t"
 5766        "veor.8	d2, d2, d5\n\t"
 5767        "veor.8	d1, d1, d4\n\t"
 5768        "veor.8	d2, d2, d15\n\t"
 5769        "veor.8	d1, d1, d14\n\t"
 5770        "vmull.p64	q7, d2, d26\n\t"
 5771        "veor.8	q7, q7, q0\n\t"
 5772        "vmov.i8	q0, #0x55\n\t"
 5773        "vshl.u8	q1, q7, #1\n\t"
 5774        "vshr.u8	q7, q7, #1\n\t"
 5775        "vbif.8	q7, q1, q0\n\t"
 5776        "vmov.i8	q0, #51\n\t"
 5777        "vshl.u8	q1, q7, #2\n\t"
 5778        "vshr.u8	q7, q7, #2\n\t"
 5779        "vbit.8	q1, q7, q0\n\t"
 5780        "vshl.u8	q7, q1, #4\n\t"
 5781        "vsri.u8	q7, q1, #4\n\t"
 5782        /* DONE */
 5783        "veor.8	q7, q7, q6\n\t"
 5784        /* tag */
 5785        "ldr	lr, [sp, #4]\n\t"
 5786        /* tagSz */
 5787        "ldr	r4, [sp, #8]\n\t"
 5788        "cmp	r4, #16\n\t"
 5789        "bne	L_aes_gcm_encrypt_arm32_crypto_tag_tag_partial_%=\n\t"
 5790        "vst1.8	{q7}, [lr]\n\t"
 5791        "b	L_aes_gcm_encrypt_arm32_crypto_done_gcm_%=\n\t"
 5792        "\n"
 5793    "L_aes_gcm_encrypt_arm32_crypto_tag_tag_partial_%=:\n\t"
 5794        "vst1.8	{q7}, [r9]\n\t"
 5795        "cmp	r4, #4\n\t"
 5796        "blt	L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_sw_%=\n\t"
 5797        "\n"
 5798    "L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_dw_%=:\n\t"
 5799        "ldr	r8, [r9], #4\n\t"
 5800        "sub	r4, r4, #4\n\t"
 5801        "str	r8, [lr], #4\n\t"
 5802        "cmp	r4, #4\n\t"
 5803        "bge	L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_dw_%=\n\t"
 5804        "\n"
 5805    "L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_sw_%=:\n\t"
 5806        "cmp	r4, #2\n\t"
 5807        "blt	L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_byte_%=\n\t"
 5808        "ldrh	r8, [r9], #2\n\t"
 5809        "sub	r4, r4, #2\n\t"
 5810        "strh	r8, [lr], #2\n\t"
 5811        "\n"
 5812    "L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_byte_%=:\n\t"
 5813        "cmp	r4, #1\n\t"
 5814        "blt	L_aes_gcm_encrypt_arm32_crypto_tag_tag_end_bytes_%=\n\t"
 5815        "ldrb	r8, [r9], #1\n\t"
 5816        "subs	r4, r4, #1\n\t"
 5817        "strb	r8, [lr], #1\n\t"
 5818        "bne	L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_byte_%=\n\t"
 5819        "\n"
 5820    "L_aes_gcm_encrypt_arm32_crypto_tag_tag_end_bytes_%=:\n\t"
 5821        "\n"
 5822    "L_aes_gcm_encrypt_arm32_crypto_done_gcm_%=:\n\t"
 5823        "pop	{%[nonceSz], %[tag]}\n\t"
 5824        "pop	{%[tagSz], %[aad], %[aadSz], %[key], %[gcm_h], %[tmp], %[reg], %[nr]}\n\t"
 5825#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 5826        : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz),
 5827          [nonce] "+r" (nonce), [nonceSz] "+r" (nonceSz), [tag] "+r" (tag),
 5828          [tagSz] "+r" (tagSz), [aad] "+r" (aad), [aadSz] "+r" (aadSz),
 5829          [key] "+r" (key), [gcm_h] "+r" (gcm_h), [tmp] "+r" (tmp),
 5830          [reg] "+r" (reg), [nr] "+r" (nr)
 5831        :
 5832#else
 5833        :
 5834        : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [nonce] "r" (nonce),
 5835          [nonceSz] "r" (nonceSz), [tag] "r" (tag), [tagSz] "r" (tagSz),
 5836          [aad] "r" (aad), [aadSz] "r" (aadSz), [key] "r" (key),
 5837          [gcm_h] "r" (gcm_h), [tmp] "r" (tmp), [reg] "r" (reg), [nr] "r" (nr)
 5838#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 5839        : "memory", "cc", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8",
 5840            "q9", "q10", "q11", "q12", "q13", "q14", "q15"
 5841    );
 5842}
 5843
 5844#ifdef HAVE_AES_DECRYPT
 5845#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 5846WC_OMIT_FRAME_POINTER int AES_GCM_decrypt_AARCH32(const byte* in_p, byte* out_p,
 5847    word32 sz_p, const byte* nonce_p, word32 nonceSz_p, const byte* tag_p,
 5848    word32 tagSz_p, const byte* aad_p, word32 aadSz_p, byte* key_p,
 5849    byte* gcm_h_p, byte* tmp_p, byte* reg_p, int nr_p)
 5850#else
 5851WC_OMIT_FRAME_POINTER int AES_GCM_decrypt_AARCH32(const byte* in, byte* out,
 5852    word32 sz, const byte* nonce, word32 nonceSz, const byte* tag, word32 tagSz,
 5853    const byte* aad, word32 aadSz, byte* key, byte* gcm_h, byte* tmp, byte* reg,
 5854    int nr)
 5855#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 5856{
 5857#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 5858    register const byte* in __asm__ ("r0") = (const byte*)in_p;
 5859    register byte* out __asm__ ("r1") = (byte*)out_p;
 5860    register word32 sz __asm__ ("r2") = (word32)sz_p;
 5861    register const byte* nonce __asm__ ("r3") = (const byte*)nonce_p;
 5862    register word32 nonceSz __asm__ ("r12") = (word32)nonceSz_p;
 5863    register const byte* tag __asm__ ("lr") = (const byte*)tag_p;
 5864    register word32 tagSz __asm__ ("r4") = (word32)tagSz_p;
 5865    register const byte* aad __asm__ ("r5") = (const byte*)aad_p;
 5866    register word32 aadSz __asm__ ("r6") = (word32)aadSz_p;
 5867    register byte* key __asm__ ("r7") = (byte*)key_p;
 5868    register byte* gcm_h __asm__ ("r8") = (byte*)gcm_h_p;
 5869    register byte* tmp __asm__ ("r9") = (byte*)tmp_p;
 5870    register byte* reg __asm__ ("r10") = (byte*)reg_p;
 5871    register int nr __asm__ ("r11") = (int)nr_p;
 5872#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 5873
 5874    __asm__ __volatile__ (
 5875        "push	{%[tagSz], %[aad], %[aadSz], %[key], %[gcm_h], %[tmp], %[reg], %[nr]}\n\t"
 5876        "push	{%[nonceSz], %[tag]}\n\t"
 5877        /* key */
 5878        "ldr	r7, [sp, #20]\n\t"
 5879        /* tmp */
 5880        "ldr	r9, [sp, #28]\n\t"
 5881        /* aadSz */
 5882        "ldr	r6, [sp, #16]\n\t"
 5883        /* gcm_h */
 5884        "ldr	r8, [sp, #24]\n\t"
 5885        "vmov.i8	q13, #0x87\n\t"
 5886        "veor.8	q7, q7, q7\n\t"
 5887        "vshr.u64	q13, q13, #56\n\t"
 5888        "vld1.32	{q8}, [r8]\n\t"
 5889        "orr	r10, r6, %[sz]\n\t"
 5890        "cmp	r10, #32\n\t"
 5891        "blt	L_aes_gcm_decrypt_arm32_crypto_h_done_%=\n\t"
 5892        /* Square H => H^2 */
 5893        "vmull.p64	q1, d17, d17\n\t"
 5894        "vmull.p64	q0, d16, d16\n\t"
 5895        "vmull.p64	q9, d3, d27\n\t"
 5896        "veor.8	d2, d2, d19\n\t"
 5897        "veor.8	d1, d1, d18\n\t"
 5898        "vmull.p64	q9, d2, d26\n\t"
 5899        "veor.8	q9, q9, q0\n\t"
 5900        "cmp	r10, #0x40\n\t"
 5901        "blt	L_aes_gcm_decrypt_arm32_crypto_h_done_%=\n\t"
 5902        /* Multiply H and H^2  => H^3 */
 5903        "vmull.p64	q2, d17, d18\n\t"
 5904        "vmull.p64	q3, d16, d19\n\t"
 5905        "vmull.p64	q0, d16, d18\n\t"
 5906        "vmull.p64	q1, d17, d19\n\t"
 5907        "veor.8	q2, q2, q3\n\t"
 5908        /*   Reduce */
 5909        "vmull.p64	q10, d3, d27\n\t"
 5910        "veor.8	d2, d2, d5\n\t"
 5911        "veor.8	d1, d1, d4\n\t"
 5912        "veor.8	d2, d2, d21\n\t"
 5913        "veor.8	d1, d1, d20\n\t"
 5914        "vmull.p64	q10, d2, d26\n\t"
 5915        "veor.8	q10, q10, q0\n\t"
 5916        /* Square H^2 => H^4 */
 5917        "vmull.p64	q1, d19, d19\n\t"
 5918        "vmull.p64	q0, d18, d18\n\t"
 5919        "vmull.p64	q11, d3, d27\n\t"
 5920        "veor.8	d2, d2, d23\n\t"
 5921        "veor.8	d1, d1, d22\n\t"
 5922        "vmull.p64	q11, d2, d26\n\t"
 5923        "veor.8	q11, q11, q0\n\t"
 5924        /* Done */
 5925        "\n"
 5926    "L_aes_gcm_decrypt_arm32_crypto_h_done_%=:\n\t"
 5927        /* aad */
 5928        "ldr	r5, [sp, #12]\n\t"
 5929        "lsr	r10, r6, #4\n\t"
 5930        "cmp	r10, #1\n\t"
 5931        "blt	L_aes_gcm_decrypt_arm32_crypto_aad_done_%=\n\t"
 5932        "beq	L_aes_gcm_decrypt_arm32_crypto_aad_start_1_%=\n\t"
 5933        "cmp	r10, #4\n\t"
 5934        "blt	L_aes_gcm_decrypt_arm32_crypto_aad_start_2_%=\n\t"
 5935        "\n"
 5936    "L_aes_gcm_decrypt_arm32_crypto_aad_start_4_%=:\n\t"
 5937        "vldm	r5!, {q0-q2}\n\t"
 5938        "vmov.i8	q12, #0x55\n\t"
 5939        "vmov.i8	q5, #51\n\t"
 5940        "vshl.u8	q14, q0, #1\n\t"
 5941        "vshl.u8	q15, q1, #1\n\t"
 5942        "vshl.u8	q4, q2, #1\n\t"
 5943        "ldr	lr, [r5], #4\n\t"
 5944        "vshr.u8	q0, q0, #1\n\t"
 5945        "vshr.u8	q1, q1, #1\n\t"
 5946        "vshr.u8	q2, q2, #1\n\t"
 5947        "ldr	r4, [r5], #4\n\t"
 5948        "vbit.8	q14, q0, q12\n\t"
 5949        "vbit.8	q15, q1, q12\n\t"
 5950        "vbit.8	q4, q2, q12\n\t"
 5951        "ldr	r8, [r5], #4\n\t"
 5952        "vshl.u8	q0, q14, #2\n\t"
 5953        "vshl.u8	q1, q15, #2\n\t"
 5954        "vshl.u8	q2, q4, #2\n\t"
 5955        "ldr	r12, [r5], #4\n\t"
 5956        "vshr.u8	q14, q14, #2\n\t"
 5957        "vshr.u8	q15, q15, #2\n\t"
 5958        "vshr.u8	q4, q4, #2\n\t"
 5959        "rbit	lr, lr\n\t"
 5960        "vbit.8	q0, q14, q5\n\t"
 5961        "rbit	r4, r4\n\t"
 5962        "vbit.8	q1, q15, q5\n\t"
 5963        "rbit	r8, r8\n\t"
 5964        "vbit.8	q2, q4, q5\n\t"
 5965        "rbit	r12, r12\n\t"
 5966        "vshl.u8	q14, q0, #4\n\t"
 5967        "rev	lr, lr\n\t"
 5968        "vshl.u8	q15, q1, #4\n\t"
 5969        "rev	r4, r4\n\t"
 5970        "vshl.u8	q4, q2, #4\n\t"
 5971        "rev	r8, r8\n\t"
 5972        "vsri.u8	q14, q0, #4\n\t"
 5973        "rev	r12, r12\n\t"
 5974        "vsri.u8	q15, q1, #4\n\t"
 5975        "vsri.u8	q4, q2, #4\n\t"
 5976        "vmov	d10, lr, r4\n\t"
 5977        "vmov	d11, r8, r12\n\t"
 5978        "veor.8	q12, q7, q14\n\t"
 5979        /*   X  = C * H^1 */
 5980        "vmull.p64	q2, d11, d16\n\t"
 5981        "vmull.p64	q7, d10, d17\n\t"
 5982        "vmull.p64	q0, d10, d16\n\t"
 5983        "vmull.p64	q1, d11, d17\n\t"
 5984        "veor.8	q2, q2, q7\n\t"
 5985        /*   X += C * H^2 */
 5986        "vmull.p64	q3, d8, d18\n\t"
 5987        "vmull.p64	q7, d9, d19\n\t"
 5988        "veor.8	q0, q0, q3\n\t"
 5989        "veor.8	q1, q1, q7\n\t"
 5990        "vmull.p64	q3, d9, d18\n\t"
 5991        "vmull.p64	q7, d8, d19\n\t"
 5992        "veor.8	q2, q2, q3\n\t"
 5993        "veor.8	q2, q2, q7\n\t"
 5994        /*   X += C * H^3 */
 5995        "vmull.p64	q3, d30, d20\n\t"
 5996        "vmull.p64	q7, d31, d21\n\t"
 5997        "veor.8	q0, q0, q3\n\t"
 5998        "veor.8	q1, q1, q7\n\t"
 5999        "vmull.p64	q3, d31, d20\n\t"
 6000        "vmull.p64	q7, d30, d21\n\t"
 6001        "veor.8	q2, q2, q3\n\t"
 6002        "veor.8	q2, q2, q7\n\t"
 6003        /*   X += C * H^4 */
 6004        "vmull.p64	q3, d24, d22\n\t"
 6005        "vmull.p64	q7, d25, d23\n\t"
 6006        "veor.8	q0, q0, q3\n\t"
 6007        "veor.8	q1, q1, q7\n\t"
 6008        "vmull.p64	q3, d25, d22\n\t"
 6009        "vmull.p64	q7, d24, d23\n\t"
 6010        "veor.8	q2, q2, q3\n\t"
 6011        "veor.8	q2, q2, q7\n\t"
 6012        /*   Reduce */
 6013        "vmull.p64	q7, d3, d27\n\t"
 6014        "veor.8	d2, d2, d5\n\t"
 6015        "veor.8	d1, d1, d4\n\t"
 6016        "veor.8	d2, d2, d15\n\t"
 6017        "veor.8	d1, d1, d14\n\t"
 6018        "vmull.p64	q7, d2, d26\n\t"
 6019        "veor.8	q7, q7, q0\n\t"
 6020        /* Done GHASH */
 6021        "sub	r10, r10, #4\n\t"
 6022        "cmp	r10, #4\n\t"
 6023        "bge	L_aes_gcm_decrypt_arm32_crypto_aad_start_4_%=\n\t"
 6024        "cmp	r10, #1\n\t"
 6025        "blt	L_aes_gcm_decrypt_arm32_crypto_aad_done_%=\n\t"
 6026        "beq	L_aes_gcm_decrypt_arm32_crypto_aad_start_1_%=\n\t"
 6027        "\n"
 6028    "L_aes_gcm_decrypt_arm32_crypto_aad_start_2_%=:\n\t"
 6029        "vld1.32	{q14-q15}, [r5]!\n\t"
 6030        "vmov.i8	q12, #0x55\n\t"
 6031        "vshl.u8	q0, q14, #1\n\t"
 6032        "vshl.u8	q1, q15, #1\n\t"
 6033        "vshr.u8	q14, q14, #1\n\t"
 6034        "vshr.u8	q15, q15, #1\n\t"
 6035        "vbif.8	q14, q0, q12\n\t"
 6036        "vbif.8	q15, q1, q12\n\t"
 6037        "vmov.i8	q12, #51\n\t"
 6038        "vshl.u8	q0, q14, #2\n\t"
 6039        "vshl.u8	q1, q15, #2\n\t"
 6040        "vshr.u8	q14, q14, #2\n\t"
 6041        "vshr.u8	q15, q15, #2\n\t"
 6042        "vbit.8	q0, q14, q12\n\t"
 6043        "vbit.8	q1, q15, q12\n\t"
 6044        "vshl.u8	q14, q0, #4\n\t"
 6045        "vshl.u8	q15, q1, #4\n\t"
 6046        "vsri.u8	q14, q0, #4\n\t"
 6047        "vsri.u8	q15, q1, #4\n\t"
 6048        "veor.8	q12, q7, q14\n\t"
 6049        /*   X  = C * H^1 */
 6050        "vmull.p64	q2, d31, d16\n\t"
 6051        "vmull.p64	q7, d30, d17\n\t"
 6052        "vmull.p64	q0, d30, d16\n\t"
 6053        "vmull.p64	q1, d31, d17\n\t"
 6054        "veor.8	q2, q2, q7\n\t"
 6055        /*   X += C * H^2 */
 6056        "vmull.p64	q3, d24, d18\n\t"
 6057        "vmull.p64	q7, d25, d19\n\t"
 6058        "veor.8	q0, q0, q3\n\t"
 6059        "veor.8	q1, q1, q7\n\t"
 6060        "vmull.p64	q3, d25, d18\n\t"
 6061        "vmull.p64	q7, d24, d19\n\t"
 6062        "veor.8	q2, q2, q3\n\t"
 6063        "veor.8	q2, q2, q7\n\t"
 6064        /*   Reduce */
 6065        "vmull.p64	q7, d3, d27\n\t"
 6066        "veor.8	d2, d2, d5\n\t"
 6067        "veor.8	d1, d1, d4\n\t"
 6068        "veor.8	d2, d2, d15\n\t"
 6069        "veor.8	d1, d1, d14\n\t"
 6070        "vmull.p64	q7, d2, d26\n\t"
 6071        "veor.8	q7, q7, q0\n\t"
 6072        /* Done GHASH */
 6073        "sub	r10, r10, #2\n\t"
 6074        "cmp	r10, #0\n\t"
 6075        "beq	L_aes_gcm_decrypt_arm32_crypto_aad_done_%=\n\t"
 6076        "\n"
 6077    "L_aes_gcm_decrypt_arm32_crypto_aad_start_1_%=:\n\t"
 6078        "vld1.32	{q14}, [r5]!\n\t"
 6079        "vmov.i8	q12, #0x55\n\t"
 6080        "vshl.u8	q0, q14, #1\n\t"
 6081        "vshr.u8	q14, q14, #1\n\t"
 6082        "vbif.8	q14, q0, q12\n\t"
 6083        "vmov.i8	q12, #51\n\t"
 6084        "vshl.u8	q0, q14, #2\n\t"
 6085        "vshr.u8	q14, q14, #2\n\t"
 6086        "vbit.8	q0, q14, q12\n\t"
 6087        "vshl.u8	q14, q0, #4\n\t"
 6088        "vsri.u8	q14, q0, #4\n\t"
 6089        "veor.8	q12, q7, q14\n\t"
 6090        /*   X  = C * H^1 */
 6091        "vmull.p64	q2, d25, d16\n\t"
 6092        "vmull.p64	q7, d24, d17\n\t"
 6093        "vmull.p64	q0, d24, d16\n\t"
 6094        "vmull.p64	q1, d25, d17\n\t"
 6095        "veor.8	q2, q2, q7\n\t"
 6096        /*   Reduce */
 6097        "vmull.p64	q7, d3, d27\n\t"
 6098        "veor.8	d2, d2, d5\n\t"
 6099        "veor.8	d1, d1, d4\n\t"
 6100        "veor.8	d2, d2, d15\n\t"
 6101        "veor.8	d1, d1, d14\n\t"
 6102        "vmull.p64	q7, d2, d26\n\t"
 6103        "veor.8	q7, q7, q0\n\t"
 6104        /* Done GHASH */
 6105        "\n"
 6106    "L_aes_gcm_decrypt_arm32_crypto_aad_done_%=:\n\t"
 6107        "ands	r11, r6, #15\n\t"
 6108        "beq	L_aes_gcm_decrypt_arm32_crypto_aad_partial_done_%=\n\t"
 6109        "veor.8	q0, q0, q0\n\t"
 6110        "mov	r12, r11\n\t"
 6111        "vst1.32	{q0}, [r9]\n\t"
 6112        "cmp	r12, #4\n\t"
 6113        "blt	L_aes_gcm_decrypt_arm32_crypto_aad_start_sw_%=\n\t"
 6114        "\n"
 6115    "L_aes_gcm_decrypt_arm32_crypto_aad_start_dw_%=:\n\t"
 6116        "ldr	r8, [r5], #4\n\t"
 6117        "sub	r12, r12, #4\n\t"
 6118        "str	r8, [r9], #4\n\t"
 6119        "cmp	r12, #4\n\t"
 6120        "bge	L_aes_gcm_decrypt_arm32_crypto_aad_start_dw_%=\n\t"
 6121        "\n"
 6122    "L_aes_gcm_decrypt_arm32_crypto_aad_start_sw_%=:\n\t"
 6123        "cmp	r12, #2\n\t"
 6124        "blt	L_aes_gcm_decrypt_arm32_crypto_aad_start_byte_%=\n\t"
 6125        "ldrh	r8, [r5], #2\n\t"
 6126        "sub	r12, r12, #2\n\t"
 6127        "strh	r8, [r9], #2\n\t"
 6128        "\n"
 6129    "L_aes_gcm_decrypt_arm32_crypto_aad_start_byte_%=:\n\t"
 6130        "cmp	r12, #1\n\t"
 6131        "blt	L_aes_gcm_decrypt_arm32_crypto_aad_end_bytes_%=\n\t"
 6132        "ldrb	r8, [r5], #1\n\t"
 6133        "subs	r12, r12, #1\n\t"
 6134        "strb	r8, [r9], #1\n\t"
 6135        "bne	L_aes_gcm_decrypt_arm32_crypto_aad_start_byte_%=\n\t"
 6136        "\n"
 6137    "L_aes_gcm_decrypt_arm32_crypto_aad_end_bytes_%=:\n\t"
 6138        "sub	r9, r9, r11\n\t"
 6139        "vld1.32	{q14}, [r9]\n\t"
 6140        "vmov.i8	q12, #0x55\n\t"
 6141        "vshl.u8	q0, q14, #1\n\t"
 6142        "vshr.u8	q14, q14, #1\n\t"
 6143        "vbif.8	q14, q0, q12\n\t"
 6144        "vmov.i8	q12, #51\n\t"
 6145        "vshl.u8	q0, q14, #2\n\t"
 6146        "vshr.u8	q14, q14, #2\n\t"
 6147        "vbit.8	q0, q14, q12\n\t"
 6148        "vshl.u8	q14, q0, #4\n\t"
 6149        "vsri.u8	q14, q0, #4\n\t"
 6150        "veor.8	q12, q7, q14\n\t"
 6151        /*   X  = C * H^1 */
 6152        "vmull.p64	q2, d25, d16\n\t"
 6153        "vmull.p64	q7, d24, d17\n\t"
 6154        "vmull.p64	q0, d24, d16\n\t"
 6155        "vmull.p64	q1, d25, d17\n\t"
 6156        "veor.8	q2, q2, q7\n\t"
 6157        /*   Reduce */
 6158        "vmull.p64	q7, d3, d27\n\t"
 6159        "veor.8	d2, d2, d5\n\t"
 6160        "veor.8	d1, d1, d4\n\t"
 6161        "veor.8	d2, d2, d15\n\t"
 6162        "veor.8	d1, d1, d14\n\t"
 6163        "vmull.p64	q7, d2, d26\n\t"
 6164        "veor.8	q7, q7, q0\n\t"
 6165        /* Done GHASH */
 6166        "\n"
 6167    "L_aes_gcm_decrypt_arm32_crypto_aad_partial_done_%=:\n\t"
 6168        /* in */
 6169        "lsr	r10, %[sz], #4\n\t"
 6170        "cmp	r10, #1\n\t"
 6171        "blt	L_aes_gcm_decrypt_arm32_crypto_in_done_%=\n\t"
 6172        "beq	L_aes_gcm_decrypt_arm32_crypto_in_start_1_%=\n\t"
 6173        "cmp	r10, #4\n\t"
 6174        "blt	L_aes_gcm_decrypt_arm32_crypto_in_start_2_%=\n\t"
 6175        "\n"
 6176    "L_aes_gcm_decrypt_arm32_crypto_in_start_4_%=:\n\t"
 6177        "vldm	%[in]!, {q0-q2}\n\t"
 6178        "vmov.i8	q12, #0x55\n\t"
 6179        "vmov.i8	q5, #51\n\t"
 6180        "vshl.u8	q14, q0, #1\n\t"
 6181        "vshl.u8	q15, q1, #1\n\t"
 6182        "vshl.u8	q4, q2, #1\n\t"
 6183        "ldr	lr, [%[in]], #4\n\t"
 6184        "vshr.u8	q0, q0, #1\n\t"
 6185        "vshr.u8	q1, q1, #1\n\t"
 6186        "vshr.u8	q2, q2, #1\n\t"
 6187        "ldr	r4, [%[in]], #4\n\t"
 6188        "vbit.8	q14, q0, q12\n\t"
 6189        "vbit.8	q15, q1, q12\n\t"
 6190        "vbit.8	q4, q2, q12\n\t"
 6191        "ldr	r8, [%[in]], #4\n\t"
 6192        "vshl.u8	q0, q14, #2\n\t"
 6193        "vshl.u8	q1, q15, #2\n\t"
 6194        "vshl.u8	q2, q4, #2\n\t"
 6195        "ldr	r12, [%[in]], #4\n\t"
 6196        "vshr.u8	q14, q14, #2\n\t"
 6197        "vshr.u8	q15, q15, #2\n\t"
 6198        "vshr.u8	q4, q4, #2\n\t"
 6199        "rbit	lr, lr\n\t"
 6200        "vbit.8	q0, q14, q5\n\t"
 6201        "rbit	r4, r4\n\t"
 6202        "vbit.8	q1, q15, q5\n\t"
 6203        "rbit	r8, r8\n\t"
 6204        "vbit.8	q2, q4, q5\n\t"
 6205        "rbit	r12, r12\n\t"
 6206        "vshl.u8	q14, q0, #4\n\t"
 6207        "rev	lr, lr\n\t"
 6208        "vshl.u8	q15, q1, #4\n\t"
 6209        "rev	r4, r4\n\t"
 6210        "vshl.u8	q4, q2, #4\n\t"
 6211        "rev	r8, r8\n\t"
 6212        "vsri.u8	q14, q0, #4\n\t"
 6213        "rev	r12, r12\n\t"
 6214        "vsri.u8	q15, q1, #4\n\t"
 6215        "vsri.u8	q4, q2, #4\n\t"
 6216        "vmov	d10, lr, r4\n\t"
 6217        "vmov	d11, r8, r12\n\t"
 6218        "veor.8	q12, q7, q14\n\t"
 6219        /*   X  = C * H^1 */
 6220        "vmull.p64	q2, d11, d16\n\t"
 6221        "vmull.p64	q7, d10, d17\n\t"
 6222        "vmull.p64	q0, d10, d16\n\t"
 6223        "vmull.p64	q1, d11, d17\n\t"
 6224        "veor.8	q2, q2, q7\n\t"
 6225        /*   X += C * H^2 */
 6226        "vmull.p64	q3, d8, d18\n\t"
 6227        "vmull.p64	q7, d9, d19\n\t"
 6228        "veor.8	q0, q0, q3\n\t"
 6229        "veor.8	q1, q1, q7\n\t"
 6230        "vmull.p64	q3, d9, d18\n\t"
 6231        "vmull.p64	q7, d8, d19\n\t"
 6232        "veor.8	q2, q2, q3\n\t"
 6233        "veor.8	q2, q2, q7\n\t"
 6234        /*   X += C * H^3 */
 6235        "vmull.p64	q3, d30, d20\n\t"
 6236        "vmull.p64	q7, d31, d21\n\t"
 6237        "veor.8	q0, q0, q3\n\t"
 6238        "veor.8	q1, q1, q7\n\t"
 6239        "vmull.p64	q3, d31, d20\n\t"
 6240        "vmull.p64	q7, d30, d21\n\t"
 6241        "veor.8	q2, q2, q3\n\t"
 6242        "veor.8	q2, q2, q7\n\t"
 6243        /*   X += C * H^4 */
 6244        "vmull.p64	q3, d24, d22\n\t"
 6245        "vmull.p64	q7, d25, d23\n\t"
 6246        "veor.8	q0, q0, q3\n\t"
 6247        "veor.8	q1, q1, q7\n\t"
 6248        "vmull.p64	q3, d25, d22\n\t"
 6249        "vmull.p64	q7, d24, d23\n\t"
 6250        "veor.8	q2, q2, q3\n\t"
 6251        "veor.8	q2, q2, q7\n\t"
 6252        /*   Reduce */
 6253        "vmull.p64	q7, d3, d27\n\t"
 6254        "veor.8	d2, d2, d5\n\t"
 6255        "veor.8	d1, d1, d4\n\t"
 6256        "veor.8	d2, d2, d15\n\t"
 6257        "veor.8	d1, d1, d14\n\t"
 6258        "vmull.p64	q7, d2, d26\n\t"
 6259        "veor.8	q7, q7, q0\n\t"
 6260        /* Done GHASH */
 6261        "sub	r10, r10, #4\n\t"
 6262        "cmp	r10, #4\n\t"
 6263        "bge	L_aes_gcm_decrypt_arm32_crypto_in_start_4_%=\n\t"
 6264        "cmp	r10, #1\n\t"
 6265        "blt	L_aes_gcm_decrypt_arm32_crypto_in_done_%=\n\t"
 6266        "beq	L_aes_gcm_decrypt_arm32_crypto_in_start_1_%=\n\t"
 6267        "\n"
 6268    "L_aes_gcm_decrypt_arm32_crypto_in_start_2_%=:\n\t"
 6269        "vld1.32	{q14-q15}, [%[in]]!\n\t"
 6270        "vmov.i8	q12, #0x55\n\t"
 6271        "vshl.u8	q0, q14, #1\n\t"
 6272        "vshl.u8	q1, q15, #1\n\t"
 6273        "vshr.u8	q14, q14, #1\n\t"
 6274        "vshr.u8	q15, q15, #1\n\t"
 6275        "vbif.8	q14, q0, q12\n\t"
 6276        "vbif.8	q15, q1, q12\n\t"
 6277        "vmov.i8	q12, #51\n\t"
 6278        "vshl.u8	q0, q14, #2\n\t"
 6279        "vshl.u8	q1, q15, #2\n\t"
 6280        "vshr.u8	q14, q14, #2\n\t"
 6281        "vshr.u8	q15, q15, #2\n\t"
 6282        "vbit.8	q0, q14, q12\n\t"
 6283        "vbit.8	q1, q15, q12\n\t"
 6284        "vshl.u8	q14, q0, #4\n\t"
 6285        "vshl.u8	q15, q1, #4\n\t"
 6286        "vsri.u8	q14, q0, #4\n\t"
 6287        "vsri.u8	q15, q1, #4\n\t"
 6288        "veor.8	q12, q7, q14\n\t"
 6289        /*   X  = C * H^1 */
 6290        "vmull.p64	q2, d31, d16\n\t"
 6291        "vmull.p64	q7, d30, d17\n\t"
 6292        "vmull.p64	q0, d30, d16\n\t"
 6293        "vmull.p64	q1, d31, d17\n\t"
 6294        "veor.8	q2, q2, q7\n\t"
 6295        /*   X += C * H^2 */
 6296        "vmull.p64	q3, d24, d18\n\t"
 6297        "vmull.p64	q7, d25, d19\n\t"
 6298        "veor.8	q0, q0, q3\n\t"
 6299        "veor.8	q1, q1, q7\n\t"
 6300        "vmull.p64	q3, d25, d18\n\t"
 6301        "vmull.p64	q7, d24, d19\n\t"
 6302        "veor.8	q2, q2, q3\n\t"
 6303        "veor.8	q2, q2, q7\n\t"
 6304        /*   Reduce */
 6305        "vmull.p64	q7, d3, d27\n\t"
 6306        "veor.8	d2, d2, d5\n\t"
 6307        "veor.8	d1, d1, d4\n\t"
 6308        "veor.8	d2, d2, d15\n\t"
 6309        "veor.8	d1, d1, d14\n\t"
 6310        "vmull.p64	q7, d2, d26\n\t"
 6311        "veor.8	q7, q7, q0\n\t"
 6312        /* Done GHASH */
 6313        "sub	r10, r10, #2\n\t"
 6314        "cmp	r10, #0\n\t"
 6315        "beq	L_aes_gcm_decrypt_arm32_crypto_in_done_%=\n\t"
 6316        "\n"
 6317    "L_aes_gcm_decrypt_arm32_crypto_in_start_1_%=:\n\t"
 6318        "vld1.32	{q14}, [%[in]]!\n\t"
 6319        "vmov.i8	q12, #0x55\n\t"
 6320        "vshl.u8	q0, q14, #1\n\t"
 6321        "vshr.u8	q14, q14, #1\n\t"
 6322        "vbif.8	q14, q0, q12\n\t"
 6323        "vmov.i8	q12, #51\n\t"
 6324        "vshl.u8	q0, q14, #2\n\t"
 6325        "vshr.u8	q14, q14, #2\n\t"
 6326        "vbit.8	q0, q14, q12\n\t"
 6327        "vshl.u8	q14, q0, #4\n\t"
 6328        "vsri.u8	q14, q0, #4\n\t"
 6329        "veor.8	q12, q7, q14\n\t"
 6330        /*   X  = C * H^1 */
 6331        "vmull.p64	q2, d25, d16\n\t"
 6332        "vmull.p64	q7, d24, d17\n\t"
 6333        "vmull.p64	q0, d24, d16\n\t"
 6334        "vmull.p64	q1, d25, d17\n\t"
 6335        "veor.8	q2, q2, q7\n\t"
 6336        /*   Reduce */
 6337        "vmull.p64	q7, d3, d27\n\t"
 6338        "veor.8	d2, d2, d5\n\t"
 6339        "veor.8	d1, d1, d4\n\t"
 6340        "veor.8	d2, d2, d15\n\t"
 6341        "veor.8	d1, d1, d14\n\t"
 6342        "vmull.p64	q7, d2, d26\n\t"
 6343        "veor.8	q7, q7, q0\n\t"
 6344        /* Done GHASH */
 6345        "\n"
 6346    "L_aes_gcm_decrypt_arm32_crypto_in_done_%=:\n\t"
 6347        "ands	r11, %[sz], #15\n\t"
 6348        "beq	L_aes_gcm_decrypt_arm32_crypto_in_partial_done_%=\n\t"
 6349        "veor.8	q0, q0, q0\n\t"
 6350        "mov	r12, r11\n\t"
 6351        "vst1.32	{q0}, [r9]\n\t"
 6352        "cmp	r12, #4\n\t"
 6353        "blt	L_aes_gcm_decrypt_arm32_crypto_in_start_sw_%=\n\t"
 6354        "\n"
 6355    "L_aes_gcm_decrypt_arm32_crypto_in_start_dw_%=:\n\t"
 6356        "ldr	r8, [%[in]], #4\n\t"
 6357        "sub	r12, r12, #4\n\t"
 6358        "str	r8, [r9], #4\n\t"
 6359        "cmp	r12, #4\n\t"
 6360        "bge	L_aes_gcm_decrypt_arm32_crypto_in_start_dw_%=\n\t"
 6361        "\n"
 6362    "L_aes_gcm_decrypt_arm32_crypto_in_start_sw_%=:\n\t"
 6363        "cmp	r12, #2\n\t"
 6364        "blt	L_aes_gcm_decrypt_arm32_crypto_in_start_byte_%=\n\t"
 6365        "ldrh	r8, [%[in]], #2\n\t"
 6366        "sub	r12, r12, #2\n\t"
 6367        "strh	r8, [r9], #2\n\t"
 6368        "\n"
 6369    "L_aes_gcm_decrypt_arm32_crypto_in_start_byte_%=:\n\t"
 6370        "cmp	r12, #1\n\t"
 6371        "blt	L_aes_gcm_decrypt_arm32_crypto_in_end_bytes_%=\n\t"
 6372        "ldrb	r8, [%[in]], #1\n\t"
 6373        "subs	r12, r12, #1\n\t"
 6374        "strb	r8, [r9], #1\n\t"
 6375        "bne	L_aes_gcm_decrypt_arm32_crypto_in_start_byte_%=\n\t"
 6376        "\n"
 6377    "L_aes_gcm_decrypt_arm32_crypto_in_end_bytes_%=:\n\t"
 6378        "sub	r9, r9, r11\n\t"
 6379        "vld1.32	{q14}, [r9]\n\t"
 6380        "vmov.i8	q12, #0x55\n\t"
 6381        "vshl.u8	q0, q14, #1\n\t"
 6382        "vshr.u8	q14, q14, #1\n\t"
 6383        "vbif.8	q14, q0, q12\n\t"
 6384        "vmov.i8	q12, #51\n\t"
 6385        "vshl.u8	q0, q14, #2\n\t"
 6386        "vshr.u8	q14, q14, #2\n\t"
 6387        "vbit.8	q0, q14, q12\n\t"
 6388        "vshl.u8	q14, q0, #4\n\t"
 6389        "vsri.u8	q14, q0, #4\n\t"
 6390        "veor.8	q12, q7, q14\n\t"
 6391        /*   X  = C * H^1 */
 6392        "vmull.p64	q2, d25, d16\n\t"
 6393        "vmull.p64	q7, d24, d17\n\t"
 6394        "vmull.p64	q0, d24, d16\n\t"
 6395        "vmull.p64	q1, d25, d17\n\t"
 6396        "veor.8	q2, q2, q7\n\t"
 6397        /*   Reduce */
 6398        "vmull.p64	q7, d3, d27\n\t"
 6399        "veor.8	d2, d2, d5\n\t"
 6400        "veor.8	d1, d1, d4\n\t"
 6401        "veor.8	d2, d2, d15\n\t"
 6402        "veor.8	d1, d1, d14\n\t"
 6403        "vmull.p64	q7, d2, d26\n\t"
 6404        "veor.8	q7, q7, q0\n\t"
 6405        /* Done GHASH */
 6406        "\n"
 6407    "L_aes_gcm_decrypt_arm32_crypto_in_partial_done_%=:\n\t"
 6408        "sub	%[in], %[in], %[sz]\n\t"
 6409        "\n"
 6410    "L_aes_gcm_decrypt_arm32_crypto_done_gcm_%=:\n\t"
 6411        /* nonceSz */
 6412        "ldr	r12, [sp]\n\t"
 6413        /* Load Nonce */
 6414        "cmp	r12, #12\n\t"
 6415        "bne	L_aes_gcm_decrypt_arm32_crypto_ghash_nonce_%=\n\t"
 6416        "ldr	r5, [%[nonce]]\n\t"
 6417        "ldr	r8, [%[nonce], #4]\n\t"
 6418        "ldr	r12, [%[nonce], #8]\n\t"
 6419        "vmov.i32	q6, #0x1000000\n\t"
 6420        "vmov.32	s24, r5\n\t"
 6421        "vmov.32	s25, r8\n\t"
 6422        "vmov.32	s26, r12\n\t"
 6423        "mov	r5, #1\n\t"
 6424        "b	L_aes_gcm_decrypt_arm32_crypto_done_nonce_%=\n\t"
 6425        "\n"
 6426    "L_aes_gcm_decrypt_arm32_crypto_ghash_nonce_%=:\n\t"
 6427        "lsr	r10, r12, #4\n\t"
 6428        "cmp	r10, #0\n\t"
 6429        "beq	L_aes_gcm_decrypt_arm32_crypto_nonce_done_%=\n\t"
 6430        "\n"
 6431    "L_aes_gcm_decrypt_arm32_crypto_nonce_start_1_%=:\n\t"
 6432        "vld1.32	{q14}, [%[nonce]]!\n\t"
 6433        "vmov.i8	q12, #0x55\n\t"
 6434        "vshl.u8	q0, q14, #1\n\t"
 6435        "vshr.u8	q14, q14, #1\n\t"
 6436        "vbif.8	q14, q0, q12\n\t"
 6437        "vmov.i8	q12, #51\n\t"
 6438        "vshl.u8	q0, q14, #2\n\t"
 6439        "vshr.u8	q14, q14, #2\n\t"
 6440        "vbit.8	q0, q14, q12\n\t"
 6441        "vshl.u8	q14, q0, #4\n\t"
 6442        "vsri.u8	q14, q0, #4\n\t"
 6443        "veor.8	q12, q6, q14\n\t"
 6444        /*   X  = C * H^1 */
 6445        "vmull.p64	q2, d25, d16\n\t"
 6446        "vmull.p64	q6, d24, d17\n\t"
 6447        "vmull.p64	q0, d24, d16\n\t"
 6448        "vmull.p64	q1, d25, d17\n\t"
 6449        "veor.8	q2, q2, q6\n\t"
 6450        /*   Reduce */
 6451        "vmull.p64	q6, d3, d27\n\t"
 6452        "veor.8	d2, d2, d5\n\t"
 6453        "veor.8	d1, d1, d4\n\t"
 6454        "veor.8	d2, d2, d13\n\t"
 6455        "veor.8	d1, d1, d12\n\t"
 6456        "vmull.p64	q6, d2, d26\n\t"
 6457        "veor.8	q6, q6, q0\n\t"
 6458        /* Done GHASH */
 6459        "subs	r10, r10, #1\n\t"
 6460        "bne	L_aes_gcm_decrypt_arm32_crypto_nonce_start_1_%=\n\t"
 6461        "\n"
 6462    "L_aes_gcm_decrypt_arm32_crypto_nonce_done_%=:\n\t"
 6463        "ands	r11, r12, #15\n\t"
 6464        "beq	L_aes_gcm_decrypt_arm32_crypto_nonce_partial_done_%=\n\t"
 6465        "veor.8	q0, q0, q0\n\t"
 6466        "mov	r12, r11\n\t"
 6467        "vst1.32	{q0}, [r9]\n\t"
 6468        "cmp	r12, #4\n\t"
 6469        "blt	L_aes_gcm_decrypt_arm32_crypto_nonce_start_sw_%=\n\t"
 6470        "\n"
 6471    "L_aes_gcm_decrypt_arm32_crypto_nonce_start_dw_%=:\n\t"
 6472        "ldr	r8, [%[nonce]], #4\n\t"
 6473        "sub	r12, r12, #4\n\t"
 6474        "str	r8, [r9], #4\n\t"
 6475        "cmp	r12, #4\n\t"
 6476        "bge	L_aes_gcm_decrypt_arm32_crypto_nonce_start_dw_%=\n\t"
 6477        "\n"
 6478    "L_aes_gcm_decrypt_arm32_crypto_nonce_start_sw_%=:\n\t"
 6479        "cmp	r12, #2\n\t"
 6480        "blt	L_aes_gcm_decrypt_arm32_crypto_nonce_start_byte_%=\n\t"
 6481        "ldrh	r8, [%[nonce]], #2\n\t"
 6482        "sub	r12, r12, #2\n\t"
 6483        "strh	r8, [r9], #2\n\t"
 6484        "\n"
 6485    "L_aes_gcm_decrypt_arm32_crypto_nonce_start_byte_%=:\n\t"
 6486        "cmp	r12, #1\n\t"
 6487        "blt	L_aes_gcm_decrypt_arm32_crypto_nonce_end_bytes_%=\n\t"
 6488        "ldrb	r8, [%[nonce]], #1\n\t"
 6489        "subs	r12, r12, #1\n\t"
 6490        "strb	r8, [r9], #1\n\t"
 6491        "bne	L_aes_gcm_decrypt_arm32_crypto_nonce_start_byte_%=\n\t"
 6492        "\n"
 6493    "L_aes_gcm_decrypt_arm32_crypto_nonce_end_bytes_%=:\n\t"
 6494        "sub	r9, r9, r11\n\t"
 6495        "vld1.32	{q14}, [r9]\n\t"
 6496        "vmov.i8	q12, #0x55\n\t"
 6497        "vshl.u8	q0, q14, #1\n\t"
 6498        "vshr.u8	q14, q14, #1\n\t"
 6499        "vbif.8	q14, q0, q12\n\t"
 6500        "vmov.i8	q12, #51\n\t"
 6501        "vshl.u8	q0, q14, #2\n\t"
 6502        "vshr.u8	q14, q14, #2\n\t"
 6503        "vbit.8	q0, q14, q12\n\t"
 6504        "vshl.u8	q14, q0, #4\n\t"
 6505        "vsri.u8	q14, q0, #4\n\t"
 6506        "veor.8	q12, q6, q14\n\t"
 6507        /*   X  = C * H^1 */
 6508        "vmull.p64	q2, d25, d16\n\t"
 6509        "vmull.p64	q6, d24, d17\n\t"
 6510        "vmull.p64	q0, d24, d16\n\t"
 6511        "vmull.p64	q1, d25, d17\n\t"
 6512        "veor.8	q2, q2, q6\n\t"
 6513        /*   Reduce */
 6514        "vmull.p64	q6, d3, d27\n\t"
 6515        "veor.8	d2, d2, d5\n\t"
 6516        "veor.8	d1, d1, d4\n\t"
 6517        "veor.8	d2, d2, d13\n\t"
 6518        "veor.8	d1, d1, d12\n\t"
 6519        "vmull.p64	q6, d2, d26\n\t"
 6520        "veor.8	q6, q6, q0\n\t"
 6521        /* Done GHASH */
 6522        "\n"
 6523    "L_aes_gcm_decrypt_arm32_crypto_nonce_partial_done_%=:\n\t"
 6524        "veor.8	q0, q0, q0\n\t"
 6525        /* nonceSz */
 6526        "ldr	r12, [sp]\n\t"
 6527        "lsr	r10, r12, #29\n\t"
 6528        "lsl	r11, r12, #3\n\t"
 6529        "rbit	r10, r10\n\t"
 6530        "rbit	r11, r11\n\t"
 6531        "vmov.32	s2, r10\n\t"
 6532        "vmov.32	s3, r11\n\t"
 6533        "veor.8	q6, q6, q0\n\t"
 6534        "vmull.p64	q2, d13, d16\n\t"
 6535        "vmull.p64	q12, d12, d17\n\t"
 6536        "vmull.p64	q0, d12, d16\n\t"
 6537        "vmull.p64	q1, d13, d17\n\t"
 6538        "veor.8	q2, q2, q12\n\t"
 6539        "vmull.p64	q6, d3, d27\n\t"
 6540        "veor.8	d2, d2, d5\n\t"
 6541        "veor.8	d1, d1, d4\n\t"
 6542        "veor.8	d2, d2, d13\n\t"
 6543        "veor.8	d1, d1, d12\n\t"
 6544        "vmull.p64	q6, d2, d26\n\t"
 6545        "veor.8	q6, q6, q0\n\t"
 6546        "vmov.32	r5, s24\n\t"
 6547        "vmov.32	r8, s25\n\t"
 6548        "vmov.32	r12, s26\n\t"
 6549        "rbit	r5, r5\n\t"
 6550        "rbit	r8, r8\n\t"
 6551        "rbit	r12, r12\n\t"
 6552        "rev	r5, r5\n\t"
 6553        "rev	r8, r8\n\t"
 6554        "rev	r12, r12\n\t"
 6555        "vmov.32	s24, r5\n\t"
 6556        "vmov.32	s25, r8\n\t"
 6557        "vmov.32	s26, r12\n\t"
 6558        "vmov.32	r5, s27\n\t"
 6559        "rbit	r5, r5\n\t"
 6560        "rev	r5, r5\n\t"
 6561        "vmov.32	s27, r5\n\t"
 6562        "rev	r5, r5\n\t"
 6563        "\n"
 6564    "L_aes_gcm_decrypt_arm32_crypto_done_nonce_%=:\n\t"
 6565        /* reg */
 6566        "ldr	r9, [sp, #32]\n\t"
 6567        "vst1.32	{q7}, [r9]\n\t"
 6568        /* tmp */
 6569        "ldr	r9, [sp, #28]\n\t"
 6570        "vldm.32	r7!, {q0-q3}\n\t"
 6571        "vldm.32	r7!, {q7-q13}\n\t"
 6572        /* nr */
 6573        "ldr	r12, [sp, #36]\n\t"
 6574        "lsr	r10, %[sz], #4\n\t"
 6575        "and	r11, %[sz], #15\n\t"
 6576        "cmp	r12, #12\n\t"
 6577        "blt	L_aes_gcm_decrypt_arm32_crypto_start_128_%=\n\t"
 6578        "bgt	L_aes_gcm_decrypt_arm32_crypto_start_256_%=\n\t"
 6579        /* AES_GCM_192 */
 6580#ifndef NO_AES_192
 6581        "cmp	r10, #1\n\t"
 6582        "blt	L_aes_gcm_decrypt_arm32_crypto_192_done_%=\n\t"
 6583        "beq	L_aes_gcm_decrypt_arm32_crypto_192_start_1_%=\n\t"
 6584        "\n"
 6585    "L_aes_gcm_decrypt_arm32_crypto_192_start_2_%=:\n\t"
 6586        "add	r8, r5, #1\n\t"
 6587        "vmov.8	q4, q6\n\t"
 6588        "add	r5, r5, #2\n\t"
 6589        "vmov.8	q5, q6\n\t"
 6590        "rev	r8, r8\n\t"
 6591        "rev	r12, r5\n\t"
 6592        "vmov	s19, r8\n\t"
 6593        "vmov	s23, r12\n\t"
 6594        "aese.8	q4, q0\n\t"
 6595        "aesmc.8	q4, q4\n\t"
 6596        "aese.8	q5, q0\n\t"
 6597        "aesmc.8	q5, q5\n\t"
 6598        "aese.8	q4, q1\n\t"
 6599        "aesmc.8	q4, q4\n\t"
 6600        "aese.8	q5, q1\n\t"
 6601        "aesmc.8	q5, q5\n\t"
 6602        "aese.8	q4, q2\n\t"
 6603        "aesmc.8	q4, q4\n\t"
 6604        "aese.8	q5, q2\n\t"
 6605        "aesmc.8	q5, q5\n\t"
 6606        "aese.8	q4, q3\n\t"
 6607        "aesmc.8	q4, q4\n\t"
 6608        "aese.8	q5, q3\n\t"
 6609        "aesmc.8	q5, q5\n\t"
 6610        "aese.8	q4, q7\n\t"
 6611        "aesmc.8	q4, q4\n\t"
 6612        "aese.8	q5, q7\n\t"
 6613        "aesmc.8	q5, q5\n\t"
 6614        "aese.8	q4, q8\n\t"
 6615        "aesmc.8	q4, q4\n\t"
 6616        "aese.8	q5, q8\n\t"
 6617        "aesmc.8	q5, q5\n\t"
 6618        "aese.8	q4, q9\n\t"
 6619        "aesmc.8	q4, q4\n\t"
 6620        "aese.8	q5, q9\n\t"
 6621        "aesmc.8	q5, q5\n\t"
 6622        "subs	r10, r10, #2\n\t"
 6623        "aese.8	q4, q10\n\t"
 6624        "aesmc.8	q4, q4\n\t"
 6625        "aese.8	q5, q10\n\t"
 6626        "aesmc.8	q5, q5\n\t"
 6627        "aese.8	q4, q11\n\t"
 6628        "aesmc.8	q4, q4\n\t"
 6629        "aese.8	q5, q11\n\t"
 6630        "aesmc.8	q5, q5\n\t"
 6631        "aese.8	q4, q12\n\t"
 6632        "aesmc.8	q4, q4\n\t"
 6633        "aese.8	q5, q12\n\t"
 6634        "aesmc.8	q5, q5\n\t"
 6635        "vld1.32	{q14}, [r7]!\n\t"
 6636        "aese.8	q4, q13\n\t"
 6637        "aesmc.8	q4, q4\n\t"
 6638        "aese.8	q5, q13\n\t"
 6639        "aesmc.8	q5, q5\n\t"
 6640        "vld1.32	{q15}, [r7]\n\t"
 6641        "aese.8	q4, q14\n\t"
 6642        "veor.8	q4, q4, q15\n\t"
 6643        "aese.8	q5, q14\n\t"
 6644        "veor.8	q5, q5, q15\n\t"
 6645        "vld1.8	{q14-q15}, [%[in]]!\n\t"
 6646        "sub	r7, r7, #16\n\t"
 6647        "veor.8	q14, q14, q4\n\t"
 6648        "veor.8	q15, q15, q5\n\t"
 6649        "vst1.8	{q14-q15}, [%[out]]!\n\t"
 6650        "cmp	r10, #1\n\t"
 6651        "bgt	L_aes_gcm_decrypt_arm32_crypto_192_start_2_%=\n\t"
 6652        "blt	L_aes_gcm_decrypt_arm32_crypto_192_done_%=\n\t"
 6653        "\n"
 6654    "L_aes_gcm_decrypt_arm32_crypto_192_start_1_%=:\n\t"
 6655        "add	r5, r5, #1\n\t"
 6656        "vmov.8	q4, q6\n\t"
 6657        "rev	r8, r5\n\t"
 6658        "vmov	s19, r8\n\t"
 6659        "aese.8	q4, q0\n\t"
 6660        "aesmc.8	q4, q4\n\t"
 6661        "aese.8	q4, q1\n\t"
 6662        "aesmc.8	q4, q4\n\t"
 6663        "aese.8	q4, q2\n\t"
 6664        "aesmc.8	q4, q4\n\t"
 6665        "aese.8	q4, q3\n\t"
 6666        "aesmc.8	q4, q4\n\t"
 6667        "aese.8	q4, q7\n\t"
 6668        "aesmc.8	q4, q4\n\t"
 6669        "aese.8	q4, q8\n\t"
 6670        "aesmc.8	q4, q4\n\t"
 6671        "aese.8	q4, q9\n\t"
 6672        "aesmc.8	q4, q4\n\t"
 6673        "aese.8	q4, q10\n\t"
 6674        "aesmc.8	q4, q4\n\t"
 6675        "aese.8	q4, q11\n\t"
 6676        "aesmc.8	q4, q4\n\t"
 6677        "aese.8	q4, q12\n\t"
 6678        "aesmc.8	q4, q4\n\t"
 6679        "vld1.32	{q14}, [r7]!\n\t"
 6680        "aese.8	q4, q13\n\t"
 6681        "aesmc.8	q4, q4\n\t"
 6682        "vld1.32	{q15}, [r7]\n\t"
 6683        "aese.8	q4, q14\n\t"
 6684        "veor.8	q4, q4, q15\n\t"
 6685        "vld1.8	{q14}, [%[in]]!\n\t"
 6686        "sub	r7, r7, #16\n\t"
 6687        "veor.8	q14, q14, q4\n\t"
 6688        "vst1.32	{q14}, [%[out]]!\n\t"
 6689        "\n"
 6690    "L_aes_gcm_decrypt_arm32_crypto_192_done_%=:\n\t"
 6691        "ands	r11, %[sz], #15\n\t"
 6692        "beq	L_aes_gcm_decrypt_arm32_crypto_192_partial_done_%=\n\t"
 6693        "veor.8	q14, q14, q14\n\t"
 6694        "mov	r4, r11\n\t"
 6695        "vst1.32	{q14}, [r9]\n\t"
 6696        "cmp	r4, #4\n\t"
 6697        "blt	L_aes_gcm_decrypt_arm32_crypto_192_start_sw_%=\n\t"
 6698        "\n"
 6699    "L_aes_gcm_decrypt_arm32_crypto_192_start_dw_%=:\n\t"
 6700        "ldr	lr, [%[in]], #4\n\t"
 6701        "sub	r4, r4, #4\n\t"
 6702        "str	lr, [r9], #4\n\t"
 6703        "cmp	r4, #4\n\t"
 6704        "bge	L_aes_gcm_decrypt_arm32_crypto_192_start_dw_%=\n\t"
 6705        "\n"
 6706    "L_aes_gcm_decrypt_arm32_crypto_192_start_sw_%=:\n\t"
 6707        "cmp	r4, #2\n\t"
 6708        "blt	L_aes_gcm_decrypt_arm32_crypto_192_start_byte_%=\n\t"
 6709        "ldrh	lr, [%[in]], #2\n\t"
 6710        "sub	r4, r4, #2\n\t"
 6711        "strh	lr, [r9], #2\n\t"
 6712        "\n"
 6713    "L_aes_gcm_decrypt_arm32_crypto_192_start_byte_%=:\n\t"
 6714        "cmp	r4, #1\n\t"
 6715        "blt	L_aes_gcm_decrypt_arm32_crypto_192_end_bytes_%=\n\t"
 6716        "ldrb	lr, [%[in]], #1\n\t"
 6717        "subs	r4, r4, #1\n\t"
 6718        "strb	lr, [r9], #1\n\t"
 6719        "bne	L_aes_gcm_decrypt_arm32_crypto_192_start_byte_%=\n\t"
 6720        "\n"
 6721    "L_aes_gcm_decrypt_arm32_crypto_192_end_bytes_%=:\n\t"
 6722        "sub	r9, r9, r11\n\t"
 6723        "add	r5, r5, #1\n\t"
 6724        "vmov.8	q4, q6\n\t"
 6725        "rev	r8, r5\n\t"
 6726        "vmov	s19, r8\n\t"
 6727        "aese.8	q4, q0\n\t"
 6728        "aesmc.8	q4, q4\n\t"
 6729        "aese.8	q4, q1\n\t"
 6730        "aesmc.8	q4, q4\n\t"
 6731        "aese.8	q4, q2\n\t"
 6732        "aesmc.8	q4, q4\n\t"
 6733        "aese.8	q4, q3\n\t"
 6734        "aesmc.8	q4, q4\n\t"
 6735        "aese.8	q4, q7\n\t"
 6736        "aesmc.8	q4, q4\n\t"
 6737        "aese.8	q4, q8\n\t"
 6738        "aesmc.8	q4, q4\n\t"
 6739        "aese.8	q4, q9\n\t"
 6740        "aesmc.8	q4, q4\n\t"
 6741        "aese.8	q4, q10\n\t"
 6742        "aesmc.8	q4, q4\n\t"
 6743        "aese.8	q4, q11\n\t"
 6744        "aesmc.8	q4, q4\n\t"
 6745        "aese.8	q4, q12\n\t"
 6746        "aesmc.8	q4, q4\n\t"
 6747        "vld1.32	{q14}, [r7]!\n\t"
 6748        "aese.8	q4, q13\n\t"
 6749        "aesmc.8	q4, q4\n\t"
 6750        "vld1.32	{q15}, [r7]\n\t"
 6751        "aese.8	q4, q14\n\t"
 6752        "veor.8	q4, q4, q15\n\t"
 6753        "vld1.8	{q14}, [r9]\n\t"
 6754        "sub	r7, r7, #16\n\t"
 6755        "veor.8	q14, q14, q4\n\t"
 6756        "vst1.32	{q14}, [r9]\n\t"
 6757        "mov	r4, r11\n\t"
 6758        "cmp	r4, #4\n\t"
 6759        "blt	L_aes_gcm_decrypt_arm32_crypto_192_out_start_sw_%=\n\t"
 6760        "\n"
 6761    "L_aes_gcm_decrypt_arm32_crypto_192_out_start_dw_%=:\n\t"
 6762        "ldr	lr, [r9], #4\n\t"
 6763        "sub	r4, r4, #4\n\t"
 6764        "str	lr, [%[out]], #4\n\t"
 6765        "cmp	r4, #4\n\t"
 6766        "bge	L_aes_gcm_decrypt_arm32_crypto_192_out_start_dw_%=\n\t"
 6767        "\n"
 6768    "L_aes_gcm_decrypt_arm32_crypto_192_out_start_sw_%=:\n\t"
 6769        "cmp	r4, #2\n\t"
 6770        "blt	L_aes_gcm_decrypt_arm32_crypto_192_out_start_byte_%=\n\t"
 6771        "ldrh	lr, [r9], #2\n\t"
 6772        "sub	r4, r4, #2\n\t"
 6773        "strh	lr, [%[out]], #2\n\t"
 6774        "\n"
 6775    "L_aes_gcm_decrypt_arm32_crypto_192_out_start_byte_%=:\n\t"
 6776        "cmp	r4, #1\n\t"
 6777        "blt	L_aes_gcm_decrypt_arm32_crypto_192_out_end_bytes_%=\n\t"
 6778        "ldrb	lr, [r9], #1\n\t"
 6779        "subs	r4, r4, #1\n\t"
 6780        "strb	lr, [%[out]], #1\n\t"
 6781        "bne	L_aes_gcm_decrypt_arm32_crypto_192_out_start_byte_%=\n\t"
 6782        "\n"
 6783    "L_aes_gcm_decrypt_arm32_crypto_192_out_end_bytes_%=:\n\t"
 6784        "\n"
 6785    "L_aes_gcm_decrypt_arm32_crypto_192_partial_done_%=:\n\t"
 6786        /* Finish */
 6787        "add	r8, %[sz], #15\n\t"
 6788        "sub	r8, r5, r8, lsr #4\n\t"
 6789        "rev	r8, r8\n\t"
 6790        "vmov.32	s27, r8\n\t"
 6791        "aese.8	q6, q0\n\t"
 6792        "aesmc.8	q6, q6\n\t"
 6793        "aese.8	q6, q1\n\t"
 6794        "aesmc.8	q6, q6\n\t"
 6795        "aese.8	q6, q2\n\t"
 6796        "aesmc.8	q6, q6\n\t"
 6797        "aese.8	q6, q3\n\t"
 6798        "aesmc.8	q6, q6\n\t"
 6799        "aese.8	q6, q7\n\t"
 6800        "aesmc.8	q6, q6\n\t"
 6801        "aese.8	q6, q8\n\t"
 6802        "aesmc.8	q6, q6\n\t"
 6803        "aese.8	q6, q9\n\t"
 6804        "aesmc.8	q6, q6\n\t"
 6805        "aese.8	q6, q10\n\t"
 6806        "aesmc.8	q6, q6\n\t"
 6807        "aese.8	q6, q11\n\t"
 6808        "aesmc.8	q6, q6\n\t"
 6809        "aese.8	q6, q12\n\t"
 6810        "aesmc.8	q6, q6\n\t"
 6811        "vld1.32	{q14}, [r7]!\n\t"
 6812        "aese.8	q6, q13\n\t"
 6813        "aesmc.8	q6, q6\n\t"
 6814        "vld1.32	{q15}, [r7]\n\t"
 6815        "aese.8	q6, q14\n\t"
 6816        "veor.8	q6, q6, q15\n\t"
 6817        "sub	r7, r7, #16\n\t"
 6818#endif /* !NO_AES_192 */
 6819        "b	L_aes_gcm_decrypt_arm32_crypto_done_enc_%=\n\t"
 6820        /* AES_GCM_256 */
 6821        "\n"
 6822    "L_aes_gcm_decrypt_arm32_crypto_start_256_%=:\n\t"
 6823#ifndef NO_AES_256
 6824        "cmp	r10, #1\n\t"
 6825        "blt	L_aes_gcm_decrypt_arm32_crypto_256_done_%=\n\t"
 6826        "beq	L_aes_gcm_decrypt_arm32_crypto_256_start_1_%=\n\t"
 6827        "\n"
 6828    "L_aes_gcm_decrypt_arm32_crypto_256_start_2_%=:\n\t"
 6829        "add	r8, r5, #1\n\t"
 6830        "vmov.8	q4, q6\n\t"
 6831        "add	r5, r5, #2\n\t"
 6832        "vmov.8	q5, q6\n\t"
 6833        "rev	r8, r8\n\t"
 6834        "rev	r12, r5\n\t"
 6835        "vmov	s19, r8\n\t"
 6836        "vmov	s23, r12\n\t"
 6837        "aese.8	q4, q0\n\t"
 6838        "aesmc.8	q4, q4\n\t"
 6839        "aese.8	q5, q0\n\t"
 6840        "aesmc.8	q5, q5\n\t"
 6841        "aese.8	q4, q1\n\t"
 6842        "aesmc.8	q4, q4\n\t"
 6843        "aese.8	q5, q1\n\t"
 6844        "aesmc.8	q5, q5\n\t"
 6845        "aese.8	q4, q2\n\t"
 6846        "aesmc.8	q4, q4\n\t"
 6847        "aese.8	q5, q2\n\t"
 6848        "aesmc.8	q5, q5\n\t"
 6849        "aese.8	q4, q3\n\t"
 6850        "aesmc.8	q4, q4\n\t"
 6851        "aese.8	q5, q3\n\t"
 6852        "aesmc.8	q5, q5\n\t"
 6853        "aese.8	q4, q7\n\t"
 6854        "aesmc.8	q4, q4\n\t"
 6855        "aese.8	q5, q7\n\t"
 6856        "aesmc.8	q5, q5\n\t"
 6857        "aese.8	q4, q8\n\t"
 6858        "aesmc.8	q4, q4\n\t"
 6859        "aese.8	q5, q8\n\t"
 6860        "aesmc.8	q5, q5\n\t"
 6861        "aese.8	q4, q9\n\t"
 6862        "aesmc.8	q4, q4\n\t"
 6863        "aese.8	q5, q9\n\t"
 6864        "aesmc.8	q5, q5\n\t"
 6865        "subs	r10, r10, #2\n\t"
 6866        "aese.8	q4, q10\n\t"
 6867        "aesmc.8	q4, q4\n\t"
 6868        "aese.8	q5, q10\n\t"
 6869        "aesmc.8	q5, q5\n\t"
 6870        "aese.8	q4, q11\n\t"
 6871        "aesmc.8	q4, q4\n\t"
 6872        "aese.8	q5, q11\n\t"
 6873        "aesmc.8	q5, q5\n\t"
 6874        "aese.8	q4, q12\n\t"
 6875        "aesmc.8	q4, q4\n\t"
 6876        "aese.8	q5, q12\n\t"
 6877        "aesmc.8	q5, q5\n\t"
 6878        "vld1.32	{q14}, [r7]!\n\t"
 6879        "aese.8	q4, q13\n\t"
 6880        "aesmc.8	q4, q4\n\t"
 6881        "aese.8	q5, q13\n\t"
 6882        "aesmc.8	q5, q5\n\t"
 6883        "vld1.32	{q15}, [r7]!\n\t"
 6884        "aese.8	q4, q14\n\t"
 6885        "aesmc.8	q4, q4\n\t"
 6886        "aese.8	q5, q14\n\t"
 6887        "aesmc.8	q5, q5\n\t"
 6888        "vld1.32	{q14}, [r7]!\n\t"
 6889        "aese.8	q4, q15\n\t"
 6890        "aesmc.8	q4, q4\n\t"
 6891        "aese.8	q5, q15\n\t"
 6892        "aesmc.8	q5, q5\n\t"
 6893        "vld1.32	{q15}, [r7]\n\t"
 6894        "aese.8	q4, q14\n\t"
 6895        "veor.8	q4, q4, q15\n\t"
 6896        "aese.8	q5, q14\n\t"
 6897        "veor.8	q5, q5, q15\n\t"
 6898        "vld1.8	{q14-q15}, [%[in]]!\n\t"
 6899        "sub	r7, r7, #48\n\t"
 6900        "veor.8	q14, q14, q4\n\t"
 6901        "veor.8	q15, q15, q5\n\t"
 6902        "vst1.8	{q14-q15}, [%[out]]!\n\t"
 6903        "cmp	r10, #1\n\t"
 6904        "bgt	L_aes_gcm_decrypt_arm32_crypto_256_start_2_%=\n\t"
 6905        "blt	L_aes_gcm_decrypt_arm32_crypto_256_done_%=\n\t"
 6906        "\n"
 6907    "L_aes_gcm_decrypt_arm32_crypto_256_start_1_%=:\n\t"
 6908        "add	r5, r5, #1\n\t"
 6909        "vmov.8	q4, q6\n\t"
 6910        "rev	r8, r5\n\t"
 6911        "vmov	s19, r8\n\t"
 6912        "aese.8	q4, q0\n\t"
 6913        "aesmc.8	q4, q4\n\t"
 6914        "aese.8	q4, q1\n\t"
 6915        "aesmc.8	q4, q4\n\t"
 6916        "aese.8	q4, q2\n\t"
 6917        "aesmc.8	q4, q4\n\t"
 6918        "aese.8	q4, q3\n\t"
 6919        "aesmc.8	q4, q4\n\t"
 6920        "aese.8	q4, q7\n\t"
 6921        "aesmc.8	q4, q4\n\t"
 6922        "aese.8	q4, q8\n\t"
 6923        "aesmc.8	q4, q4\n\t"
 6924        "aese.8	q4, q9\n\t"
 6925        "aesmc.8	q4, q4\n\t"
 6926        "aese.8	q4, q10\n\t"
 6927        "aesmc.8	q4, q4\n\t"
 6928        "aese.8	q4, q11\n\t"
 6929        "aesmc.8	q4, q4\n\t"
 6930        "aese.8	q4, q12\n\t"
 6931        "aesmc.8	q4, q4\n\t"
 6932        "vld1.32	{q14}, [r7]!\n\t"
 6933        "aese.8	q4, q13\n\t"
 6934        "aesmc.8	q4, q4\n\t"
 6935        "vld1.32	{q15}, [r7]!\n\t"
 6936        "aese.8	q4, q14\n\t"
 6937        "aesmc.8	q4, q4\n\t"
 6938        "vld1.32	{q14}, [r7]!\n\t"
 6939        "aese.8	q4, q15\n\t"
 6940        "aesmc.8	q4, q4\n\t"
 6941        "vld1.32	{q15}, [r7]\n\t"
 6942        "aese.8	q4, q14\n\t"
 6943        "veor.8	q4, q4, q15\n\t"
 6944        "vld1.8	{q14}, [%[in]]!\n\t"
 6945        "sub	r7, r7, #48\n\t"
 6946        "veor.8	q14, q14, q4\n\t"
 6947        "vst1.32	{q14}, [%[out]]!\n\t"
 6948        "\n"
 6949    "L_aes_gcm_decrypt_arm32_crypto_256_done_%=:\n\t"
 6950        "ands	r11, %[sz], #15\n\t"
 6951        "beq	L_aes_gcm_decrypt_arm32_crypto_256_partial_done_%=\n\t"
 6952        "veor.8	q14, q14, q14\n\t"
 6953        "mov	r4, r11\n\t"
 6954        "vst1.32	{q14}, [r9]\n\t"
 6955        "cmp	r4, #4\n\t"
 6956        "blt	L_aes_gcm_decrypt_arm32_crypto_256_start_sw_%=\n\t"
 6957        "\n"
 6958    "L_aes_gcm_decrypt_arm32_crypto_256_start_dw_%=:\n\t"
 6959        "ldr	lr, [%[in]], #4\n\t"
 6960        "sub	r4, r4, #4\n\t"
 6961        "str	lr, [r9], #4\n\t"
 6962        "cmp	r4, #4\n\t"
 6963        "bge	L_aes_gcm_decrypt_arm32_crypto_256_start_dw_%=\n\t"
 6964        "\n"
 6965    "L_aes_gcm_decrypt_arm32_crypto_256_start_sw_%=:\n\t"
 6966        "cmp	r4, #2\n\t"
 6967        "blt	L_aes_gcm_decrypt_arm32_crypto_256_start_byte_%=\n\t"
 6968        "ldrh	lr, [%[in]], #2\n\t"
 6969        "sub	r4, r4, #2\n\t"
 6970        "strh	lr, [r9], #2\n\t"
 6971        "\n"
 6972    "L_aes_gcm_decrypt_arm32_crypto_256_start_byte_%=:\n\t"
 6973        "cmp	r4, #1\n\t"
 6974        "blt	L_aes_gcm_decrypt_arm32_crypto_256_end_bytes_%=\n\t"
 6975        "ldrb	lr, [%[in]], #1\n\t"
 6976        "subs	r4, r4, #1\n\t"
 6977        "strb	lr, [r9], #1\n\t"
 6978        "bne	L_aes_gcm_decrypt_arm32_crypto_256_start_byte_%=\n\t"
 6979        "\n"
 6980    "L_aes_gcm_decrypt_arm32_crypto_256_end_bytes_%=:\n\t"
 6981        "sub	r9, r9, r11\n\t"
 6982        "add	r5, r5, #1\n\t"
 6983        "vmov.8	q4, q6\n\t"
 6984        "rev	r8, r5\n\t"
 6985        "vmov	s19, r8\n\t"
 6986        "aese.8	q4, q0\n\t"
 6987        "aesmc.8	q4, q4\n\t"
 6988        "aese.8	q4, q1\n\t"
 6989        "aesmc.8	q4, q4\n\t"
 6990        "aese.8	q4, q2\n\t"
 6991        "aesmc.8	q4, q4\n\t"
 6992        "aese.8	q4, q3\n\t"
 6993        "aesmc.8	q4, q4\n\t"
 6994        "aese.8	q4, q7\n\t"
 6995        "aesmc.8	q4, q4\n\t"
 6996        "aese.8	q4, q8\n\t"
 6997        "aesmc.8	q4, q4\n\t"
 6998        "aese.8	q4, q9\n\t"
 6999        "aesmc.8	q4, q4\n\t"
 7000        "aese.8	q4, q10\n\t"
 7001        "aesmc.8	q4, q4\n\t"
 7002        "aese.8	q4, q11\n\t"
 7003        "aesmc.8	q4, q4\n\t"
 7004        "aese.8	q4, q12\n\t"
 7005        "aesmc.8	q4, q4\n\t"
 7006        "vld1.32	{q14}, [r7]!\n\t"
 7007        "aese.8	q4, q13\n\t"
 7008        "aesmc.8	q4, q4\n\t"
 7009        "vld1.32	{q15}, [r7]!\n\t"
 7010        "aese.8	q4, q14\n\t"
 7011        "aesmc.8	q4, q4\n\t"
 7012        "vld1.32	{q14}, [r7]!\n\t"
 7013        "aese.8	q4, q15\n\t"
 7014        "aesmc.8	q4, q4\n\t"
 7015        "vld1.32	{q15}, [r7]\n\t"
 7016        "aese.8	q4, q14\n\t"
 7017        "veor.8	q4, q4, q15\n\t"
 7018        "vld1.8	{q14}, [r9]\n\t"
 7019        "sub	r7, r7, #48\n\t"
 7020        "veor.8	q14, q14, q4\n\t"
 7021        "vst1.32	{q14}, [r9]\n\t"
 7022        "mov	r4, r11\n\t"
 7023        "cmp	r4, #4\n\t"
 7024        "blt	L_aes_gcm_decrypt_arm32_crypto_256_out_start_sw_%=\n\t"
 7025        "\n"
 7026    "L_aes_gcm_decrypt_arm32_crypto_256_out_start_dw_%=:\n\t"
 7027        "ldr	lr, [r9], #4\n\t"
 7028        "sub	r4, r4, #4\n\t"
 7029        "str	lr, [%[out]], #4\n\t"
 7030        "cmp	r4, #4\n\t"
 7031        "bge	L_aes_gcm_decrypt_arm32_crypto_256_out_start_dw_%=\n\t"
 7032        "\n"
 7033    "L_aes_gcm_decrypt_arm32_crypto_256_out_start_sw_%=:\n\t"
 7034        "cmp	r4, #2\n\t"
 7035        "blt	L_aes_gcm_decrypt_arm32_crypto_256_out_start_byte_%=\n\t"
 7036        "ldrh	lr, [r9], #2\n\t"
 7037        "sub	r4, r4, #2\n\t"
 7038        "strh	lr, [%[out]], #2\n\t"
 7039        "\n"
 7040    "L_aes_gcm_decrypt_arm32_crypto_256_out_start_byte_%=:\n\t"
 7041        "cmp	r4, #1\n\t"
 7042        "blt	L_aes_gcm_decrypt_arm32_crypto_256_out_end_bytes_%=\n\t"
 7043        "ldrb	lr, [r9], #1\n\t"
 7044        "subs	r4, r4, #1\n\t"
 7045        "strb	lr, [%[out]], #1\n\t"
 7046        "bne	L_aes_gcm_decrypt_arm32_crypto_256_out_start_byte_%=\n\t"
 7047        "\n"
 7048    "L_aes_gcm_decrypt_arm32_crypto_256_out_end_bytes_%=:\n\t"
 7049        "\n"
 7050    "L_aes_gcm_decrypt_arm32_crypto_256_partial_done_%=:\n\t"
 7051        /* Finish */
 7052        "add	r8, %[sz], #15\n\t"
 7053        "sub	r8, r5, r8, lsr #4\n\t"
 7054        "rev	r8, r8\n\t"
 7055        "vmov.32	s27, r8\n\t"
 7056        "aese.8	q6, q0\n\t"
 7057        "aesmc.8	q6, q6\n\t"
 7058        "aese.8	q6, q1\n\t"
 7059        "aesmc.8	q6, q6\n\t"
 7060        "aese.8	q6, q2\n\t"
 7061        "aesmc.8	q6, q6\n\t"
 7062        "aese.8	q6, q3\n\t"
 7063        "aesmc.8	q6, q6\n\t"
 7064        "aese.8	q6, q7\n\t"
 7065        "aesmc.8	q6, q6\n\t"
 7066        "aese.8	q6, q8\n\t"
 7067        "aesmc.8	q6, q6\n\t"
 7068        "aese.8	q6, q9\n\t"
 7069        "aesmc.8	q6, q6\n\t"
 7070        "aese.8	q6, q10\n\t"
 7071        "aesmc.8	q6, q6\n\t"
 7072        "aese.8	q6, q11\n\t"
 7073        "aesmc.8	q6, q6\n\t"
 7074        "aese.8	q6, q12\n\t"
 7075        "aesmc.8	q6, q6\n\t"
 7076        "vld1.32	{q14}, [r7]!\n\t"
 7077        "aese.8	q6, q13\n\t"
 7078        "aesmc.8	q6, q6\n\t"
 7079        "vld1.32	{q15}, [r7]!\n\t"
 7080        "aese.8	q6, q14\n\t"
 7081        "aesmc.8	q6, q6\n\t"
 7082        "vld1.32	{q14}, [r7]!\n\t"
 7083        "aese.8	q6, q15\n\t"
 7084        "aesmc.8	q6, q6\n\t"
 7085        "vld1.32	{q15}, [r7]\n\t"
 7086        "aese.8	q6, q14\n\t"
 7087        "veor.8	q6, q6, q15\n\t"
 7088        "sub	r7, r7, #48\n\t"
 7089#endif /* !NO_AES_256 */
 7090        "b	L_aes_gcm_decrypt_arm32_crypto_done_enc_%=\n\t"
 7091        /* AES_GCM_128 */
 7092        "\n"
 7093    "L_aes_gcm_decrypt_arm32_crypto_start_128_%=:\n\t"
 7094#ifndef NO_AES_128
 7095        "cmp	r10, #1\n\t"
 7096        "blt	L_aes_gcm_decrypt_arm32_crypto_128_done_%=\n\t"
 7097        "beq	L_aes_gcm_decrypt_arm32_crypto_128_start_1_%=\n\t"
 7098        "\n"
 7099    "L_aes_gcm_decrypt_arm32_crypto_128_start_2_%=:\n\t"
 7100        "add	r8, r5, #1\n\t"
 7101        "vmov.8	q4, q6\n\t"
 7102        "add	r5, r5, #2\n\t"
 7103        "vmov.8	q5, q6\n\t"
 7104        "rev	r8, r8\n\t"
 7105        "rev	r12, r5\n\t"
 7106        "vmov	s19, r8\n\t"
 7107        "vmov	s23, r12\n\t"
 7108        "aese.8	q4, q0\n\t"
 7109        "aesmc.8	q4, q4\n\t"
 7110        "aese.8	q5, q0\n\t"
 7111        "aesmc.8	q5, q5\n\t"
 7112        "aese.8	q4, q1\n\t"
 7113        "aesmc.8	q4, q4\n\t"
 7114        "aese.8	q5, q1\n\t"
 7115        "aesmc.8	q5, q5\n\t"
 7116        "aese.8	q4, q2\n\t"
 7117        "aesmc.8	q4, q4\n\t"
 7118        "aese.8	q5, q2\n\t"
 7119        "aesmc.8	q5, q5\n\t"
 7120        "aese.8	q4, q3\n\t"
 7121        "aesmc.8	q4, q4\n\t"
 7122        "aese.8	q5, q3\n\t"
 7123        "aesmc.8	q5, q5\n\t"
 7124        "aese.8	q4, q7\n\t"
 7125        "aesmc.8	q4, q4\n\t"
 7126        "aese.8	q5, q7\n\t"
 7127        "aesmc.8	q5, q5\n\t"
 7128        "aese.8	q4, q8\n\t"
 7129        "aesmc.8	q4, q4\n\t"
 7130        "aese.8	q5, q8\n\t"
 7131        "aesmc.8	q5, q5\n\t"
 7132        "aese.8	q4, q9\n\t"
 7133        "aesmc.8	q4, q4\n\t"
 7134        "aese.8	q5, q9\n\t"
 7135        "aesmc.8	q5, q5\n\t"
 7136        "subs	r10, r10, #2\n\t"
 7137        "aese.8	q4, q10\n\t"
 7138        "aesmc.8	q4, q4\n\t"
 7139        "aese.8	q5, q10\n\t"
 7140        "aesmc.8	q5, q5\n\t"
 7141        "aese.8	q4, q11\n\t"
 7142        "aesmc.8	q4, q4\n\t"
 7143        "aese.8	q5, q11\n\t"
 7144        "aesmc.8	q5, q5\n\t"
 7145        "vld1.8	{q14-q15}, [%[in]]!\n\t"
 7146        "aese.8	q4, q12\n\t"
 7147        "veor.8	q4, q4, q13\n\t"
 7148        "aese.8	q5, q12\n\t"
 7149        "veor.8	q5, q5, q13\n\t"
 7150        "veor.8	q14, q14, q4\n\t"
 7151        "veor.8	q15, q15, q5\n\t"
 7152        "vst1.8	{q14-q15}, [%[out]]!\n\t"
 7153        "cmp	r10, #1\n\t"
 7154        "bgt	L_aes_gcm_decrypt_arm32_crypto_128_start_2_%=\n\t"
 7155        "blt	L_aes_gcm_decrypt_arm32_crypto_128_done_%=\n\t"
 7156        "\n"
 7157    "L_aes_gcm_decrypt_arm32_crypto_128_start_1_%=:\n\t"
 7158        "add	r5, r5, #1\n\t"
 7159        "vmov.8	q4, q6\n\t"
 7160        "rev	r8, r5\n\t"
 7161        "vmov	s19, r8\n\t"
 7162        "aese.8	q4, q0\n\t"
 7163        "aesmc.8	q4, q4\n\t"
 7164        "aese.8	q4, q1\n\t"
 7165        "aesmc.8	q4, q4\n\t"
 7166        "aese.8	q4, q2\n\t"
 7167        "aesmc.8	q4, q4\n\t"
 7168        "aese.8	q4, q3\n\t"
 7169        "aesmc.8	q4, q4\n\t"
 7170        "aese.8	q4, q7\n\t"
 7171        "aesmc.8	q4, q4\n\t"
 7172        "aese.8	q4, q8\n\t"
 7173        "aesmc.8	q4, q4\n\t"
 7174        "aese.8	q4, q9\n\t"
 7175        "aesmc.8	q4, q4\n\t"
 7176        "aese.8	q4, q10\n\t"
 7177        "aesmc.8	q4, q4\n\t"
 7178        "aese.8	q4, q11\n\t"
 7179        "aesmc.8	q4, q4\n\t"
 7180        "vld1.8	{q14}, [%[in]]!\n\t"
 7181        "aese.8	q4, q12\n\t"
 7182        "veor.8	q4, q4, q13\n\t"
 7183        "veor.8	q14, q14, q4\n\t"
 7184        "vst1.32	{q14}, [%[out]]!\n\t"
 7185        "\n"
 7186    "L_aes_gcm_decrypt_arm32_crypto_128_done_%=:\n\t"
 7187        "ands	r11, %[sz], #15\n\t"
 7188        "beq	L_aes_gcm_decrypt_arm32_crypto_128_partial_done_%=\n\t"
 7189        "veor.8	q14, q14, q14\n\t"
 7190        "mov	r4, r11\n\t"
 7191        "vst1.32	{q14}, [r9]\n\t"
 7192        "cmp	r4, #4\n\t"
 7193        "blt	L_aes_gcm_decrypt_arm32_crypto_128_start_sw_%=\n\t"
 7194        "\n"
 7195    "L_aes_gcm_decrypt_arm32_crypto_128_start_dw_%=:\n\t"
 7196        "ldr	lr, [%[in]], #4\n\t"
 7197        "sub	r4, r4, #4\n\t"
 7198        "str	lr, [r9], #4\n\t"
 7199        "cmp	r4, #4\n\t"
 7200        "bge	L_aes_gcm_decrypt_arm32_crypto_128_start_dw_%=\n\t"
 7201        "\n"
 7202    "L_aes_gcm_decrypt_arm32_crypto_128_start_sw_%=:\n\t"
 7203        "cmp	r4, #2\n\t"
 7204        "blt	L_aes_gcm_decrypt_arm32_crypto_128_start_byte_%=\n\t"
 7205        "ldrh	lr, [%[in]], #2\n\t"
 7206        "sub	r4, r4, #2\n\t"
 7207        "strh	lr, [r9], #2\n\t"
 7208        "\n"
 7209    "L_aes_gcm_decrypt_arm32_crypto_128_start_byte_%=:\n\t"
 7210        "cmp	r4, #1\n\t"
 7211        "blt	L_aes_gcm_decrypt_arm32_crypto_128_end_bytes_%=\n\t"
 7212        "ldrb	lr, [%[in]], #1\n\t"
 7213        "subs	r4, r4, #1\n\t"
 7214        "strb	lr, [r9], #1\n\t"
 7215        "bne	L_aes_gcm_decrypt_arm32_crypto_128_start_byte_%=\n\t"
 7216        "\n"
 7217    "L_aes_gcm_decrypt_arm32_crypto_128_end_bytes_%=:\n\t"
 7218        "sub	r9, r9, r11\n\t"
 7219        "add	r5, r5, #1\n\t"
 7220        "vmov.8	q4, q6\n\t"
 7221        "rev	r8, r5\n\t"
 7222        "vmov	s19, r8\n\t"
 7223        "aese.8	q4, q0\n\t"
 7224        "aesmc.8	q4, q4\n\t"
 7225        "aese.8	q4, q1\n\t"
 7226        "aesmc.8	q4, q4\n\t"
 7227        "aese.8	q4, q2\n\t"
 7228        "aesmc.8	q4, q4\n\t"
 7229        "aese.8	q4, q3\n\t"
 7230        "aesmc.8	q4, q4\n\t"
 7231        "aese.8	q4, q7\n\t"
 7232        "aesmc.8	q4, q4\n\t"
 7233        "aese.8	q4, q8\n\t"
 7234        "aesmc.8	q4, q4\n\t"
 7235        "aese.8	q4, q9\n\t"
 7236        "aesmc.8	q4, q4\n\t"
 7237        "aese.8	q4, q10\n\t"
 7238        "aesmc.8	q4, q4\n\t"
 7239        "aese.8	q4, q11\n\t"
 7240        "aesmc.8	q4, q4\n\t"
 7241        "vld1.8	{q14}, [r9]\n\t"
 7242        "aese.8	q4, q12\n\t"
 7243        "veor.8	q4, q4, q13\n\t"
 7244        "veor.8	q14, q14, q4\n\t"
 7245        "vst1.32	{q14}, [r9]\n\t"
 7246        "mov	r4, r11\n\t"
 7247        "cmp	r4, #4\n\t"
 7248        "blt	L_aes_gcm_decrypt_arm32_crypto_128_out_start_sw_%=\n\t"
 7249        "\n"
 7250    "L_aes_gcm_decrypt_arm32_crypto_128_out_start_dw_%=:\n\t"
 7251        "ldr	lr, [r9], #4\n\t"
 7252        "sub	r4, r4, #4\n\t"
 7253        "str	lr, [%[out]], #4\n\t"
 7254        "cmp	r4, #4\n\t"
 7255        "bge	L_aes_gcm_decrypt_arm32_crypto_128_out_start_dw_%=\n\t"
 7256        "\n"
 7257    "L_aes_gcm_decrypt_arm32_crypto_128_out_start_sw_%=:\n\t"
 7258        "cmp	r4, #2\n\t"
 7259        "blt	L_aes_gcm_decrypt_arm32_crypto_128_out_start_byte_%=\n\t"
 7260        "ldrh	lr, [r9], #2\n\t"
 7261        "sub	r4, r4, #2\n\t"
 7262        "strh	lr, [%[out]], #2\n\t"
 7263        "\n"
 7264    "L_aes_gcm_decrypt_arm32_crypto_128_out_start_byte_%=:\n\t"
 7265        "cmp	r4, #1\n\t"
 7266        "blt	L_aes_gcm_decrypt_arm32_crypto_128_out_end_bytes_%=\n\t"
 7267        "ldrb	lr, [r9], #1\n\t"
 7268        "subs	r4, r4, #1\n\t"
 7269        "strb	lr, [%[out]], #1\n\t"
 7270        "bne	L_aes_gcm_decrypt_arm32_crypto_128_out_start_byte_%=\n\t"
 7271        "\n"
 7272    "L_aes_gcm_decrypt_arm32_crypto_128_out_end_bytes_%=:\n\t"
 7273        "\n"
 7274    "L_aes_gcm_decrypt_arm32_crypto_128_partial_done_%=:\n\t"
 7275        /* Finish */
 7276        "add	r8, %[sz], #15\n\t"
 7277        "sub	r8, r5, r8, lsr #4\n\t"
 7278        "rev	r8, r8\n\t"
 7279        "vmov.32	s27, r8\n\t"
 7280        "aese.8	q6, q0\n\t"
 7281        "aesmc.8	q6, q6\n\t"
 7282        "aese.8	q6, q1\n\t"
 7283        "aesmc.8	q6, q6\n\t"
 7284        "aese.8	q6, q2\n\t"
 7285        "aesmc.8	q6, q6\n\t"
 7286        "aese.8	q6, q3\n\t"
 7287        "aesmc.8	q6, q6\n\t"
 7288        "aese.8	q6, q7\n\t"
 7289        "aesmc.8	q6, q6\n\t"
 7290        "aese.8	q6, q8\n\t"
 7291        "aesmc.8	q6, q6\n\t"
 7292        "aese.8	q6, q9\n\t"
 7293        "aesmc.8	q6, q6\n\t"
 7294        "aese.8	q6, q10\n\t"
 7295        "aesmc.8	q6, q6\n\t"
 7296        "aese.8	q6, q11\n\t"
 7297        "aesmc.8	q6, q6\n\t"
 7298        "aese.8	q6, q12\n\t"
 7299        "veor.8	q6, q6, q13\n\t"
 7300#endif /* !NO_AES_128 */
 7301        "\n"
 7302    "L_aes_gcm_decrypt_arm32_crypto_done_enc_%=:\n\t"
 7303        "vmov.i8	q13, #0x87\n\t"
 7304        "vshr.u64	q13, q13, #56\n\t"
 7305        /* gcm_h */
 7306        "ldr	r8, [sp, #24]\n\t"
 7307        "vld1.32	{q8}, [r8]\n\t"
 7308        /* reg */
 7309        "ldr	r9, [sp, #32]\n\t"
 7310        "vld1.32	{q7}, [r9]\n\t"
 7311        /* tmp */
 7312        "ldr	r9, [sp, #28]\n\t"
 7313        "lsr	lr, r6, #29\n\t"
 7314        "lsl	r6, r6, #3\n\t"
 7315        "rbit	lr, lr\n\t"
 7316        "rbit	r6, r6\n\t"
 7317        "vmov	s0, lr\n\t"
 7318        "vmov	s1, r6\n\t"
 7319        "lsr	lr, %[sz], #29\n\t"
 7320        "lsl	%[sz], %[sz], #3\n\t"
 7321        "rbit	lr, lr\n\t"
 7322        "rbit	%[sz], %[sz]\n\t"
 7323        "vmov	s2, lr\n\t"
 7324        "vmov	s3, %[sz]\n\t"
 7325        "veor.8	q7, q7, q0\n\t"
 7326        "vmull.p64	q2, d15, d16\n\t"
 7327        "vmull.p64	q3, d14, d17\n\t"
 7328        "vmull.p64	q0, d14, d16\n\t"
 7329        "vmull.p64	q1, d15, d17\n\t"
 7330        "veor.8	q2, q2, q3\n\t"
 7331        /*   Reduce */
 7332        "vmull.p64	q7, d3, d27\n\t"
 7333        "veor.8	d2, d2, d5\n\t"
 7334        "veor.8	d1, d1, d4\n\t"
 7335        "veor.8	d2, d2, d15\n\t"
 7336        "veor.8	d1, d1, d14\n\t"
 7337        "vmull.p64	q7, d2, d26\n\t"
 7338        "veor.8	q7, q7, q0\n\t"
 7339        "vmov.i8	q0, #0x55\n\t"
 7340        "vshl.u8	q1, q7, #1\n\t"
 7341        "vshr.u8	q7, q7, #1\n\t"
 7342        "vbif.8	q7, q1, q0\n\t"
 7343        "vmov.i8	q0, #51\n\t"
 7344        "vshl.u8	q1, q7, #2\n\t"
 7345        "vshr.u8	q7, q7, #2\n\t"
 7346        "vbit.8	q1, q7, q0\n\t"
 7347        "vshl.u8	q7, q1, #4\n\t"
 7348        "vsri.u8	q7, q1, #4\n\t"
 7349        /* DONE */
 7350        "veor.8	q7, q7, q6\n\t"
 7351        /* tag */
 7352        "ldr	lr, [sp, #4]\n\t"
 7353        /* tagSz */
 7354        "ldr	r4, [sp, #8]\n\t"
 7355        "cmp	r4, #16\n\t"
 7356        "blt	L_aes_gcm_decrypt_arm32_crypto_tag_part_tag_%=\n\t"
 7357        "vld1.8	{q0}, [lr]\n\t"
 7358        "b	L_aes_gcm_decrypt_arm32_crypto_tag_tag_loaded_%=\n\t"
 7359        "\n"
 7360    "L_aes_gcm_decrypt_arm32_crypto_tag_part_tag_%=:\n\t"
 7361        "veor.8	q0, q0, q0\n\t"
 7362        "mov	r12, r4\n\t"
 7363        "vst1.32	{q0}, [r9]\n\t"
 7364        "cmp	r12, #4\n\t"
 7365        "blt	L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_sw_%=\n\t"
 7366        "\n"
 7367    "L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_dw_%=:\n\t"
 7368        "ldr	r8, [lr], #4\n\t"
 7369        "sub	r12, r12, #4\n\t"
 7370        "str	r8, [r9], #4\n\t"
 7371        "cmp	r12, #4\n\t"
 7372        "bge	L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_dw_%=\n\t"
 7373        "\n"
 7374    "L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_sw_%=:\n\t"
 7375        "cmp	r12, #2\n\t"
 7376        "blt	L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_byte_%=\n\t"
 7377        "ldrh	r8, [lr], #2\n\t"
 7378        "sub	r12, r12, #2\n\t"
 7379        "strh	r8, [r9], #2\n\t"
 7380        "\n"
 7381    "L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_byte_%=:\n\t"
 7382        "cmp	r12, #1\n\t"
 7383        "blt	L_aes_gcm_decrypt_arm32_crypto_tag_tag_end_bytes_%=\n\t"
 7384        "ldrb	r8, [lr], #1\n\t"
 7385        "subs	r12, r12, #1\n\t"
 7386        "strb	r8, [r9], #1\n\t"
 7387        "bne	L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_byte_%=\n\t"
 7388        "\n"
 7389    "L_aes_gcm_decrypt_arm32_crypto_tag_tag_end_bytes_%=:\n\t"
 7390        "sub	r9, r9, r4\n\t"
 7391        "vld1.32	{q0}, [r9]\n\t"
 7392        "mov	r12, #16\n\t"
 7393        "vst1.32	{q7}, [r9]\n\t"
 7394        "sub	r12, r12, r4\n\t"
 7395        "eor	r8, r8, r8\n\t"
 7396        "add	r9, r9, r4\n\t"
 7397        "\n"
 7398    "L_aes_gcm_decrypt_arm32_crypto_tag_calc_tag_byte_%=:\n\t"
 7399        "strb	r8, [r9], #1\n\t"
 7400        "subs	r12, r12, #1\n\t"
 7401        "bne	L_aes_gcm_decrypt_arm32_crypto_tag_calc_tag_byte_%=\n\t"
 7402        "subs	r9, r9, #16\n\t"
 7403        "vld1.32	{q7}, [r9]\n\t"
 7404        "\n"
 7405    "L_aes_gcm_decrypt_arm32_crypto_tag_tag_loaded_%=:\n\t"
 7406        "vceq.i32	q0, q0, q7\n\t"
 7407        "vmov	r5, s0\n\t"
 7408        "vmov	r8, s1\n\t"
 7409        "and	r12, r5, r8\n\t"
 7410        "vmov	r5, s2\n\t"
 7411        "vmov	r8, s3\n\t"
 7412        "and	r12, r12, r5\n\t"
 7413        "and	r12, r12, r8\n\t"
 7414        "mov	r5, #-180\n\t"
 7415        "mvn	r12, r12\n\t"
 7416        "and	%[in], r5, r12\n\t"
 7417        "pop	{%[nonceSz], %[tag]}\n\t"
 7418        "pop	{%[tagSz], %[aad], %[aadSz], %[key], %[gcm_h], %[tmp], %[reg], %[nr]}\n\t"
 7419#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 7420        : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz),
 7421          [nonce] "+r" (nonce), [nonceSz] "+r" (nonceSz), [tag] "+r" (tag),
 7422          [tagSz] "+r" (tagSz), [aad] "+r" (aad), [aadSz] "+r" (aadSz),
 7423          [key] "+r" (key), [gcm_h] "+r" (gcm_h), [tmp] "+r" (tmp),
 7424          [reg] "+r" (reg), [nr] "+r" (nr)
 7425        :
 7426#else
 7427        :
 7428        : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [nonce] "r" (nonce),
 7429          [nonceSz] "r" (nonceSz), [tag] "r" (tag), [tagSz] "r" (tagSz),
 7430          [aad] "r" (aad), [aadSz] "r" (aadSz), [key] "r" (key),
 7431          [gcm_h] "r" (gcm_h), [tmp] "r" (tmp), [reg] "r" (reg), [nr] "r" (nr)
 7432#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 7433        : "memory", "cc", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8",
 7434            "q9", "q10", "q11", "q12", "q13", "q14", "q15"
 7435    );
 7436    return (word32)(size_t)in;
 7437}
 7438
 7439#endif /* HAVE_AES_DECRYPT */
 7440#endif /* HAVE_AESGCM */
 7441#ifdef WOLFSSL_AES_XTS
 7442#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 7443WC_OMIT_FRAME_POINTER void AES_XTS_encrypt_AARCH32(const byte* in_p,
 7444    byte* out_p, word32 sz_p, const byte* i_p, byte* key_p, byte* key2_p,
 7445    byte* tmp_p, int nr_p)
 7446#else
 7447WC_OMIT_FRAME_POINTER void AES_XTS_encrypt_AARCH32(const byte* in, byte* out,
 7448    word32 sz, const byte* i, byte* key, byte* key2, byte* tmp, int nr)
 7449#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 7450{
 7451#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 7452    register const byte* in __asm__ ("r0") = (const byte*)in_p;
 7453    register byte* out __asm__ ("r1") = (byte*)out_p;
 7454    register word32 sz __asm__ ("r2") = (word32)sz_p;
 7455    register const byte* i __asm__ ("r3") = (const byte*)i_p;
 7456    register byte* key __asm__ ("r12") = (byte*)key_p;
 7457    register byte* key2 __asm__ ("lr") = (byte*)key2_p;
 7458    register byte* tmp __asm__ ("r4") = (byte*)tmp_p;
 7459    register int nr __asm__ ("r5") = (int)nr_p;
 7460#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 7461
 7462    __asm__ __volatile__ (
 7463        "push	{%[tmp], %[nr]}\n\t"
 7464        "push	{%[key], %[key2]}\n\t"
 7465        "ldr	r12, [sp]\n\t"
 7466        "ldr	lr, [sp, #4]\n\t"
 7467        "ldr	r5, [sp, #12]\n\t"
 7468        "vldm.32	lr!, {q2-q9}\n\t"
 7469        "lsr	r4, %[sz], #4\n\t"
 7470        "and	%[sz], %[sz], #15\n\t"
 7471        "vld1.8	{q0}, [%[i]]\n\t"
 7472        "cmp	r5, #12\n\t"
 7473        "blt	L_aes_xts_encrypt_arm32_crypto_start_128_%=\n\t"
 7474        "bgt	L_aes_xts_encrypt_arm32_crypto_start_256_%=\n\t"
 7475        /* AES_XTS_192 */
 7476#ifndef NO_AES_192
 7477        "vldm.32	lr!, {q10-q14}\n\t"
 7478        "aese.8	q0, q2\n\t"
 7479        "aesmc.8	q0, q0\n\t"
 7480        "aese.8	q0, q3\n\t"
 7481        "aesmc.8	q0, q0\n\t"
 7482        "aese.8	q0, q4\n\t"
 7483        "aesmc.8	q0, q0\n\t"
 7484        "aese.8	q0, q5\n\t"
 7485        "aesmc.8	q0, q0\n\t"
 7486        "aese.8	q0, q6\n\t"
 7487        "aesmc.8	q0, q0\n\t"
 7488        "aese.8	q0, q7\n\t"
 7489        "aesmc.8	q0, q0\n\t"
 7490        "aese.8	q0, q8\n\t"
 7491        "aesmc.8	q0, q0\n\t"
 7492        "aese.8	q0, q9\n\t"
 7493        "aesmc.8	q0, q0\n\t"
 7494        "aese.8	q0, q10\n\t"
 7495        "aesmc.8	q0, q0\n\t"
 7496        "aese.8	q0, q11\n\t"
 7497        "aesmc.8	q0, q0\n\t"
 7498        "aese.8	q0, q12\n\t"
 7499        "aesmc.8	q0, q0\n\t"
 7500        "aese.8	q0, q13\n\t"
 7501        "veor.32	q0, q0, q14\n\t"
 7502        "vmov	r6, r7, d0\n\t"
 7503        "vmov	r8, r9, d1\n\t"
 7504        "vldm.32	r12!, {q2-q9}\n\t"
 7505        "vldm.32	r12!, {q10-q14}\n\t"
 7506        "mov	lr, #0x87\n\t"
 7507        "cmp	r4, #1\n\t"
 7508        "blt	L_aes_xts_encrypt_arm32_crypto_192_done_%=\n\t"
 7509        "\n"
 7510    "L_aes_xts_encrypt_arm32_crypto_192_start_1_%=:\n\t"
 7511        "vld1.8	{q1}, [%[in]]!\n\t"
 7512        "veor.32	q1, q1, q0\n\t"
 7513        "aese.8	q1, q2\n\t"
 7514        "aesmc.8	q1, q1\n\t"
 7515        "and	r5, lr, r9, asr #31\n\t"
 7516        "aese.8	q1, q3\n\t"
 7517        "aesmc.8	q1, q1\n\t"
 7518        "lsl	r9, r9, #1\n\t"
 7519        "aese.8	q1, q4\n\t"
 7520        "aesmc.8	q1, q1\n\t"
 7521        "orr	r9, r9, r8, lsr #31\n\t"
 7522        "aese.8	q1, q5\n\t"
 7523        "aesmc.8	q1, q1\n\t"
 7524        "lsl	r8, r8, #1\n\t"
 7525        "aese.8	q1, q6\n\t"
 7526        "aesmc.8	q1, q1\n\t"
 7527        "orr	r8, r8, r7, lsr #31\n\t"
 7528        "aese.8	q1, q7\n\t"
 7529        "aesmc.8	q1, q1\n\t"
 7530        "lsl	r7, r7, #1\n\t"
 7531        "aese.8	q1, q8\n\t"
 7532        "aesmc.8	q1, q1\n\t"
 7533        "orr	r7, r7, r6, lsr #31\n\t"
 7534        "aese.8	q1, q9\n\t"
 7535        "aesmc.8	q1, q1\n\t"
 7536        "eor	r6, r5, r6, lsl #1\n\t"
 7537        "aese.8	q1, q10\n\t"
 7538        "aesmc.8	q1, q1\n\t"
 7539        "aese.8	q1, q11\n\t"
 7540        "aesmc.8	q1, q1\n\t"
 7541        "aese.8	q1, q12\n\t"
 7542        "aesmc.8	q1, q1\n\t"
 7543        "aese.8	q1, q13\n\t"
 7544        "veor.32	q1, q1, q14\n\t"
 7545        "veor.32	q1, q1, q0\n\t"
 7546        "vmov	d0, r6, r7\n\t"
 7547        "vmov	d1, r8, r9\n\t"
 7548        "subs	r4, r4, #1\n\t"
 7549        "vst1.8	{q1}, [%[out]]!\n\t"
 7550        "bne	L_aes_xts_encrypt_arm32_crypto_192_start_1_%=\n\t"
 7551        "\n"
 7552    "L_aes_xts_encrypt_arm32_crypto_192_done_%=:\n\t"
 7553        "cmp	%[sz], #0\n\t"
 7554        "beq	L_aes_xts_encrypt_arm32_crypto_192_partial_done_%=\n\t"
 7555        "sub	%[out], %[out], #16\n\t"
 7556        "ldr	r4, [sp, #8]\n\t"
 7557        "vld1.8	{q1}, [%[out]]!\n\t"
 7558        "vst1.32	{q1}, [r4]\n\t"
 7559        "mov	r5, %[sz]\n\t"
 7560        "\n"
 7561    "L_aes_xts_encrypt_arm32_crypto_192_start_byte_%=:\n\t"
 7562        "ldrb	r8, [r4]\n\t"
 7563        "ldrb	r9, [%[in]], #1\n\t"
 7564        "strb	r8, [%[out]], #1\n\t"
 7565        "strb	r9, [r4], #1\n\t"
 7566        "subs	r5, r5, #1\n\t"
 7567        "bgt	L_aes_xts_encrypt_arm32_crypto_192_start_byte_%=\n\t"
 7568        "sub	%[out], %[out], %[sz]\n\t"
 7569        "sub	r4, r4, %[sz]\n\t"
 7570        "sub	%[out], %[out], #16\n\t"
 7571        "vld1.32	{q1}, [r4]\n\t"
 7572        "veor.32	q1, q1, q0\n\t"
 7573        "aese.8	q1, q2\n\t"
 7574        "aesmc.8	q1, q1\n\t"
 7575        "aese.8	q1, q3\n\t"
 7576        "aesmc.8	q1, q1\n\t"
 7577        "aese.8	q1, q4\n\t"
 7578        "aesmc.8	q1, q1\n\t"
 7579        "aese.8	q1, q5\n\t"
 7580        "aesmc.8	q1, q1\n\t"
 7581        "aese.8	q1, q6\n\t"
 7582        "aesmc.8	q1, q1\n\t"
 7583        "aese.8	q1, q7\n\t"
 7584        "aesmc.8	q1, q1\n\t"
 7585        "aese.8	q1, q8\n\t"
 7586        "aesmc.8	q1, q1\n\t"
 7587        "aese.8	q1, q9\n\t"
 7588        "aesmc.8	q1, q1\n\t"
 7589        "aese.8	q1, q10\n\t"
 7590        "aesmc.8	q1, q1\n\t"
 7591        "aese.8	q1, q11\n\t"
 7592        "aesmc.8	q1, q1\n\t"
 7593        "aese.8	q1, q12\n\t"
 7594        "aesmc.8	q1, q1\n\t"
 7595        "aese.8	q1, q13\n\t"
 7596        "veor.32	q1, q1, q14\n\t"
 7597        "veor.32	q1, q1, q0\n\t"
 7598        "vst1.8	{q1}, [%[out]]\n\t"
 7599        "\n"
 7600    "L_aes_xts_encrypt_arm32_crypto_192_partial_done_%=:\n\t"
 7601#endif /* !NO_AES_192 */
 7602        "b	L_aes_xts_encrypt_arm32_crypto_done_%=\n\t"
 7603        /* AES_XTS_256 */
 7604        "\n"
 7605    "L_aes_xts_encrypt_arm32_crypto_start_256_%=:\n\t"
 7606#ifndef NO_AES_256
 7607        "vldm.32	lr!, {q10-q13}\n\t"
 7608        "aese.8	q0, q2\n\t"
 7609        "aesmc.8	q0, q0\n\t"
 7610        "aese.8	q0, q3\n\t"
 7611        "aesmc.8	q0, q0\n\t"
 7612        "aese.8	q0, q4\n\t"
 7613        "aesmc.8	q0, q0\n\t"
 7614        "aese.8	q0, q5\n\t"
 7615        "aesmc.8	q0, q0\n\t"
 7616        "aese.8	q0, q6\n\t"
 7617        "aesmc.8	q0, q0\n\t"
 7618        "aese.8	q0, q7\n\t"
 7619        "aesmc.8	q0, q0\n\t"
 7620        "aese.8	q0, q8\n\t"
 7621        "aesmc.8	q0, q0\n\t"
 7622        "aese.8	q0, q9\n\t"
 7623        "aesmc.8	q0, q0\n\t"
 7624        "aese.8	q0, q10\n\t"
 7625        "aesmc.8	q0, q0\n\t"
 7626        "aese.8	q0, q11\n\t"
 7627        "aesmc.8	q0, q0\n\t"
 7628        "aese.8	q0, q12\n\t"
 7629        "aesmc.8	q0, q0\n\t"
 7630        "vld1.32	{q14}, [lr]!\n\t"
 7631        "aese.8	q0, q13\n\t"
 7632        "aesmc.8	q0, q0\n\t"
 7633        "vld1.32	{q15}, [lr]!\n\t"
 7634        "aese.8	q0, q14\n\t"
 7635        "aesmc.8	q0, q0\n\t"
 7636        "vld1.32	{q14}, [lr]!\n\t"
 7637        "aese.8	q0, q15\n\t"
 7638        "veor.32	q0, q0, q14\n\t"
 7639        "vmov	r6, r7, d0\n\t"
 7640        "vmov	r8, r9, d1\n\t"
 7641        "vldm.32	r12!, {q2-q9}\n\t"
 7642        "vldm.32	r12!, {q10-q13}\n\t"
 7643        "mov	lr, #0x87\n\t"
 7644        "cmp	r4, #1\n\t"
 7645        "blt	L_aes_xts_encrypt_arm32_crypto_256_done_%=\n\t"
 7646        "\n"
 7647    "L_aes_xts_encrypt_arm32_crypto_256_start_1_%=:\n\t"
 7648        "vld1.8	{q1}, [%[in]]!\n\t"
 7649        "veor.32	q1, q1, q0\n\t"
 7650        "aese.8	q1, q2\n\t"
 7651        "aesmc.8	q1, q1\n\t"
 7652        "and	r5, lr, r9, asr #31\n\t"
 7653        "aese.8	q1, q3\n\t"
 7654        "aesmc.8	q1, q1\n\t"
 7655        "lsl	r9, r9, #1\n\t"
 7656        "aese.8	q1, q4\n\t"
 7657        "aesmc.8	q1, q1\n\t"
 7658        "orr	r9, r9, r8, lsr #31\n\t"
 7659        "aese.8	q1, q5\n\t"
 7660        "aesmc.8	q1, q1\n\t"
 7661        "lsl	r8, r8, #1\n\t"
 7662        "aese.8	q1, q6\n\t"
 7663        "aesmc.8	q1, q1\n\t"
 7664        "orr	r8, r8, r7, lsr #31\n\t"
 7665        "aese.8	q1, q7\n\t"
 7666        "aesmc.8	q1, q1\n\t"
 7667        "lsl	r7, r7, #1\n\t"
 7668        "aese.8	q1, q8\n\t"
 7669        "aesmc.8	q1, q1\n\t"
 7670        "orr	r7, r7, r6, lsr #31\n\t"
 7671        "aese.8	q1, q9\n\t"
 7672        "aesmc.8	q1, q1\n\t"
 7673        "eor	r6, r5, r6, lsl #1\n\t"
 7674        "aese.8	q1, q10\n\t"
 7675        "aesmc.8	q1, q1\n\t"
 7676        "aese.8	q1, q11\n\t"
 7677        "aesmc.8	q1, q1\n\t"
 7678        "aese.8	q1, q12\n\t"
 7679        "aesmc.8	q1, q1\n\t"
 7680        "vld1.32	{q14}, [r12]!\n\t"
 7681        "aese.8	q1, q13\n\t"
 7682        "aesmc.8	q1, q1\n\t"
 7683        "vld1.32	{q15}, [r12]!\n\t"
 7684        "aese.8	q1, q14\n\t"
 7685        "aesmc.8	q1, q1\n\t"
 7686        "vld1.32	{q14}, [r12]!\n\t"
 7687        "aese.8	q1, q15\n\t"
 7688        "veor.32	q1, q1, q14\n\t"
 7689        "sub	r12, r12, #48\n\t"
 7690        "veor.32	q1, q1, q0\n\t"
 7691        "vmov	d0, r6, r7\n\t"
 7692        "vmov	d1, r8, r9\n\t"
 7693        "subs	r4, r4, #1\n\t"
 7694        "vst1.8	{q1}, [%[out]]!\n\t"
 7695        "bne	L_aes_xts_encrypt_arm32_crypto_256_start_1_%=\n\t"
 7696        "\n"
 7697    "L_aes_xts_encrypt_arm32_crypto_256_done_%=:\n\t"
 7698        "cmp	%[sz], #0\n\t"
 7699        "beq	L_aes_xts_encrypt_arm32_crypto_256_partial_done_%=\n\t"
 7700        "sub	%[out], %[out], #16\n\t"
 7701        "ldr	r4, [sp, #8]\n\t"
 7702        "vld1.8	{q1}, [%[out]]!\n\t"
 7703        "vst1.32	{q1}, [r4]\n\t"
 7704        "mov	r5, %[sz]\n\t"
 7705        "\n"
 7706    "L_aes_xts_encrypt_arm32_crypto_256_start_byte_%=:\n\t"
 7707        "ldrb	r8, [r4]\n\t"
 7708        "ldrb	r9, [%[in]], #1\n\t"
 7709        "strb	r8, [%[out]], #1\n\t"
 7710        "strb	r9, [r4], #1\n\t"
 7711        "subs	r5, r5, #1\n\t"
 7712        "bgt	L_aes_xts_encrypt_arm32_crypto_256_start_byte_%=\n\t"
 7713        "sub	%[out], %[out], %[sz]\n\t"
 7714        "sub	r4, r4, %[sz]\n\t"
 7715        "sub	%[out], %[out], #16\n\t"
 7716        "vld1.32	{q1}, [r4]\n\t"
 7717        "veor.32	q1, q1, q0\n\t"
 7718        "aese.8	q1, q2\n\t"
 7719        "aesmc.8	q1, q1\n\t"
 7720        "aese.8	q1, q3\n\t"
 7721        "aesmc.8	q1, q1\n\t"
 7722        "aese.8	q1, q4\n\t"
 7723        "aesmc.8	q1, q1\n\t"
 7724        "aese.8	q1, q5\n\t"
 7725        "aesmc.8	q1, q1\n\t"
 7726        "aese.8	q1, q6\n\t"
 7727        "aesmc.8	q1, q1\n\t"
 7728        "aese.8	q1, q7\n\t"
 7729        "aesmc.8	q1, q1\n\t"
 7730        "aese.8	q1, q8\n\t"
 7731        "aesmc.8	q1, q1\n\t"
 7732        "aese.8	q1, q9\n\t"
 7733        "aesmc.8	q1, q1\n\t"
 7734        "aese.8	q1, q10\n\t"
 7735        "aesmc.8	q1, q1\n\t"
 7736        "aese.8	q1, q11\n\t"
 7737        "aesmc.8	q1, q1\n\t"
 7738        "aese.8	q1, q12\n\t"
 7739        "aesmc.8	q1, q1\n\t"
 7740        "vld1.32	{q14}, [r12]!\n\t"
 7741        "aese.8	q1, q13\n\t"
 7742        "aesmc.8	q1, q1\n\t"
 7743        "vld1.32	{q15}, [r12]!\n\t"
 7744        "aese.8	q1, q14\n\t"
 7745        "aesmc.8	q1, q1\n\t"
 7746        "vld1.32	{q14}, [r12]!\n\t"
 7747        "aese.8	q1, q15\n\t"
 7748        "veor.32	q1, q1, q14\n\t"
 7749        "veor.32	q1, q1, q0\n\t"
 7750        "vst1.8	{q1}, [%[out]]\n\t"
 7751        "\n"
 7752    "L_aes_xts_encrypt_arm32_crypto_256_partial_done_%=:\n\t"
 7753#endif /* !NO_AES_256 */
 7754        "b	L_aes_xts_encrypt_arm32_crypto_done_%=\n\t"
 7755        /* AES_XTS_128 */
 7756        "\n"
 7757    "L_aes_xts_encrypt_arm32_crypto_start_128_%=:\n\t"
 7758#ifndef NO_AES_128
 7759        "vldm.32	lr!, {q10-q12}\n\t"
 7760        "aese.8	q0, q2\n\t"
 7761        "aesmc.8	q0, q0\n\t"
 7762        "aese.8	q0, q3\n\t"
 7763        "aesmc.8	q0, q0\n\t"
 7764        "aese.8	q0, q4\n\t"
 7765        "aesmc.8	q0, q0\n\t"
 7766        "aese.8	q0, q5\n\t"
 7767        "aesmc.8	q0, q0\n\t"
 7768        "aese.8	q0, q6\n\t"
 7769        "aesmc.8	q0, q0\n\t"
 7770        "aese.8	q0, q7\n\t"
 7771        "aesmc.8	q0, q0\n\t"
 7772        "aese.8	q0, q8\n\t"
 7773        "aesmc.8	q0, q0\n\t"
 7774        "aese.8	q0, q9\n\t"
 7775        "aesmc.8	q0, q0\n\t"
 7776        "aese.8	q0, q10\n\t"
 7777        "aesmc.8	q0, q0\n\t"
 7778        "aese.8	q0, q11\n\t"
 7779        "veor.32	q0, q0, q12\n\t"
 7780        "vmov	r6, r7, d0\n\t"
 7781        "vmov	r8, r9, d1\n\t"
 7782        "vldm.32	r12!, {q2-q9}\n\t"
 7783        "vldm.32	r12!, {q10-q12}\n\t"
 7784        "mov	lr, #0x87\n\t"
 7785        "cmp	r4, #1\n\t"
 7786        "blt	L_aes_xts_encrypt_arm32_crypto_128_done_%=\n\t"
 7787        "\n"
 7788    "L_aes_xts_encrypt_arm32_crypto_128_start_1_%=:\n\t"
 7789        "vld1.8	{q1}, [%[in]]!\n\t"
 7790        "veor.32	q1, q1, q0\n\t"
 7791        "aese.8	q1, q2\n\t"
 7792        "aesmc.8	q1, q1\n\t"
 7793        "and	r5, lr, r9, asr #31\n\t"
 7794        "aese.8	q1, q3\n\t"
 7795        "aesmc.8	q1, q1\n\t"
 7796        "lsl	r9, r9, #1\n\t"
 7797        "aese.8	q1, q4\n\t"
 7798        "aesmc.8	q1, q1\n\t"
 7799        "orr	r9, r9, r8, lsr #31\n\t"
 7800        "aese.8	q1, q5\n\t"
 7801        "aesmc.8	q1, q1\n\t"
 7802        "lsl	r8, r8, #1\n\t"
 7803        "aese.8	q1, q6\n\t"
 7804        "aesmc.8	q1, q1\n\t"
 7805        "orr	r8, r8, r7, lsr #31\n\t"
 7806        "aese.8	q1, q7\n\t"
 7807        "aesmc.8	q1, q1\n\t"
 7808        "lsl	r7, r7, #1\n\t"
 7809        "aese.8	q1, q8\n\t"
 7810        "aesmc.8	q1, q1\n\t"
 7811        "orr	r7, r7, r6, lsr #31\n\t"
 7812        "aese.8	q1, q9\n\t"
 7813        "aesmc.8	q1, q1\n\t"
 7814        "eor	r6, r5, r6, lsl #1\n\t"
 7815        "aese.8	q1, q10\n\t"
 7816        "aesmc.8	q1, q1\n\t"
 7817        "aese.8	q1, q11\n\t"
 7818        "veor.32	q1, q1, q12\n\t"
 7819        "veor.32	q1, q1, q0\n\t"
 7820        "vmov	d0, r6, r7\n\t"
 7821        "vmov	d1, r8, r9\n\t"
 7822        "subs	r4, r4, #1\n\t"
 7823        "vst1.8	{q1}, [%[out]]!\n\t"
 7824        "bne	L_aes_xts_encrypt_arm32_crypto_128_start_1_%=\n\t"
 7825        "\n"
 7826    "L_aes_xts_encrypt_arm32_crypto_128_done_%=:\n\t"
 7827        "cmp	%[sz], #0\n\t"
 7828        "beq	L_aes_xts_encrypt_arm32_crypto_128_partial_done_%=\n\t"
 7829        "sub	%[out], %[out], #16\n\t"
 7830        "ldr	r4, [sp, #8]\n\t"
 7831        "vld1.8	{q1}, [%[out]]!\n\t"
 7832        "vst1.32	{q1}, [r4]\n\t"
 7833        "mov	r5, %[sz]\n\t"
 7834        "\n"
 7835    "L_aes_xts_encrypt_arm32_crypto_128_start_byte_%=:\n\t"
 7836        "ldrb	r8, [r4]\n\t"
 7837        "ldrb	r9, [%[in]], #1\n\t"
 7838        "strb	r8, [%[out]], #1\n\t"
 7839        "strb	r9, [r4], #1\n\t"
 7840        "subs	r5, r5, #1\n\t"
 7841        "bgt	L_aes_xts_encrypt_arm32_crypto_128_start_byte_%=\n\t"
 7842        "sub	%[out], %[out], %[sz]\n\t"
 7843        "sub	r4, r4, %[sz]\n\t"
 7844        "sub	%[out], %[out], #16\n\t"
 7845        "vld1.32	{q1}, [r4]\n\t"
 7846        "veor.32	q1, q1, q0\n\t"
 7847        "aese.8	q1, q2\n\t"
 7848        "aesmc.8	q1, q1\n\t"
 7849        "aese.8	q1, q3\n\t"
 7850        "aesmc.8	q1, q1\n\t"
 7851        "aese.8	q1, q4\n\t"
 7852        "aesmc.8	q1, q1\n\t"
 7853        "aese.8	q1, q5\n\t"
 7854        "aesmc.8	q1, q1\n\t"
 7855        "aese.8	q1, q6\n\t"
 7856        "aesmc.8	q1, q1\n\t"
 7857        "aese.8	q1, q7\n\t"
 7858        "aesmc.8	q1, q1\n\t"
 7859        "aese.8	q1, q8\n\t"
 7860        "aesmc.8	q1, q1\n\t"
 7861        "aese.8	q1, q9\n\t"
 7862        "aesmc.8	q1, q1\n\t"
 7863        "aese.8	q1, q10\n\t"
 7864        "aesmc.8	q1, q1\n\t"
 7865        "aese.8	q1, q11\n\t"
 7866        "veor.32	q1, q1, q12\n\t"
 7867        "veor.32	q1, q1, q0\n\t"
 7868        "vst1.8	{q1}, [%[out]]\n\t"
 7869        "\n"
 7870    "L_aes_xts_encrypt_arm32_crypto_128_partial_done_%=:\n\t"
 7871#endif /* !NO_AES_128 */
 7872        "\n"
 7873    "L_aes_xts_encrypt_arm32_crypto_done_%=:\n\t"
 7874        "pop	{%[key], %[key2]}\n\t"
 7875        "pop	{%[tmp], %[nr]}\n\t"
 7876#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 7877        : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [i] "+r" (i),
 7878          [key] "+r" (key), [key2] "+r" (key2), [tmp] "+r" (tmp),
 7879          [nr] "+r" (nr)
 7880        :
 7881#else
 7882        :
 7883        : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [i] "r" (i),
 7884          [key] "r" (key), [key2] "r" (key2), [tmp] "r" (tmp), [nr] "r" (nr)
 7885#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 7886        : "memory", "cc", "r6", "r7", "r8", "r9", "q0", "q1", "q2", "q3", "q4",
 7887            "q5", "q6", "q7", "q8", "q9", "q10", "q11", "q12", "q13", "q14",
 7888            "q15"
 7889    );
 7890}
 7891
 7892#ifdef HAVE_AES_DECRYPT
 7893#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 7894WC_OMIT_FRAME_POINTER void AES_XTS_decrypt_AARCH32(const byte* in_p,
 7895    byte* out_p, word32 sz_p, const byte* i_p, byte* key_p, byte* key2_p,
 7896    byte* tmp_p, int nr_p)
 7897#else
 7898WC_OMIT_FRAME_POINTER void AES_XTS_decrypt_AARCH32(const byte* in, byte* out,
 7899    word32 sz, const byte* i, byte* key, byte* key2, byte* tmp, int nr)
 7900#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 7901{
 7902#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 7903    register const byte* in __asm__ ("r0") = (const byte*)in_p;
 7904    register byte* out __asm__ ("r1") = (byte*)out_p;
 7905    register word32 sz __asm__ ("r2") = (word32)sz_p;
 7906    register const byte* i __asm__ ("r3") = (const byte*)i_p;
 7907    register byte* key __asm__ ("r12") = (byte*)key_p;
 7908    register byte* key2 __asm__ ("lr") = (byte*)key2_p;
 7909    register byte* tmp __asm__ ("r4") = (byte*)tmp_p;
 7910    register int nr __asm__ ("r5") = (int)nr_p;
 7911#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 7912
 7913    __asm__ __volatile__ (
 7914        "push	{%[tmp], %[nr]}\n\t"
 7915        "push	{%[key], %[key2]}\n\t"
 7916        "ldr	r12, [sp]\n\t"
 7917        "ldr	lr, [sp, #4]\n\t"
 7918        "vldm.32	lr!, {q2-q9}\n\t"
 7919        "eor	r5, r5, r5\n\t"
 7920        "lsr	r4, %[sz], #4\n\t"
 7921        "ands	%[sz], %[sz], #15\n\t"
 7922        "sub	r5, r5, %[sz]\n\t"
 7923        "sub	r4, r4, r5, lsr #31\n\t"
 7924        "vld1.8	{q1}, [%[i]]\n\t"
 7925        "ldr	r5, [sp, #12]\n\t"
 7926        "cmp	r5, #12\n\t"
 7927        "blt	L_aes_xts_decrypt_arm32_crypto_start_128_%=\n\t"
 7928        "bgt	L_aes_xts_decrypt_arm32_crypto_start_256_%=\n\t"
 7929        /* AES_XTS_192 */
 7930#ifndef NO_AES_192
 7931        "vldm.32	lr!, {q10-q14}\n\t"
 7932        "aese.8	q1, q2\n\t"
 7933        "aesmc.8	q1, q1\n\t"
 7934        "aese.8	q1, q3\n\t"
 7935        "aesmc.8	q1, q1\n\t"
 7936        "aese.8	q1, q4\n\t"
 7937        "aesmc.8	q1, q1\n\t"
 7938        "aese.8	q1, q5\n\t"
 7939        "aesmc.8	q1, q1\n\t"
 7940        "aese.8	q1, q6\n\t"
 7941        "aesmc.8	q1, q1\n\t"
 7942        "aese.8	q1, q7\n\t"
 7943        "aesmc.8	q1, q1\n\t"
 7944        "aese.8	q1, q8\n\t"
 7945        "aesmc.8	q1, q1\n\t"
 7946        "aese.8	q1, q9\n\t"
 7947        "aesmc.8	q1, q1\n\t"
 7948        "aese.8	q1, q10\n\t"
 7949        "aesmc.8	q1, q1\n\t"
 7950        "aese.8	q1, q11\n\t"
 7951        "aesmc.8	q1, q1\n\t"
 7952        "aese.8	q1, q12\n\t"
 7953        "aesmc.8	q1, q1\n\t"
 7954        "aese.8	q1, q13\n\t"
 7955        "veor.32	q1, q1, q14\n\t"
 7956        "vmov	r6, r7, d2\n\t"
 7957        "vmov	r8, r9, d3\n\t"
 7958        "vldm.32	r12!, {q2-q9}\n\t"
 7959        "vldm.32	r12!, {q10-q14}\n\t"
 7960        "mov	lr, #0x87\n\t"
 7961        "cmp	r4, #1\n\t"
 7962        "blt	L_aes_xts_decrypt_arm32_crypto_192_done_%=\n\t"
 7963        "\n"
 7964    "L_aes_xts_decrypt_arm32_crypto_192_start_1_%=:\n\t"
 7965        "vld1.8	{q0}, [%[in]]!\n\t"
 7966        "veor.32	q0, q0, q1\n\t"
 7967        "aesd.8	q0, q2\n\t"
 7968        "aesimc.8	q0, q0\n\t"
 7969        "and	r5, lr, r9, asr #31\n\t"
 7970        "aesd.8	q0, q3\n\t"
 7971        "aesimc.8	q0, q0\n\t"
 7972        "lsl	r9, r9, #1\n\t"
 7973        "aesd.8	q0, q4\n\t"
 7974        "aesimc.8	q0, q0\n\t"
 7975        "orr	r9, r9, r8, lsr #31\n\t"
 7976        "aesd.8	q0, q5\n\t"
 7977        "aesimc.8	q0, q0\n\t"
 7978        "lsl	r8, r8, #1\n\t"
 7979        "aesd.8	q0, q6\n\t"
 7980        "aesimc.8	q0, q0\n\t"
 7981        "orr	r8, r8, r7, lsr #31\n\t"
 7982        "aesd.8	q0, q7\n\t"
 7983        "aesimc.8	q0, q0\n\t"
 7984        "lsl	r7, r7, #1\n\t"
 7985        "aesd.8	q0, q8\n\t"
 7986        "aesimc.8	q0, q0\n\t"
 7987        "orr	r7, r7, r6, lsr #31\n\t"
 7988        "aesd.8	q0, q9\n\t"
 7989        "aesimc.8	q0, q0\n\t"
 7990        "eor	r6, r5, r6, lsl #1\n\t"
 7991        "aesd.8	q0, q10\n\t"
 7992        "aesimc.8	q0, q0\n\t"
 7993        "aesd.8	q0, q11\n\t"
 7994        "aesimc.8	q0, q0\n\t"
 7995        "aesd.8	q0, q12\n\t"
 7996        "aesimc.8	q0, q0\n\t"
 7997        "aesd.8	q0, q13\n\t"
 7998        "veor.32	q0, q0, q14\n\t"
 7999        "veor.32	q0, q0, q1\n\t"
 8000        "vmov	d2, r6, r7\n\t"
 8001        "vmov	d3, r8, r9\n\t"
 8002        "subs	r4, r4, #1\n\t"
 8003        "vst1.8	{q0}, [%[out]]!\n\t"
 8004        "bne	L_aes_xts_decrypt_arm32_crypto_192_start_1_%=\n\t"
 8005        "\n"
 8006    "L_aes_xts_decrypt_arm32_crypto_192_done_%=:\n\t"
 8007        "cmp	%[sz], #0\n\t"
 8008        "beq	L_aes_xts_decrypt_arm32_crypto_192_partial_done_%=\n\t"
 8009        "and	r5, lr, r9, asr #31\n\t"
 8010        "lsl	r9, r9, #1\n\t"
 8011        "orr	r9, r9, r8, lsr #31\n\t"
 8012        "lsl	r8, r8, #1\n\t"
 8013        "orr	r8, r8, r7, lsr #31\n\t"
 8014        "lsl	r7, r7, #1\n\t"
 8015        "orr	r7, r7, r6, lsr #31\n\t"
 8016        "eor	r6, r5, r6, lsl #1\n\t"
 8017        "vmov	d30, r6, r7\n\t"
 8018        "vmov	d31, r8, r9\n\t"
 8019        "vld1.8	{q0}, [%[in]]!\n\t"
 8020        "ldr	r4, [sp, #8]\n\t"
 8021        "veor.32	q0, q0, q15\n\t"
 8022        "aesd.8	q0, q2\n\t"
 8023        "aesimc.8	q0, q0\n\t"
 8024        "aesd.8	q0, q3\n\t"
 8025        "aesimc.8	q0, q0\n\t"
 8026        "aesd.8	q0, q4\n\t"
 8027        "aesimc.8	q0, q0\n\t"
 8028        "aesd.8	q0, q5\n\t"
 8029        "aesimc.8	q0, q0\n\t"
 8030        "aesd.8	q0, q6\n\t"
 8031        "aesimc.8	q0, q0\n\t"
 8032        "aesd.8	q0, q7\n\t"
 8033        "aesimc.8	q0, q0\n\t"
 8034        "aesd.8	q0, q8\n\t"
 8035        "aesimc.8	q0, q0\n\t"
 8036        "aesd.8	q0, q9\n\t"
 8037        "aesimc.8	q0, q0\n\t"
 8038        "aesd.8	q0, q10\n\t"
 8039        "aesimc.8	q0, q0\n\t"
 8040        "aesd.8	q0, q11\n\t"
 8041        "aesimc.8	q0, q0\n\t"
 8042        "aesd.8	q0, q12\n\t"
 8043        "aesimc.8	q0, q0\n\t"
 8044        "aesd.8	q0, q13\n\t"
 8045        "veor.32	q0, q0, q14\n\t"
 8046        "veor.32	q0, q0, q15\n\t"
 8047        "vst1.32	{q0}, [r4]\n\t"
 8048        "add	%[out], %[out], #16\n\t"
 8049        "mov	r5, %[sz]\n\t"
 8050        "\n"
 8051    "L_aes_xts_decrypt_arm32_crypto_192_start_byte_%=:\n\t"
 8052        "ldrb	r8, [r4]\n\t"
 8053        "ldrb	r9, [%[in]], #1\n\t"
 8054        "strb	r8, [%[out]], #1\n\t"
 8055        "strb	r9, [r4], #1\n\t"
 8056        "subs	r5, r5, #1\n\t"
 8057        "bgt	L_aes_xts_decrypt_arm32_crypto_192_start_byte_%=\n\t"
 8058        "sub	%[out], %[out], %[sz]\n\t"
 8059        "sub	r4, r4, %[sz]\n\t"
 8060        "sub	%[out], %[out], #16\n\t"
 8061        "vld1.32	{q0}, [r4]\n\t"
 8062        "veor.32	q0, q0, q1\n\t"
 8063        "aesd.8	q0, q2\n\t"
 8064        "aesimc.8	q0, q0\n\t"
 8065        "aesd.8	q0, q3\n\t"
 8066        "aesimc.8	q0, q0\n\t"
 8067        "aesd.8	q0, q4\n\t"
 8068        "aesimc.8	q0, q0\n\t"
 8069        "aesd.8	q0, q5\n\t"
 8070        "aesimc.8	q0, q0\n\t"
 8071        "aesd.8	q0, q6\n\t"
 8072        "aesimc.8	q0, q0\n\t"
 8073        "aesd.8	q0, q7\n\t"
 8074        "aesimc.8	q0, q0\n\t"
 8075        "aesd.8	q0, q8\n\t"
 8076        "aesimc.8	q0, q0\n\t"
 8077        "aesd.8	q0, q9\n\t"
 8078        "aesimc.8	q0, q0\n\t"
 8079        "aesd.8	q0, q10\n\t"
 8080        "aesimc.8	q0, q0\n\t"
 8081        "aesd.8	q0, q11\n\t"
 8082        "aesimc.8	q0, q0\n\t"
 8083        "aesd.8	q0, q12\n\t"
 8084        "aesimc.8	q0, q0\n\t"
 8085        "aesd.8	q0, q13\n\t"
 8086        "veor.32	q0, q0, q14\n\t"
 8087        "veor.32	q0, q0, q1\n\t"
 8088        "vst1.8	{q0}, [%[out]]\n\t"
 8089        "\n"
 8090    "L_aes_xts_decrypt_arm32_crypto_192_partial_done_%=:\n\t"
 8091#endif /* !NO_AES_192 */
 8092        "b	L_aes_xts_decrypt_arm32_crypto_done_%=\n\t"
 8093        /* AES_XTS_256 */
 8094        "\n"
 8095    "L_aes_xts_decrypt_arm32_crypto_start_256_%=:\n\t"
 8096#ifndef NO_AES_256
 8097        "vldm.32	lr!, {q10-q13}\n\t"
 8098        "aese.8	q1, q2\n\t"
 8099        "aesmc.8	q1, q1\n\t"
 8100        "aese.8	q1, q3\n\t"
 8101        "aesmc.8	q1, q1\n\t"
 8102        "aese.8	q1, q4\n\t"
 8103        "aesmc.8	q1, q1\n\t"
 8104        "aese.8	q1, q5\n\t"
 8105        "aesmc.8	q1, q1\n\t"
 8106        "aese.8	q1, q6\n\t"
 8107        "aesmc.8	q1, q1\n\t"
 8108        "aese.8	q1, q7\n\t"
 8109        "aesmc.8	q1, q1\n\t"
 8110        "aese.8	q1, q8\n\t"
 8111        "aesmc.8	q1, q1\n\t"
 8112        "aese.8	q1, q9\n\t"
 8113        "aesmc.8	q1, q1\n\t"
 8114        "aese.8	q1, q10\n\t"
 8115        "aesmc.8	q1, q1\n\t"
 8116        "aese.8	q1, q11\n\t"
 8117        "aesmc.8	q1, q1\n\t"
 8118        "aese.8	q1, q12\n\t"
 8119        "aesmc.8	q1, q1\n\t"
 8120        "vld1.32	{q14}, [lr]!\n\t"
 8121        "aese.8	q1, q13\n\t"
 8122        "aesmc.8	q1, q1\n\t"
 8123        "vld1.32	{q15}, [lr]!\n\t"
 8124        "aese.8	q1, q14\n\t"
 8125        "aesmc.8	q1, q1\n\t"
 8126        "vld1.32	{q14}, [lr]!\n\t"
 8127        "aese.8	q1, q15\n\t"
 8128        "veor.32	q1, q1, q14\n\t"
 8129        "vmov	r6, r7, d2\n\t"
 8130        "vmov	r8, r9, d3\n\t"
 8131        "vldm.32	r12!, {q2-q9}\n\t"
 8132        "vldm.32	r12!, {q10-q12}\n\t"
 8133        "mov	lr, #0x87\n\t"
 8134        "cmp	r4, #1\n\t"
 8135        "blt	L_aes_xts_decrypt_arm32_crypto_256_done_%=\n\t"
 8136        "\n"
 8137    "L_aes_xts_decrypt_arm32_crypto_256_start_1_%=:\n\t"
 8138        "vld1.8	{q0}, [%[in]]!\n\t"
 8139        "veor.32	q0, q0, q1\n\t"
 8140        "aesd.8	q0, q2\n\t"
 8141        "aesimc.8	q0, q0\n\t"
 8142        "and	r5, lr, r9, asr #31\n\t"
 8143        "aesd.8	q0, q3\n\t"
 8144        "aesimc.8	q0, q0\n\t"
 8145        "lsl	r9, r9, #1\n\t"
 8146        "aesd.8	q0, q4\n\t"
 8147        "aesimc.8	q0, q0\n\t"
 8148        "orr	r9, r9, r8, lsr #31\n\t"
 8149        "aesd.8	q0, q5\n\t"
 8150        "aesimc.8	q0, q0\n\t"
 8151        "lsl	r8, r8, #1\n\t"
 8152        "aesd.8	q0, q6\n\t"
 8153        "aesimc.8	q0, q0\n\t"
 8154        "orr	r8, r8, r7, lsr #31\n\t"
 8155        "aesd.8	q0, q7\n\t"
 8156        "aesimc.8	q0, q0\n\t"
 8157        "lsl	r7, r7, #1\n\t"
 8158        "aesd.8	q0, q8\n\t"
 8159        "aesimc.8	q0, q0\n\t"
 8160        "orr	r7, r7, r6, lsr #31\n\t"
 8161        "aesd.8	q0, q9\n\t"
 8162        "aesimc.8	q0, q0\n\t"
 8163        "eor	r6, r5, r6, lsl #1\n\t"
 8164        "aesd.8	q0, q10\n\t"
 8165        "aesimc.8	q0, q0\n\t"
 8166        "aesd.8	q0, q11\n\t"
 8167        "aesimc.8	q0, q0\n\t"
 8168        "vld1.32	{q13}, [r12]!\n\t"
 8169        "aesd.8	q0, q12\n\t"
 8170        "aesimc.8	q0, q0\n\t"
 8171        "vld1.32	{q14}, [r12]!\n\t"
 8172        "aesd.8	q0, q13\n\t"
 8173        "aesimc.8	q0, q0\n\t"
 8174        "vld1.32	{q13}, [r12]!\n\t"
 8175        "aesd.8	q0, q14\n\t"
 8176        "aesimc.8	q0, q0\n\t"
 8177        "vld1.32	{q14}, [r12]\n\t"
 8178        "aesd.8	q0, q13\n\t"
 8179        "veor.32	q0, q0, q14\n\t"
 8180        "sub	r12, r12, #48\n\t"
 8181        "veor.32	q0, q0, q1\n\t"
 8182        "vmov	d2, r6, r7\n\t"
 8183        "vmov	d3, r8, r9\n\t"
 8184        "subs	r4, r4, #1\n\t"
 8185        "vst1.8	{q0}, [%[out]]!\n\t"
 8186        "bne	L_aes_xts_decrypt_arm32_crypto_256_start_1_%=\n\t"
 8187        "\n"
 8188    "L_aes_xts_decrypt_arm32_crypto_256_done_%=:\n\t"
 8189        "cmp	%[sz], #0\n\t"
 8190        "beq	L_aes_xts_decrypt_arm32_crypto_256_partial_done_%=\n\t"
 8191        "and	r5, lr, r9, asr #31\n\t"
 8192        "lsl	r9, r9, #1\n\t"
 8193        "orr	r9, r9, r8, lsr #31\n\t"
 8194        "lsl	r8, r8, #1\n\t"
 8195        "orr	r8, r8, r7, lsr #31\n\t"
 8196        "lsl	r7, r7, #1\n\t"
 8197        "orr	r7, r7, r6, lsr #31\n\t"
 8198        "eor	r6, r5, r6, lsl #1\n\t"
 8199        "vmov	d30, r6, r7\n\t"
 8200        "vmov	d31, r8, r9\n\t"
 8201        "vld1.8	{q0}, [%[in]]!\n\t"
 8202        "ldr	r4, [sp, #8]\n\t"
 8203        "veor.32	q0, q0, q15\n\t"
 8204        "aesd.8	q0, q2\n\t"
 8205        "aesimc.8	q0, q0\n\t"
 8206        "aesd.8	q0, q3\n\t"
 8207        "aesimc.8	q0, q0\n\t"
 8208        "aesd.8	q0, q4\n\t"
 8209        "aesimc.8	q0, q0\n\t"
 8210        "aesd.8	q0, q5\n\t"
 8211        "aesimc.8	q0, q0\n\t"
 8212        "aesd.8	q0, q6\n\t"
 8213        "aesimc.8	q0, q0\n\t"
 8214        "aesd.8	q0, q7\n\t"
 8215        "aesimc.8	q0, q0\n\t"
 8216        "aesd.8	q0, q8\n\t"
 8217        "aesimc.8	q0, q0\n\t"
 8218        "aesd.8	q0, q9\n\t"
 8219        "aesimc.8	q0, q0\n\t"
 8220        "aesd.8	q0, q10\n\t"
 8221        "aesimc.8	q0, q0\n\t"
 8222        "aesd.8	q0, q11\n\t"
 8223        "aesimc.8	q0, q0\n\t"
 8224        "vld1.32	{q13}, [r12]!\n\t"
 8225        "aesd.8	q0, q12\n\t"
 8226        "aesimc.8	q0, q0\n\t"
 8227        "vld1.32	{q14}, [r12]!\n\t"
 8228        "aesd.8	q0, q13\n\t"
 8229        "aesimc.8	q0, q0\n\t"
 8230        "vld1.32	{q13}, [r12]!\n\t"
 8231        "aesd.8	q0, q14\n\t"
 8232        "aesimc.8	q0, q0\n\t"
 8233        "vld1.32	{q14}, [r12]\n\t"
 8234        "aesd.8	q0, q13\n\t"
 8235        "veor.32	q0, q0, q14\n\t"
 8236        "sub	r12, r12, #48\n\t"
 8237        "veor.32	q0, q0, q15\n\t"
 8238        "vst1.32	{q0}, [r4]\n\t"
 8239        "add	%[out], %[out], #16\n\t"
 8240        "mov	r5, %[sz]\n\t"
 8241        "\n"
 8242    "L_aes_xts_decrypt_arm32_crypto_256_start_byte_%=:\n\t"
 8243        "ldrb	r8, [r4]\n\t"
 8244        "ldrb	r9, [%[in]], #1\n\t"
 8245        "strb	r8, [%[out]], #1\n\t"
 8246        "strb	r9, [r4], #1\n\t"
 8247        "subs	r5, r5, #1\n\t"
 8248        "bgt	L_aes_xts_decrypt_arm32_crypto_256_start_byte_%=\n\t"
 8249        "sub	%[out], %[out], %[sz]\n\t"
 8250        "sub	r4, r4, %[sz]\n\t"
 8251        "sub	%[out], %[out], #16\n\t"
 8252        "vld1.32	{q0}, [r4]\n\t"
 8253        "veor.32	q0, q0, q1\n\t"
 8254        "aesd.8	q0, q2\n\t"
 8255        "aesimc.8	q0, q0\n\t"
 8256        "aesd.8	q0, q3\n\t"
 8257        "aesimc.8	q0, q0\n\t"
 8258        "aesd.8	q0, q4\n\t"
 8259        "aesimc.8	q0, q0\n\t"
 8260        "aesd.8	q0, q5\n\t"
 8261        "aesimc.8	q0, q0\n\t"
 8262        "aesd.8	q0, q6\n\t"
 8263        "aesimc.8	q0, q0\n\t"
 8264        "aesd.8	q0, q7\n\t"
 8265        "aesimc.8	q0, q0\n\t"
 8266        "aesd.8	q0, q8\n\t"
 8267        "aesimc.8	q0, q0\n\t"
 8268        "aesd.8	q0, q9\n\t"
 8269        "aesimc.8	q0, q0\n\t"
 8270        "aesd.8	q0, q10\n\t"
 8271        "aesimc.8	q0, q0\n\t"
 8272        "aesd.8	q0, q11\n\t"
 8273        "aesimc.8	q0, q0\n\t"
 8274        "vld1.32	{q13}, [r12]!\n\t"
 8275        "aesd.8	q0, q12\n\t"
 8276        "aesimc.8	q0, q0\n\t"
 8277        "vld1.32	{q14}, [r12]!\n\t"
 8278        "aesd.8	q0, q13\n\t"
 8279        "aesimc.8	q0, q0\n\t"
 8280        "vld1.32	{q13}, [r12]!\n\t"
 8281        "aesd.8	q0, q14\n\t"
 8282        "aesimc.8	q0, q0\n\t"
 8283        "vld1.32	{q14}, [r12]\n\t"
 8284        "aesd.8	q0, q13\n\t"
 8285        "veor.32	q0, q0, q14\n\t"
 8286        "veor.32	q0, q0, q1\n\t"
 8287        "vst1.8	{q0}, [%[out]]\n\t"
 8288        "\n"
 8289    "L_aes_xts_decrypt_arm32_crypto_256_partial_done_%=:\n\t"
 8290#endif /* !NO_AES_256 */
 8291        "b	L_aes_xts_decrypt_arm32_crypto_done_%=\n\t"
 8292        /* AES_XTS_128 */
 8293        "\n"
 8294    "L_aes_xts_decrypt_arm32_crypto_start_128_%=:\n\t"
 8295#ifndef NO_AES_128
 8296        "vldm.32	lr!, {q10-q12}\n\t"
 8297        "aese.8	q1, q2\n\t"
 8298        "aesmc.8	q1, q1\n\t"
 8299        "aese.8	q1, q3\n\t"
 8300        "aesmc.8	q1, q1\n\t"
 8301        "aese.8	q1, q4\n\t"
 8302        "aesmc.8	q1, q1\n\t"
 8303        "aese.8	q1, q5\n\t"
 8304        "aesmc.8	q1, q1\n\t"
 8305        "aese.8	q1, q6\n\t"
 8306        "aesmc.8	q1, q1\n\t"
 8307        "aese.8	q1, q7\n\t"
 8308        "aesmc.8	q1, q1\n\t"
 8309        "aese.8	q1, q8\n\t"
 8310        "aesmc.8	q1, q1\n\t"
 8311        "aese.8	q1, q9\n\t"
 8312        "aesmc.8	q1, q1\n\t"
 8313        "aese.8	q1, q10\n\t"
 8314        "aesmc.8	q1, q1\n\t"
 8315        "aese.8	q1, q11\n\t"
 8316        "veor.32	q1, q1, q12\n\t"
 8317        "vmov	r6, r7, d2\n\t"
 8318        "vmov	r8, r9, d3\n\t"
 8319        "vldm.32	r12!, {q2-q9}\n\t"
 8320        "vldm.32	r12!, {q10-q12}\n\t"
 8321        "mov	lr, #0x87\n\t"
 8322        "cmp	r4, #1\n\t"
 8323        "blt	L_aes_xts_decrypt_arm32_crypto_128_done_%=\n\t"
 8324        "\n"
 8325    "L_aes_xts_decrypt_arm32_crypto_128_start_1_%=:\n\t"
 8326        "vld1.8	{q0}, [%[in]]!\n\t"
 8327        "veor.32	q0, q0, q1\n\t"
 8328        "aesd.8	q0, q2\n\t"
 8329        "aesimc.8	q0, q0\n\t"
 8330        "and	r5, lr, r9, asr #31\n\t"
 8331        "aesd.8	q0, q3\n\t"
 8332        "aesimc.8	q0, q0\n\t"
 8333        "lsl	r9, r9, #1\n\t"
 8334        "aesd.8	q0, q4\n\t"
 8335        "aesimc.8	q0, q0\n\t"
 8336        "orr	r9, r9, r8, lsr #31\n\t"
 8337        "aesd.8	q0, q5\n\t"
 8338        "aesimc.8	q0, q0\n\t"
 8339        "lsl	r8, r8, #1\n\t"
 8340        "aesd.8	q0, q6\n\t"
 8341        "aesimc.8	q0, q0\n\t"
 8342        "orr	r8, r8, r7, lsr #31\n\t"
 8343        "aesd.8	q0, q7\n\t"
 8344        "aesimc.8	q0, q0\n\t"
 8345        "lsl	r7, r7, #1\n\t"
 8346        "aesd.8	q0, q8\n\t"
 8347        "aesimc.8	q0, q0\n\t"
 8348        "orr	r7, r7, r6, lsr #31\n\t"
 8349        "aesd.8	q0, q9\n\t"
 8350        "aesimc.8	q0, q0\n\t"
 8351        "eor	r6, r5, r6, lsl #1\n\t"
 8352        "aesd.8	q0, q10\n\t"
 8353        "aesimc.8	q0, q0\n\t"
 8354        "aesd.8	q0, q11\n\t"
 8355        "veor.32	q0, q0, q12\n\t"
 8356        "veor.32	q0, q0, q1\n\t"
 8357        "vmov	d2, r6, r7\n\t"
 8358        "vmov	d3, r8, r9\n\t"
 8359        "subs	r4, r4, #1\n\t"
 8360        "vst1.8	{q0}, [%[out]]!\n\t"
 8361        "bne	L_aes_xts_decrypt_arm32_crypto_128_start_1_%=\n\t"
 8362        "\n"
 8363    "L_aes_xts_decrypt_arm32_crypto_128_done_%=:\n\t"
 8364        "cmp	%[sz], #0\n\t"
 8365        "beq	L_aes_xts_decrypt_arm32_crypto_128_partial_done_%=\n\t"
 8366        "and	r5, lr, r9, asr #31\n\t"
 8367        "lsl	r9, r9, #1\n\t"
 8368        "orr	r9, r9, r8, lsr #31\n\t"
 8369        "lsl	r8, r8, #1\n\t"
 8370        "orr	r8, r8, r7, lsr #31\n\t"
 8371        "lsl	r7, r7, #1\n\t"
 8372        "orr	r7, r7, r6, lsr #31\n\t"
 8373        "eor	r6, r5, r6, lsl #1\n\t"
 8374        "vmov	d30, r6, r7\n\t"
 8375        "vmov	d31, r8, r9\n\t"
 8376        "vld1.8	{q0}, [%[in]]!\n\t"
 8377        "ldr	r4, [sp, #8]\n\t"
 8378        "veor.32	q0, q0, q15\n\t"
 8379        "aesd.8	q0, q2\n\t"
 8380        "aesimc.8	q0, q0\n\t"
 8381        "aesd.8	q0, q3\n\t"
 8382        "aesimc.8	q0, q0\n\t"
 8383        "aesd.8	q0, q4\n\t"
 8384        "aesimc.8	q0, q0\n\t"
 8385        "aesd.8	q0, q5\n\t"
 8386        "aesimc.8	q0, q0\n\t"
 8387        "aesd.8	q0, q6\n\t"
 8388        "aesimc.8	q0, q0\n\t"
 8389        "aesd.8	q0, q7\n\t"
 8390        "aesimc.8	q0, q0\n\t"
 8391        "aesd.8	q0, q8\n\t"
 8392        "aesimc.8	q0, q0\n\t"
 8393        "aesd.8	q0, q9\n\t"
 8394        "aesimc.8	q0, q0\n\t"
 8395        "aesd.8	q0, q10\n\t"
 8396        "aesimc.8	q0, q0\n\t"
 8397        "aesd.8	q0, q11\n\t"
 8398        "veor.32	q0, q0, q12\n\t"
 8399        "veor.32	q0, q0, q15\n\t"
 8400        "vst1.32	{q0}, [r4]\n\t"
 8401        "add	%[out], %[out], #16\n\t"
 8402        "mov	r5, %[sz]\n\t"
 8403        "\n"
 8404    "L_aes_xts_decrypt_arm32_crypto_128_start_byte_%=:\n\t"
 8405        "ldrb	r8, [r4]\n\t"
 8406        "ldrb	r9, [%[in]], #1\n\t"
 8407        "strb	r8, [%[out]], #1\n\t"
 8408        "strb	r9, [r4], #1\n\t"
 8409        "subs	r5, r5, #1\n\t"
 8410        "bgt	L_aes_xts_decrypt_arm32_crypto_128_start_byte_%=\n\t"
 8411        "sub	%[out], %[out], %[sz]\n\t"
 8412        "sub	r4, r4, %[sz]\n\t"
 8413        "sub	%[out], %[out], #16\n\t"
 8414        "vld1.32	{q0}, [r4]\n\t"
 8415        "veor.32	q0, q0, q1\n\t"
 8416        "aesd.8	q0, q2\n\t"
 8417        "aesimc.8	q0, q0\n\t"
 8418        "aesd.8	q0, q3\n\t"
 8419        "aesimc.8	q0, q0\n\t"
 8420        "aesd.8	q0, q4\n\t"
 8421        "aesimc.8	q0, q0\n\t"
 8422        "aesd.8	q0, q5\n\t"
 8423        "aesimc.8	q0, q0\n\t"
 8424        "aesd.8	q0, q6\n\t"
 8425        "aesimc.8	q0, q0\n\t"
 8426        "aesd.8	q0, q7\n\t"
 8427        "aesimc.8	q0, q0\n\t"
 8428        "aesd.8	q0, q8\n\t"
 8429        "aesimc.8	q0, q0\n\t"
 8430        "aesd.8	q0, q9\n\t"
 8431        "aesimc.8	q0, q0\n\t"
 8432        "aesd.8	q0, q10\n\t"
 8433        "aesimc.8	q0, q0\n\t"
 8434        "aesd.8	q0, q11\n\t"
 8435        "veor.32	q0, q0, q12\n\t"
 8436        "veor.32	q0, q0, q1\n\t"
 8437        "vst1.8	{q0}, [%[out]]\n\t"
 8438        "\n"
 8439    "L_aes_xts_decrypt_arm32_crypto_128_partial_done_%=:\n\t"
 8440#endif /* !NO_AES_128 */
 8441        "\n"
 8442    "L_aes_xts_decrypt_arm32_crypto_done_%=:\n\t"
 8443        "pop	{%[key], %[key2]}\n\t"
 8444        "pop	{%[tmp], %[nr]}\n\t"
 8445#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 8446        : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [i] "+r" (i),
 8447          [key] "+r" (key), [key2] "+r" (key2), [tmp] "+r" (tmp),
 8448          [nr] "+r" (nr)
 8449        :
 8450#else
 8451        :
 8452        : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [i] "r" (i),
 8453          [key] "r" (key), [key2] "r" (key2), [tmp] "r" (tmp), [nr] "r" (nr)
 8454#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 8455        : "memory", "cc", "r6", "r7", "r8", "r9", "q0", "q1", "q2", "q3", "q4",
 8456            "q5", "q6", "q7", "q8", "q9", "q10", "q11", "q12", "q13", "q14",
 8457            "q15"
 8458    );
 8459}
 8460
 8461#endif /* HAVE_AES_DECRYPT */
 8462#endif /* WOLFSSL_AES_XTS */
 8463#else
 8464#ifdef HAVE_AES_DECRYPT
 8465XALIGNED(8) static const word32 L_AES_ARM32_td_data[] = {
 8466    0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e,
 8467    0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303,
 8468    0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c,
 8469    0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3,
 8470    0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0,
 8471    0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9,
 8472    0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259,
 8473    0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8,
 8474    0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971,
 8475    0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a,
 8476    0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f,
 8477    0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b,
 8478    0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8,
 8479    0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab,
 8480    0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708,
 8481    0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682,
 8482    0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2,
 8483    0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe,
 8484    0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb,
 8485    0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10,
 8486    0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd,
 8487    0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015,
 8488    0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e,
 8489    0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee,
 8490    0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000,
 8491    0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72,
 8492    0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39,
 8493    0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e,
 8494    0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91,
 8495    0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a,
 8496    0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17,
 8497    0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9,
 8498    0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60,
 8499    0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e,
 8500    0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1,
 8501    0xcad731dc, 0x10426385, 0x40139722, 0x2084c611,
 8502    0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1,
 8503    0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3,
 8504    0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964,
 8505    0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390,
 8506    0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b,
 8507    0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf,
 8508    0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46,
 8509    0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af,
 8510    0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512,
 8511    0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb,
 8512    0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a,
 8513    0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8,
 8514    0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c,
 8515    0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266,
 8516    0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8,
 8517    0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6,
 8518    0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604,
 8519    0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551,
 8520    0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41,
 8521    0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647,
 8522    0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c,
 8523    0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1,
 8524    0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737,
 8525    0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db,
 8526    0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340,
 8527    0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95,
 8528    0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1,
 8529    0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857,
 8530};
 8531
 8532#endif /* HAVE_AES_DECRYPT */
 8533#if defined(HAVE_AES_DECRYPT) || defined(HAVE_AES_CBC) || \
 8534    defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \
 8535    defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER)
 8536XALIGNED(8) static const word32 L_AES_ARM32_te_data[] = {
 8537    0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b,
 8538    0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5,
 8539    0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b,
 8540    0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676,
 8541    0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d,
 8542    0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0,
 8543    0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf,
 8544    0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0,
 8545    0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626,
 8546    0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc,
 8547    0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1,
 8548    0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515,
 8549    0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3,
 8550    0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a,
 8551    0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2,
 8552    0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575,
 8553    0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a,
 8554    0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0,
 8555    0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3,
 8556    0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484,
 8557    0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded,
 8558    0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b,
 8559    0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939,
 8560    0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf,
 8561    0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb,
 8562    0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585,
 8563    0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f,
 8564    0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8,
 8565    0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f,
 8566    0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5,
 8567    0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121,
 8568    0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2,
 8569    0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec,
 8570    0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717,
 8571    0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d,
 8572    0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373,
 8573    0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc,
 8574    0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888,
 8575    0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414,
 8576    0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb,
 8577    0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a,
 8578    0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c,
 8579    0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262,
 8580    0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979,
 8581    0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d,
 8582    0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9,
 8583    0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea,
 8584    0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808,
 8585    0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e,
 8586    0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6,
 8587    0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f,
 8588    0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a,
 8589    0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666,
 8590    0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e,
 8591    0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9,
 8592    0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e,
 8593    0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111,
 8594    0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494,
 8595    0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9,
 8596    0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf,
 8597    0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d,
 8598    0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868,
 8599    0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f,
 8600    0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616,
 8601};
 8602
 8603#endif /* HAVE_AES_DECRYPT || HAVE_AES_CBC || HAVE_AESCCM || HAVE_AESGCM ||
 8604        * WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */
 8605#ifdef HAVE_AES_DECRYPT
 8606static const word32* L_AES_ARM32_td = L_AES_ARM32_td_data;
 8607#endif /* HAVE_AES_DECRYPT */
 8608#if defined(HAVE_AES_DECRYPT) || defined(HAVE_AES_CBC) || \
 8609    defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \
 8610    defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER)
 8611static const word32* L_AES_ARM32_te = L_AES_ARM32_te_data;
 8612#endif /* HAVE_AES_DECRYPT || HAVE_AES_CBC || HAVE_AESCCM || HAVE_AESGCM ||
 8613        * WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */
 8614#ifdef HAVE_AES_DECRYPT
 8615void AES_invert_key(unsigned char* ks_p, word32 rounds_p);
 8616#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 8617WC_OMIT_FRAME_POINTER void AES_invert_key(unsigned char* ks_p, word32 rounds_p)
 8618#else
 8619WC_OMIT_FRAME_POINTER void AES_invert_key(unsigned char* ks, word32 rounds)
 8620#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 8621{
 8622#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 8623    register unsigned char* ks __asm__ ("r0") = (unsigned char*)ks_p;
 8624    register word32 rounds __asm__ ("r1") = (word32)rounds_p;
 8625    register word32* L_AES_ARM32_te_c __asm__ ("r2") = (word32*)L_AES_ARM32_te;
 8626    register word32* L_AES_ARM32_td_c __asm__ ("r3") = (word32*)L_AES_ARM32_td;
 8627#else
 8628    register word32* L_AES_ARM32_te_c = (word32*)L_AES_ARM32_te;
 8629    register word32* L_AES_ARM32_td_c = (word32*)L_AES_ARM32_td;
 8630#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 8631
 8632    __asm__ __volatile__ (
 8633        "mov	r12, %[L_AES_ARM32_te]\n\t"
 8634        "mov	lr, %[L_AES_ARM32_td]\n\t"
 8635        "add	r10, %[ks], %[rounds], lsl #4\n\t"
 8636        "mov	r11, %[rounds]\n\t"
 8637        "\n"
 8638    "L_AES_invert_key_loop_%=:\n\t"
 8639        "ldm	%[ks], {r2, r3, r4, r5}\n\t"
 8640        "ldm	r10, {r6, r7, r8, r9}\n\t"
 8641        "stm	r10, {r2, r3, r4, r5}\n\t"
 8642        "stm	%[ks]!, {r6, r7, r8, r9}\n\t"
 8643        "subs	r11, r11, #2\n\t"
 8644        "sub	r10, r10, #16\n\t"
 8645        "bne	L_AES_invert_key_loop_%=\n\t"
 8646        "sub	%[ks], %[ks], %[rounds], lsl #3\n\t"
 8647        "add	%[ks], %[ks], #16\n\t"
 8648        "sub	r11, %[rounds], #1\n\t"
 8649        "\n"
 8650    "L_AES_invert_key_mix_loop_%=:\n\t"
 8651        "ldm	%[ks], {r2, r3, r4, r5}\n\t"
 8652#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8653#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8654        "lsl	r6, r2, #24\n\t"
 8655        "lsr	r6, r6, #24\n\t"
 8656#else
 8657        "uxtb	r6, r2\n\t"
 8658#endif
 8659#else
 8660        "ubfx	r6, r2, #0, #8\n\t"
 8661#endif
 8662#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8663#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8664        "lsl	r7, r2, #16\n\t"
 8665        "lsr	r7, r7, #24\n\t"
 8666#else
 8667        "uxtb	r7, r2, ror #8\n\t"
 8668#endif
 8669#else
 8670        "ubfx	r7, r2, #8, #8\n\t"
 8671#endif
 8672#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8673#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8674        "lsl	r8, r2, #8\n\t"
 8675        "lsr	r8, r8, #24\n\t"
 8676#else
 8677        "uxtb	r8, r2, ror #16\n\t"
 8678#endif
 8679#else
 8680        "ubfx	r8, r2, #16, #8\n\t"
 8681#endif
 8682        "lsr	r9, r2, #24\n\t"
 8683        "ldrb	r6, [r12, r6, lsl #2]\n\t"
 8684        "ldrb	r7, [r12, r7, lsl #2]\n\t"
 8685        "ldrb	r8, [r12, r8, lsl #2]\n\t"
 8686        "ldrb	r9, [r12, r9, lsl #2]\n\t"
 8687        "ldr	r6, [lr, r6, lsl #2]\n\t"
 8688        "ldr	r7, [lr, r7, lsl #2]\n\t"
 8689        "ldr	r8, [lr, r8, lsl #2]\n\t"
 8690        "ldr	r9, [lr, r9, lsl #2]\n\t"
 8691        "eor	r8, r8, r6, ror #16\n\t"
 8692        "eor	r8, r8, r7, ror #8\n\t"
 8693        "eor	r8, r8, r9, ror #24\n\t"
 8694        "str	r8, [%[ks]], #4\n\t"
 8695#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8696#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8697        "lsl	r6, r3, #24\n\t"
 8698        "lsr	r6, r6, #24\n\t"
 8699#else
 8700        "uxtb	r6, r3\n\t"
 8701#endif
 8702#else
 8703        "ubfx	r6, r3, #0, #8\n\t"
 8704#endif
 8705#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8706#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8707        "lsl	r7, r3, #16\n\t"
 8708        "lsr	r7, r7, #24\n\t"
 8709#else
 8710        "uxtb	r7, r3, ror #8\n\t"
 8711#endif
 8712#else
 8713        "ubfx	r7, r3, #8, #8\n\t"
 8714#endif
 8715#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8716#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8717        "lsl	r8, r3, #8\n\t"
 8718        "lsr	r8, r8, #24\n\t"
 8719#else
 8720        "uxtb	r8, r3, ror #16\n\t"
 8721#endif
 8722#else
 8723        "ubfx	r8, r3, #16, #8\n\t"
 8724#endif
 8725        "lsr	r9, r3, #24\n\t"
 8726        "ldrb	r6, [r12, r6, lsl #2]\n\t"
 8727        "ldrb	r7, [r12, r7, lsl #2]\n\t"
 8728        "ldrb	r8, [r12, r8, lsl #2]\n\t"
 8729        "ldrb	r9, [r12, r9, lsl #2]\n\t"
 8730        "ldr	r6, [lr, r6, lsl #2]\n\t"
 8731        "ldr	r7, [lr, r7, lsl #2]\n\t"
 8732        "ldr	r8, [lr, r8, lsl #2]\n\t"
 8733        "ldr	r9, [lr, r9, lsl #2]\n\t"
 8734        "eor	r8, r8, r6, ror #16\n\t"
 8735        "eor	r8, r8, r7, ror #8\n\t"
 8736        "eor	r8, r8, r9, ror #24\n\t"
 8737        "str	r8, [%[ks]], #4\n\t"
 8738#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8739#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8740        "lsl	r6, r4, #24\n\t"
 8741        "lsr	r6, r6, #24\n\t"
 8742#else
 8743        "uxtb	r6, r4\n\t"
 8744#endif
 8745#else
 8746        "ubfx	r6, r4, #0, #8\n\t"
 8747#endif
 8748#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8749#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8750        "lsl	r7, r4, #16\n\t"
 8751        "lsr	r7, r7, #24\n\t"
 8752#else
 8753        "uxtb	r7, r4, ror #8\n\t"
 8754#endif
 8755#else
 8756        "ubfx	r7, r4, #8, #8\n\t"
 8757#endif
 8758#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8759#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8760        "lsl	r8, r4, #8\n\t"
 8761        "lsr	r8, r8, #24\n\t"
 8762#else
 8763        "uxtb	r8, r4, ror #16\n\t"
 8764#endif
 8765#else
 8766        "ubfx	r8, r4, #16, #8\n\t"
 8767#endif
 8768        "lsr	r9, r4, #24\n\t"
 8769        "ldrb	r6, [r12, r6, lsl #2]\n\t"
 8770        "ldrb	r7, [r12, r7, lsl #2]\n\t"
 8771        "ldrb	r8, [r12, r8, lsl #2]\n\t"
 8772        "ldrb	r9, [r12, r9, lsl #2]\n\t"
 8773        "ldr	r6, [lr, r6, lsl #2]\n\t"
 8774        "ldr	r7, [lr, r7, lsl #2]\n\t"
 8775        "ldr	r8, [lr, r8, lsl #2]\n\t"
 8776        "ldr	r9, [lr, r9, lsl #2]\n\t"
 8777        "eor	r8, r8, r6, ror #16\n\t"
 8778        "eor	r8, r8, r7, ror #8\n\t"
 8779        "eor	r8, r8, r9, ror #24\n\t"
 8780        "str	r8, [%[ks]], #4\n\t"
 8781#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8782#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8783        "lsl	r6, r5, #24\n\t"
 8784        "lsr	r6, r6, #24\n\t"
 8785#else
 8786        "uxtb	r6, r5\n\t"
 8787#endif
 8788#else
 8789        "ubfx	r6, r5, #0, #8\n\t"
 8790#endif
 8791#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8792#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8793        "lsl	r7, r5, #16\n\t"
 8794        "lsr	r7, r7, #24\n\t"
 8795#else
 8796        "uxtb	r7, r5, ror #8\n\t"
 8797#endif
 8798#else
 8799        "ubfx	r7, r5, #8, #8\n\t"
 8800#endif
 8801#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8802#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8803        "lsl	r8, r5, #8\n\t"
 8804        "lsr	r8, r8, #24\n\t"
 8805#else
 8806        "uxtb	r8, r5, ror #16\n\t"
 8807#endif
 8808#else
 8809        "ubfx	r8, r5, #16, #8\n\t"
 8810#endif
 8811        "lsr	r9, r5, #24\n\t"
 8812        "ldrb	r6, [r12, r6, lsl #2]\n\t"
 8813        "ldrb	r7, [r12, r7, lsl #2]\n\t"
 8814        "ldrb	r8, [r12, r8, lsl #2]\n\t"
 8815        "ldrb	r9, [r12, r9, lsl #2]\n\t"
 8816        "ldr	r6, [lr, r6, lsl #2]\n\t"
 8817        "ldr	r7, [lr, r7, lsl #2]\n\t"
 8818        "ldr	r8, [lr, r8, lsl #2]\n\t"
 8819        "ldr	r9, [lr, r9, lsl #2]\n\t"
 8820        "eor	r8, r8, r6, ror #16\n\t"
 8821        "eor	r8, r8, r7, ror #8\n\t"
 8822        "eor	r8, r8, r9, ror #24\n\t"
 8823        "str	r8, [%[ks]], #4\n\t"
 8824        "subs	r11, r11, #1\n\t"
 8825        "bne	L_AES_invert_key_mix_loop_%=\n\t"
 8826#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 8827        : [ks] "+r" (ks), [rounds] "+r" (rounds),
 8828          [L_AES_ARM32_te] "+r" (L_AES_ARM32_te_c),
 8829          [L_AES_ARM32_td] "+r" (L_AES_ARM32_td_c)
 8830        :
 8831#else
 8832        :
 8833        : [ks] "r" (ks), [rounds] "r" (rounds),
 8834          [L_AES_ARM32_te] "r" (L_AES_ARM32_te_c),
 8835          [L_AES_ARM32_td] "r" (L_AES_ARM32_td_c)
 8836#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 8837        : "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
 8838            "r10", "r11"
 8839    );
 8840}
 8841
 8842#endif /* HAVE_AES_DECRYPT */
 8843XALIGNED(8) static const word32 L_AES_ARM32_rcon[] = {
 8844    0x01000000, 0x02000000, 0x04000000, 0x08000000,
 8845    0x10000000, 0x20000000, 0x40000000, 0x80000000,
 8846    0x1b000000, 0x36000000
 8847};
 8848
 8849void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p,
 8850    unsigned char* ks_p);
 8851#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 8852WC_OMIT_FRAME_POINTER void AES_set_encrypt_key(const unsigned char* key_p,
 8853    word32 len_p, unsigned char* ks_p)
 8854#else
 8855WC_OMIT_FRAME_POINTER void AES_set_encrypt_key(const unsigned char* key,
 8856    word32 len, unsigned char* ks)
 8857#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 8858{
 8859#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 8860    register const unsigned char* key __asm__ ("r0") =
 8861        (const unsigned char*)key_p;
 8862    register word32 len __asm__ ("r1") = (word32)len_p;
 8863    register unsigned char* ks __asm__ ("r2") = (unsigned char*)ks_p;
 8864    register word32* L_AES_ARM32_te_c __asm__ ("r3") = (word32*)L_AES_ARM32_te;
 8865    register word32* L_AES_ARM32_rcon_c __asm__ ("r12") =
 8866        (word32*)&L_AES_ARM32_rcon;
 8867#else
 8868    register word32* L_AES_ARM32_te_c = (word32*)L_AES_ARM32_te;
 8869    register word32* L_AES_ARM32_rcon_c = (word32*)&L_AES_ARM32_rcon;
 8870#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 8871
 8872    __asm__ __volatile__ (
 8873        "push	{%[L_AES_ARM32_rcon]}\n\t"
 8874        "mov	r8, %[L_AES_ARM32_te]\n\t"
 8875        "mov	lr, %[L_AES_ARM32_rcon]\n\t"
 8876        "cmp	%[len], #0x80\n\t"
 8877        "beq	L_AES_set_encrypt_key_start_128_%=\n\t"
 8878        "cmp	%[len], #0xc0\n\t"
 8879        "beq	L_AES_set_encrypt_key_start_192_%=\n\t"
 8880        "ldr	r4, [%[key]]\n\t"
 8881        "ldr	r5, [%[key], #4]\n\t"
 8882        "ldr	r6, [%[key], #8]\n\t"
 8883        "ldr	r7, [%[key], #12]\n\t"
 8884#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8885        /* REV r4, r4 */
 8886        "eor	r3, r4, r4, ror #16\n\t"
 8887        "bic	r3, r3, #0xff0000\n\t"
 8888        "ror	r4, r4, #8\n\t"
 8889        "eor	r4, r4, r3, lsr #8\n\t"
 8890        /* REV r5, r5 */
 8891        "eor	r3, r5, r5, ror #16\n\t"
 8892        "bic	r3, r3, #0xff0000\n\t"
 8893        "ror	r5, r5, #8\n\t"
 8894        "eor	r5, r5, r3, lsr #8\n\t"
 8895        /* REV r6, r6 */
 8896        "eor	r3, r6, r6, ror #16\n\t"
 8897        "bic	r3, r3, #0xff0000\n\t"
 8898        "ror	r6, r6, #8\n\t"
 8899        "eor	r6, r6, r3, lsr #8\n\t"
 8900        /* REV r7, r7 */
 8901        "eor	r3, r7, r7, ror #16\n\t"
 8902        "bic	r3, r3, #0xff0000\n\t"
 8903        "ror	r7, r7, #8\n\t"
 8904        "eor	r7, r7, r3, lsr #8\n\t"
 8905#else
 8906        "rev	r4, r4\n\t"
 8907        "rev	r5, r5\n\t"
 8908        "rev	r6, r6\n\t"
 8909        "rev	r7, r7\n\t"
 8910#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
 8911        "stm	%[ks]!, {r4, r5, r6, r7}\n\t"
 8912        "ldr	r4, [%[key], #16]\n\t"
 8913        "ldr	r5, [%[key], #20]\n\t"
 8914        "ldr	r6, [%[key], #24]\n\t"
 8915        "ldr	r7, [%[key], #28]\n\t"
 8916#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8917        /* REV r4, r4 */
 8918        "eor	r3, r4, r4, ror #16\n\t"
 8919        "bic	r3, r3, #0xff0000\n\t"
 8920        "ror	r4, r4, #8\n\t"
 8921        "eor	r4, r4, r3, lsr #8\n\t"
 8922        /* REV r5, r5 */
 8923        "eor	r3, r5, r5, ror #16\n\t"
 8924        "bic	r3, r3, #0xff0000\n\t"
 8925        "ror	r5, r5, #8\n\t"
 8926        "eor	r5, r5, r3, lsr #8\n\t"
 8927        /* REV r6, r6 */
 8928        "eor	r3, r6, r6, ror #16\n\t"
 8929        "bic	r3, r3, #0xff0000\n\t"
 8930        "ror	r6, r6, #8\n\t"
 8931        "eor	r6, r6, r3, lsr #8\n\t"
 8932        /* REV r7, r7 */
 8933        "eor	r3, r7, r7, ror #16\n\t"
 8934        "bic	r3, r3, #0xff0000\n\t"
 8935        "ror	r7, r7, #8\n\t"
 8936        "eor	r7, r7, r3, lsr #8\n\t"
 8937#else
 8938        "rev	r4, r4\n\t"
 8939        "rev	r5, r5\n\t"
 8940        "rev	r6, r6\n\t"
 8941        "rev	r7, r7\n\t"
 8942#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
 8943        "stm	%[ks], {r4, r5, r6, r7}\n\t"
 8944        "sub	%[ks], %[ks], #16\n\t"
 8945        "mov	r12, #6\n\t"
 8946        "\n"
 8947    "L_AES_set_encrypt_key_loop_256_%=:\n\t"
 8948#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8949#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8950        "lsl	r4, r7, #24\n\t"
 8951        "lsr	r4, r4, #24\n\t"
 8952#else
 8953        "uxtb	r4, r7\n\t"
 8954#endif
 8955#else
 8956        "ubfx	r4, r7, #0, #8\n\t"
 8957#endif
 8958#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8959#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8960        "lsl	r5, r7, #16\n\t"
 8961        "lsr	r5, r5, #24\n\t"
 8962#else
 8963        "uxtb	r5, r7, ror #8\n\t"
 8964#endif
 8965#else
 8966        "ubfx	r5, r7, #8, #8\n\t"
 8967#endif
 8968#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8969#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8970        "lsl	r6, r7, #8\n\t"
 8971        "lsr	r6, r6, #24\n\t"
 8972#else
 8973        "uxtb	r6, r7, ror #16\n\t"
 8974#endif
 8975#else
 8976        "ubfx	r6, r7, #16, #8\n\t"
 8977#endif
 8978        "lsr	r7, r7, #24\n\t"
 8979        "ldrb	r4, [r8, r4, lsl #2]\n\t"
 8980        "ldrb	r5, [r8, r5, lsl #2]\n\t"
 8981        "ldrb	r6, [r8, r6, lsl #2]\n\t"
 8982        "ldrb	r7, [r8, r7, lsl #2]\n\t"
 8983        "eor	r3, r7, r4, lsl #8\n\t"
 8984        "eor	r3, r3, r5, lsl #16\n\t"
 8985        "eor	r3, r3, r6, lsl #24\n\t"
 8986        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
 8987        "eor	r4, r4, r3\n\t"
 8988        "ldm	lr!, {r3}\n\t"
 8989        "eor	r4, r4, r3\n\t"
 8990        "eor	r5, r5, r4\n\t"
 8991        "eor	r6, r6, r5\n\t"
 8992        "eor	r7, r7, r6\n\t"
 8993        "add	%[ks], %[ks], #16\n\t"
 8994        "stm	%[ks], {r4, r5, r6, r7}\n\t"
 8995        "sub	%[ks], %[ks], #16\n\t"
 8996        "mov	r3, r7\n\t"
 8997#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8998#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8999        "lsl	r4, r3, #16\n\t"
 9000        "lsr	r4, r4, #24\n\t"
 9001#else
 9002        "uxtb	r4, r3, ror #8\n\t"
 9003#endif
 9004#else
 9005        "ubfx	r4, r3, #8, #8\n\t"
 9006#endif
 9007#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9008#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9009        "lsl	r5, r3, #8\n\t"
 9010        "lsr	r5, r5, #24\n\t"
 9011#else
 9012        "uxtb	r5, r3, ror #16\n\t"
 9013#endif
 9014#else
 9015        "ubfx	r5, r3, #16, #8\n\t"
 9016#endif
 9017        "lsr	r6, r3, #24\n\t"
 9018#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9019#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9020        "lsl	r3, r3, #24\n\t"
 9021        "lsr	r3, r3, #24\n\t"
 9022#else
 9023        "uxtb	r3, r3\n\t"
 9024#endif
 9025#else
 9026        "ubfx	r3, r3, #0, #8\n\t"
 9027#endif
 9028        "ldrb	r4, [r8, r4, lsl #2]\n\t"
 9029        "ldrb	r6, [r8, r6, lsl #2]\n\t"
 9030        "ldrb	r5, [r8, r5, lsl #2]\n\t"
 9031        "ldrb	r3, [r8, r3, lsl #2]\n\t"
 9032        "eor	r3, r3, r4, lsl #8\n\t"
 9033        "eor	r3, r3, r5, lsl #16\n\t"
 9034        "eor	r3, r3, r6, lsl #24\n\t"
 9035        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
 9036        "eor	r4, r4, r3\n\t"
 9037        "eor	r5, r5, r4\n\t"
 9038        "eor	r6, r6, r5\n\t"
 9039        "eor	r7, r7, r6\n\t"
 9040        "add	%[ks], %[ks], #16\n\t"
 9041        "stm	%[ks], {r4, r5, r6, r7}\n\t"
 9042        "sub	%[ks], %[ks], #16\n\t"
 9043        "subs	r12, r12, #1\n\t"
 9044        "bne	L_AES_set_encrypt_key_loop_256_%=\n\t"
 9045#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9046#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9047        "lsl	r4, r7, #24\n\t"
 9048        "lsr	r4, r4, #24\n\t"
 9049#else
 9050        "uxtb	r4, r7\n\t"
 9051#endif
 9052#else
 9053        "ubfx	r4, r7, #0, #8\n\t"
 9054#endif
 9055#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9056#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9057        "lsl	r5, r7, #16\n\t"
 9058        "lsr	r5, r5, #24\n\t"
 9059#else
 9060        "uxtb	r5, r7, ror #8\n\t"
 9061#endif
 9062#else
 9063        "ubfx	r5, r7, #8, #8\n\t"
 9064#endif
 9065#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9066#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9067        "lsl	r6, r7, #8\n\t"
 9068        "lsr	r6, r6, #24\n\t"
 9069#else
 9070        "uxtb	r6, r7, ror #16\n\t"
 9071#endif
 9072#else
 9073        "ubfx	r6, r7, #16, #8\n\t"
 9074#endif
 9075        "lsr	r7, r7, #24\n\t"
 9076        "ldrb	r4, [r8, r4, lsl #2]\n\t"
 9077        "ldrb	r5, [r8, r5, lsl #2]\n\t"
 9078        "ldrb	r6, [r8, r6, lsl #2]\n\t"
 9079        "ldrb	r7, [r8, r7, lsl #2]\n\t"
 9080        "eor	r3, r7, r4, lsl #8\n\t"
 9081        "eor	r3, r3, r5, lsl #16\n\t"
 9082        "eor	r3, r3, r6, lsl #24\n\t"
 9083        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
 9084        "eor	r4, r4, r3\n\t"
 9085        "ldm	lr!, {r3}\n\t"
 9086        "eor	r4, r4, r3\n\t"
 9087        "eor	r5, r5, r4\n\t"
 9088        "eor	r6, r6, r5\n\t"
 9089        "eor	r7, r7, r6\n\t"
 9090        "add	%[ks], %[ks], #16\n\t"
 9091        "stm	%[ks], {r4, r5, r6, r7}\n\t"
 9092        "sub	%[ks], %[ks], #16\n\t"
 9093        "b	L_AES_set_encrypt_key_end_%=\n\t"
 9094        "\n"
 9095    "L_AES_set_encrypt_key_start_192_%=:\n\t"
 9096        "ldr	r4, [%[key]]\n\t"
 9097        "ldr	r5, [%[key], #4]\n\t"
 9098        "ldr	r6, [%[key], #8]\n\t"
 9099        "ldr	r7, [%[key], #12]\n\t"
 9100        "ldr	%[len], [%[key], #20]\n\t"
 9101        "ldr	%[key], [%[key], #16]\n\t"
 9102#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9103        /* REV r4, r4 */
 9104        "eor	r3, r4, r4, ror #16\n\t"
 9105        "bic	r3, r3, #0xff0000\n\t"
 9106        "ror	r4, r4, #8\n\t"
 9107        "eor	r4, r4, r3, lsr #8\n\t"
 9108        /* REV r5, r5 */
 9109        "eor	r3, r5, r5, ror #16\n\t"
 9110        "bic	r3, r3, #0xff0000\n\t"
 9111        "ror	r5, r5, #8\n\t"
 9112        "eor	r5, r5, r3, lsr #8\n\t"
 9113        /* REV r6, r6 */
 9114        "eor	r3, r6, r6, ror #16\n\t"
 9115        "bic	r3, r3, #0xff0000\n\t"
 9116        "ror	r6, r6, #8\n\t"
 9117        "eor	r6, r6, r3, lsr #8\n\t"
 9118        /* REV r7, r7 */
 9119        "eor	r3, r7, r7, ror #16\n\t"
 9120        "bic	r3, r3, #0xff0000\n\t"
 9121        "ror	r7, r7, #8\n\t"
 9122        "eor	r7, r7, r3, lsr #8\n\t"
 9123        /* REV r0, r0 */
 9124        "eor	r3, %[key], %[key], ror #16\n\t"
 9125        "bic	r3, r3, #0xff0000\n\t"
 9126        "ror	%[key], %[key], #8\n\t"
 9127        "eor	%[key], %[key], r3, lsr #8\n\t"
 9128        /* REV r1, r1 */
 9129        "eor	r3, %[len], %[len], ror #16\n\t"
 9130        "bic	r3, r3, #0xff0000\n\t"
 9131        "ror	%[len], %[len], #8\n\t"
 9132        "eor	%[len], %[len], r3, lsr #8\n\t"
 9133#else
 9134        "rev	r4, r4\n\t"
 9135        "rev	r5, r5\n\t"
 9136        "rev	r6, r6\n\t"
 9137        "rev	r7, r7\n\t"
 9138        "rev	%[key], %[key]\n\t"
 9139        "rev	%[len], %[len]\n\t"
 9140#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
 9141        "stm	%[ks], {r4, r5, r6, r7}\n\t"
 9142#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9143        "str	%[key], [%[ks], #16]\n\t"
 9144        "str	%[len], [%[ks], #20]\n\t"
 9145#else
 9146        "strd	%[key], %[len], [%[ks], #16]\n\t"
 9147#endif
 9148        "mov	r7, %[len]\n\t"
 9149        "mov	r12, #7\n\t"
 9150        "\n"
 9151    "L_AES_set_encrypt_key_loop_192_%=:\n\t"
 9152#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9153#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9154        "lsl	r0, r7, #24\n\t"
 9155        "lsr	r0, r0, #24\n\t"
 9156#else
 9157        "uxtb	r0, r7\n\t"
 9158#endif
 9159#else
 9160        "ubfx	r0, r7, #0, #8\n\t"
 9161#endif
 9162#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9164        "lsl	r1, r7, #16\n\t"
 9165        "lsr	r1, r1, #24\n\t"
 9166#else
 9167        "uxtb	r1, r7, ror #8\n\t"
 9168#endif
 9169#else
 9170        "ubfx	r1, r7, #8, #8\n\t"
 9171#endif
 9172#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9173#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9174        "lsl	r4, r7, #8\n\t"
 9175        "lsr	r4, r4, #24\n\t"
 9176#else
 9177        "uxtb	r4, r7, ror #16\n\t"
 9178#endif
 9179#else
 9180        "ubfx	r4, r7, #16, #8\n\t"
 9181#endif
 9182        "lsr	r7, r7, #24\n\t"
 9183        "ldrb	r0, [r8, r0, lsl #2]\n\t"
 9184        "ldrb	r1, [r8, r1, lsl #2]\n\t"
 9185        "ldrb	r4, [r8, r4, lsl #2]\n\t"
 9186        "ldrb	r7, [r8, r7, lsl #2]\n\t"
 9187        "eor	r3, r7, r0, lsl #8\n\t"
 9188        "eor	r3, r3, r1, lsl #16\n\t"
 9189        "eor	r3, r3, r4, lsl #24\n\t"
 9190        "ldm	%[ks]!, {r0, r1, r4, r5, r6, r7}\n\t"
 9191        "eor	r0, r0, r3\n\t"
 9192        "ldm	lr!, {r3}\n\t"
 9193        "eor	r0, r0, r3\n\t"
 9194        "eor	r1, r1, r0\n\t"
 9195        "eor	r4, r4, r1\n\t"
 9196        "eor	r5, r5, r4\n\t"
 9197        "eor	r6, r6, r5\n\t"
 9198        "eor	r7, r7, r6\n\t"
 9199        "stm	%[ks], {r0, r1, r4, r5, r6, r7}\n\t"
 9200        "subs	r12, r12, #1\n\t"
 9201        "bne	L_AES_set_encrypt_key_loop_192_%=\n\t"
 9202#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9203#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9204        "lsl	r0, r7, #24\n\t"
 9205        "lsr	r0, r0, #24\n\t"
 9206#else
 9207        "uxtb	r0, r7\n\t"
 9208#endif
 9209#else
 9210        "ubfx	r0, r7, #0, #8\n\t"
 9211#endif
 9212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9213#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9214        "lsl	r1, r7, #16\n\t"
 9215        "lsr	r1, r1, #24\n\t"
 9216#else
 9217        "uxtb	r1, r7, ror #8\n\t"
 9218#endif
 9219#else
 9220        "ubfx	r1, r7, #8, #8\n\t"
 9221#endif
 9222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9223#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9224        "lsl	r4, r7, #8\n\t"
 9225        "lsr	r4, r4, #24\n\t"
 9226#else
 9227        "uxtb	r4, r7, ror #16\n\t"
 9228#endif
 9229#else
 9230        "ubfx	r4, r7, #16, #8\n\t"
 9231#endif
 9232        "lsr	r7, r7, #24\n\t"
 9233        "ldrb	r0, [r8, r0, lsl #2]\n\t"
 9234        "ldrb	r1, [r8, r1, lsl #2]\n\t"
 9235        "ldrb	r4, [r8, r4, lsl #2]\n\t"
 9236        "ldrb	r7, [r8, r7, lsl #2]\n\t"
 9237        "eor	r3, r7, r0, lsl #8\n\t"
 9238        "eor	r3, r3, r1, lsl #16\n\t"
 9239        "eor	r3, r3, r4, lsl #24\n\t"
 9240        "ldm	%[ks]!, {r0, r1, r4, r5, r6, r7}\n\t"
 9241        "eor	r0, r0, r3\n\t"
 9242        "ldm	lr!, {r3}\n\t"
 9243        "eor	r0, r0, r3\n\t"
 9244        "eor	r1, r1, r0\n\t"
 9245        "eor	r4, r4, r1\n\t"
 9246        "eor	r5, r5, r4\n\t"
 9247        "stm	%[ks], {r0, r1, r4, r5}\n\t"
 9248        "b	L_AES_set_encrypt_key_end_%=\n\t"
 9249        "\n"
 9250    "L_AES_set_encrypt_key_start_128_%=:\n\t"
 9251        "ldr	r4, [%[key]]\n\t"
 9252        "ldr	r5, [%[key], #4]\n\t"
 9253        "ldr	r6, [%[key], #8]\n\t"
 9254        "ldr	r7, [%[key], #12]\n\t"
 9255#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9256        /* REV r4, r4 */
 9257        "eor	r3, r4, r4, ror #16\n\t"
 9258        "bic	r3, r3, #0xff0000\n\t"
 9259        "ror	r4, r4, #8\n\t"
 9260        "eor	r4, r4, r3, lsr #8\n\t"
 9261        /* REV r5, r5 */
 9262        "eor	r3, r5, r5, ror #16\n\t"
 9263        "bic	r3, r3, #0xff0000\n\t"
 9264        "ror	r5, r5, #8\n\t"
 9265        "eor	r5, r5, r3, lsr #8\n\t"
 9266        /* REV r6, r6 */
 9267        "eor	r3, r6, r6, ror #16\n\t"
 9268        "bic	r3, r3, #0xff0000\n\t"
 9269        "ror	r6, r6, #8\n\t"
 9270        "eor	r6, r6, r3, lsr #8\n\t"
 9271        /* REV r7, r7 */
 9272        "eor	r3, r7, r7, ror #16\n\t"
 9273        "bic	r3, r3, #0xff0000\n\t"
 9274        "ror	r7, r7, #8\n\t"
 9275        "eor	r7, r7, r3, lsr #8\n\t"
 9276#else
 9277        "rev	r4, r4\n\t"
 9278        "rev	r5, r5\n\t"
 9279        "rev	r6, r6\n\t"
 9280        "rev	r7, r7\n\t"
 9281#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
 9282        "stm	%[ks], {r4, r5, r6, r7}\n\t"
 9283        "mov	r12, #10\n\t"
 9284        "\n"
 9285    "L_AES_set_encrypt_key_loop_128_%=:\n\t"
 9286#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9287#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9288        "lsl	r4, r7, #24\n\t"
 9289        "lsr	r4, r4, #24\n\t"
 9290#else
 9291        "uxtb	r4, r7\n\t"
 9292#endif
 9293#else
 9294        "ubfx	r4, r7, #0, #8\n\t"
 9295#endif
 9296#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9297#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9298        "lsl	r5, r7, #16\n\t"
 9299        "lsr	r5, r5, #24\n\t"
 9300#else
 9301        "uxtb	r5, r7, ror #8\n\t"
 9302#endif
 9303#else
 9304        "ubfx	r5, r7, #8, #8\n\t"
 9305#endif
 9306#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9307#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9308        "lsl	r6, r7, #8\n\t"
 9309        "lsr	r6, r6, #24\n\t"
 9310#else
 9311        "uxtb	r6, r7, ror #16\n\t"
 9312#endif
 9313#else
 9314        "ubfx	r6, r7, #16, #8\n\t"
 9315#endif
 9316        "lsr	r7, r7, #24\n\t"
 9317        "ldrb	r4, [r8, r4, lsl #2]\n\t"
 9318        "ldrb	r5, [r8, r5, lsl #2]\n\t"
 9319        "ldrb	r6, [r8, r6, lsl #2]\n\t"
 9320        "ldrb	r7, [r8, r7, lsl #2]\n\t"
 9321        "eor	r3, r7, r4, lsl #8\n\t"
 9322        "eor	r3, r3, r5, lsl #16\n\t"
 9323        "eor	r3, r3, r6, lsl #24\n\t"
 9324        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
 9325        "eor	r4, r4, r3\n\t"
 9326        "ldm	lr!, {r3}\n\t"
 9327        "eor	r4, r4, r3\n\t"
 9328        "eor	r5, r5, r4\n\t"
 9329        "eor	r6, r6, r5\n\t"
 9330        "eor	r7, r7, r6\n\t"
 9331        "stm	%[ks], {r4, r5, r6, r7}\n\t"
 9332        "subs	r12, r12, #1\n\t"
 9333        "bne	L_AES_set_encrypt_key_loop_128_%=\n\t"
 9334        "\n"
 9335    "L_AES_set_encrypt_key_end_%=:\n\t"
 9336        "pop	{%[L_AES_ARM32_rcon]}\n\t"
 9337#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 9338        : [key] "+r" (key), [len] "+r" (len), [ks] "+r" (ks),
 9339          [L_AES_ARM32_te] "+r" (L_AES_ARM32_te_c),
 9340          [L_AES_ARM32_rcon] "+r" (L_AES_ARM32_rcon_c)
 9341        :
 9342#else
 9343        :
 9344        : [key] "r" (key), [len] "r" (len), [ks] "r" (ks),
 9345          [L_AES_ARM32_te] "r" (L_AES_ARM32_te_c),
 9346          [L_AES_ARM32_rcon] "r" (L_AES_ARM32_rcon_c)
 9347#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 9348        : "memory", "cc", "lr", "r4", "r5", "r6", "r7", "r8"
 9349    );
 9350}
 9351
 9352#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
 9353void AES_encrypt_block(const word32* te_p, int nr_p, int len_p,
 9354    const word32* ks_p);
 9355#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 9356WC_OMIT_FRAME_POINTER void AES_encrypt_block(const word32* te_p, int nr_p,
 9357    int len_p, const word32* ks_p)
 9358#else
 9359WC_OMIT_FRAME_POINTER void AES_encrypt_block(const word32* te, int nr, int len,
 9360    const word32* ks)
 9361#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 9362{
 9363#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
 9364    register const word32* te __asm__ ("r0") = (const word32*)te_p;
 9365    register int nr __asm__ ("r1") = (int)nr_p;
 9366    register int len __asm__ ("r2") = (int)len_p;
 9367    register const word32* ks __asm__ ("r3") = (const word32*)ks_p;
 9368#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
 9369
 9370    __asm__ __volatile__ (
 9371        "\n"
 9372    "L_AES_encrypt_block_nr_%=:\n\t"
 9373#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9374#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9375        "lsl	r8, r5, #8\n\t"
 9376        "lsr	r8, r8, #24\n\t"
 9377#else
 9378        "uxtb	r8, r5, ror #16\n\t"
 9379#endif
 9380#else
 9381        "ubfx	r8, r5, #16, #8\n\t"
 9382#endif
 9383        "lsr	r11, r4, #24\n\t"
 9384#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9385#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9386        "lsl	lr, r6, #16\n\t"
 9387        "lsr	lr, lr, #24\n\t"
 9388#else
 9389        "uxtb	lr, r6, ror #8\n\t"
 9390#endif
 9391#else
 9392        "ubfx	lr, r6, #8, #8\n\t"
 9393#endif
 9394#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9395#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9396        "lsl	r2, r7, #24\n\t"
 9397        "lsr	r2, r2, #24\n\t"
 9398#else
 9399        "uxtb	r2, r7\n\t"
 9400#endif
 9401#else
 9402        "ubfx	r2, r7, #0, #8\n\t"
 9403#endif
 9404        "ldr	r8, [%[te], r8, lsl #2]\n\t"
 9405        "ldr	r11, [%[te], r11, lsl #2]\n\t"
 9406        "ldr	lr, [%[te], lr, lsl #2]\n\t"
 9407        "ldr	r2, [%[te], r2, lsl #2]\n\t"
 9408#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9409#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9410        "lsl	r9, r6, #8\n\t"
 9411        "lsr	r9, r9, #24\n\t"
 9412#else
 9413        "uxtb	r9, r6, ror #16\n\t"
 9414#endif
 9415#else
 9416        "ubfx	r9, r6, #16, #8\n\t"
 9417#endif
 9418        "eor	r8, r8, r11, ror #24\n\t"
 9419        "lsr	r11, r5, #24\n\t"
 9420        "eor	r8, r8, lr, ror #8\n\t"
 9421#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9422#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9423        "lsl	lr, r7, #16\n\t"
 9424        "lsr	lr, lr, #24\n\t"
 9425#else
 9426        "uxtb	lr, r7, ror #8\n\t"
 9427#endif
 9428#else
 9429        "ubfx	lr, r7, #8, #8\n\t"
 9430#endif
 9431        "eor	r8, r8, r2, ror #16\n\t"
 9432#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9433#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9434        "lsl	r2, r4, #24\n\t"
 9435        "lsr	r2, r2, #24\n\t"
 9436#else
 9437        "uxtb	r2, r4\n\t"
 9438#endif
 9439#else
 9440        "ubfx	r2, r4, #0, #8\n\t"
 9441#endif
 9442        "ldr	r9, [%[te], r9, lsl #2]\n\t"
 9443        "ldr	r11, [%[te], r11, lsl #2]\n\t"
 9444        "ldr	lr, [%[te], lr, lsl #2]\n\t"
 9445        "ldr	r2, [%[te], r2, lsl #2]\n\t"
 9446#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9447#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9448        "lsl	r10, r7, #8\n\t"
 9449        "lsr	r10, r10, #24\n\t"
 9450#else
 9451        "uxtb	r10, r7, ror #16\n\t"
 9452#endif
 9453#else
 9454        "ubfx	r10, r7, #16, #8\n\t"
 9455#endif
 9456        "eor	r9, r9, r11, ror #24\n\t"
 9457        "lsr	r11, r6, #24\n\t"
 9458        "eor	r9, r9, lr, ror #8\n\t"
 9459#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9460#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9461        "lsl	lr, r4, #16\n\t"
 9462        "lsr	lr, lr, #24\n\t"
 9463#else
 9464        "uxtb	lr, r4, ror #8\n\t"
 9465#endif
 9466#else
 9467        "ubfx	lr, r4, #8, #8\n\t"
 9468#endif
 9469        "eor	r9, r9, r2, ror #16\n\t"
 9470#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9471#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9472        "lsl	r2, r5, #24\n\t"
 9473        "lsr	r2, r2, #24\n\t"
 9474#else
 9475        "uxtb	r2, r5\n\t"
 9476#endif
 9477#else
 9478        "ubfx	r2, r5, #0, #8\n\t"
 9479#endif
 9480        "ldr	r10, [%[te], r10, lsl #2]\n\t"
 9481        "ldr	r11, [%[te], r11, lsl #2]\n\t"
 9482        "ldr	lr, [%[te], lr, lsl #2]\n\t"
 9483        "ldr	r2, [%[te], r2, lsl #2]\n\t"
 9484#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9485#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9486        "lsl	r6, r6, #24\n\t"
 9487        "lsr	r6, r6, #24\n\t"
 9488#else
 9489        "uxtb	r6, r6\n\t"
 9490#endif
 9491#else
 9492        "ubfx	r6, r6, #0, #8\n\t"
 9493#endif
 9494        "eor	r10, r10, r11, ror #24\n\t"
 9495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9496#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9497        "lsl	r11, r4, #8\n\t"
 9498        "lsr	r11, r11, #24\n\t"
 9499#else
 9500        "uxtb	r11, r4, ror #16\n\t"
 9501#endif
 9502#else
 9503        "ubfx	r11, r4, #16, #8\n\t"
 9504#endif
 9505        "eor	r10, r10, lr, ror #8\n\t"
 9506        "lsr	lr, r7, #24\n\t"
 9507        "eor	r10, r10, r2, ror #16\n\t"
 9508#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9509#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9510        "lsl	r2, r5, #16\n\t"
 9511        "lsr	r2, r2, #24\n\t"
 9512#else
 9513        "uxtb	r2, r5, ror #8\n\t"
 9514#endif
 9515#else
 9516        "ubfx	r2, r5, #8, #8\n\t"
 9517#endif
 9518        "ldr	r6, [%[te], r6, lsl #2]\n\t"
 9519        "ldr	lr, [%[te], lr, lsl #2]\n\t"
 9520        "ldr	r11, [%[te], r11, lsl #2]\n\t"
 9521        "ldr	r2, [%[te], r2, lsl #2]\n\t"
 9522        "eor	lr, lr, r6, ror #24\n\t"
 9523        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
 9524        "eor	r11, r11, lr, ror #24\n\t"
 9525        "eor	r11, r11, r2, ror #8\n\t"
 9526        /*   XOR in Key Schedule */
 9527        "eor	r8, r8, r4\n\t"
 9528        "eor	r9, r9, r5\n\t"
 9529        "eor	r10, r10, r6\n\t"
 9530        "eor	r11, r11, r7\n\t"
 9531#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9532#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9533        "lsl	r4, r9, #8\n\t"
 9534        "lsr	r4, r4, #24\n\t"
 9535#else
 9536        "uxtb	r4, r9, ror #16\n\t"
 9537#endif
 9538#else
 9539        "ubfx	r4, r9, #16, #8\n\t"
 9540#endif
 9541        "lsr	r7, r8, #24\n\t"
 9542#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9543#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9544        "lsl	lr, r10, #16\n\t"
 9545        "lsr	lr, lr, #24\n\t"
 9546#else
 9547        "uxtb	lr, r10, ror #8\n\t"
 9548#endif
 9549#else
 9550        "ubfx	lr, r10, #8, #8\n\t"
 9551#endif
 9552#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9553#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9554        "lsl	r2, r11, #24\n\t"
 9555        "lsr	r2, r2, #24\n\t"
 9556#else
 9557        "uxtb	r2, r11\n\t"
 9558#endif
 9559#else
 9560        "ubfx	r2, r11, #0, #8\n\t"
 9561#endif
 9562        "ldr	r4, [%[te], r4, lsl #2]\n\t"
 9563        "ldr	r7, [%[te], r7, lsl #2]\n\t"
 9564        "ldr	lr, [%[te], lr, lsl #2]\n\t"
 9565        "ldr	r2, [%[te], r2, lsl #2]\n\t"
 9566#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9567#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9568        "lsl	r5, r10, #8\n\t"
 9569        "lsr	r5, r5, #24\n\t"
 9570#else
 9571        "uxtb	r5, r10, ror #16\n\t"
 9572#endif
 9573#else
 9574        "ubfx	r5, r10, #16, #8\n\t"
 9575#endif
 9576        "eor	r4, r4, r7, ror #24\n\t"
 9577        "lsr	r7, r9, #24\n\t"
 9578        "eor	r4, r4, lr, ror #8\n\t"
 9579#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9580#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9581        "lsl	lr, r11, #16\n\t"
 9582        "lsr	lr, lr, #24\n\t"
 9583#else
 9584        "uxtb	lr, r11, ror #8\n\t"
 9585#endif
 9586#else
 9587        "ubfx	lr, r11, #8, #8\n\t"
 9588#endif
 9589        "eor	r4, r4, r2, ror #16\n\t"
 9590#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9591#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9592        "lsl	r2, r8, #24\n\t"
 9593        "lsr	r2, r2, #24\n\t"
 9594#else
 9595        "uxtb	r2, r8\n\t"
 9596#endif
 9597#else
 9598        "ubfx	r2, r8, #0, #8\n\t"
 9599#endif
 9600        "ldr	r5, [%[te], r5, lsl #2]\n\t"
 9601        "ldr	r7, [%[te], r7, lsl #2]\n\t"
 9602        "ldr	lr, [%[te], lr, lsl #2]\n\t"
 9603        "ldr	r2, [%[te], r2, lsl #2]\n\t"
 9604#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9605#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9606        "lsl	r6, r11, #8\n\t"
 9607        "lsr	r6, r6, #24\n\t"
 9608#else
 9609        "uxtb	r6, r11, ror #16\n\t"
 9610#endif
 9611#else
 9612        "ubfx	r6, r11, #16, #8\n\t"
 9613#endif
 9614        "eor	r5, r5, r7, ror #24\n\t"
 9615        "lsr	r7, r10, #24\n\t"
 9616        "eor	r5, r5, lr, ror #8\n\t"
 9617#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9618#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9619        "lsl	lr, r8, #16\n\t"
 9620        "lsr	lr, lr, #24\n\t"
 9621#else
 9622        "uxtb	lr, r8, ror #8\n\t"
 9623#endif
 9624#else
 9625        "ubfx	lr, r8, #8, #8\n\t"
 9626#endif
 9627        "eor	r5, r5, r2, ror #16\n\t"
 9628#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9629#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9630        "lsl	r2, r9, #24\n\t"
 9631        "lsr	r2, r2, #24\n\t"
 9632#else
 9633        "uxtb	r2, r9\n\t"
 9634#endif
 9635#else
 9636        "ubfx	r2, r9, #0, #8\n\t"
 9637#endif
 9638        "ldr	r6, [%[te], r6, lsl #2]\n\t"
 9639        "ldr	r7, [%[te], r7, lsl #2]\n\t"
 9640        "ldr	lr, [%[te], lr, lsl #2]\n\t"
 9641        "ldr	r2, [%[te], r2, lsl #2]\n\t"
 9642#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9643#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9644        "lsl	r10, r10, #24\n\t"
 9645        "lsr	r10, r10, #24\n\t"
 9646#else
 9647        "uxtb	r10, r10\n\t"
 9648#endif
 9649#else
 9650        "ubfx	r10, r10, #0, #8\n\t"
 9651#endif
 9652        "eor	r6, r6, r7, ror #24\n\t"
 9653#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9654#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9655        "lsl	r7, r8, #8\n\t"
 9656        "lsr	r7, r7, #24\n\t"
 9657#else
 9658        "uxtb	r7, r8, ror #16\n\t"
 9659#endif
 9660#else
 9661        "ubfx	r7, r8, #16, #8\n\t"
 9662#endif
 9663        "eor	r6, r6, lr, ror #8\n\t"
 9664        "lsr	lr, r11, #24\n\t"
 9665        "eor	r6, r6, r2, ror #16\n\t"
 9666#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9667#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9668        "lsl	r2, r9, #16\n\t"
 9669        "lsr	r2, r2, #24\n\t"
 9670#else
 9671        "uxtb	r2, r9, ror #8\n\t"
 9672#endif
 9673#else
 9674        "ubfx	r2, r9, #8, #8\n\t"
 9675#endif
 9676        "ldr	r10, [%[te], r10, lsl #2]\n\t"
 9677        "ldr	lr, [%[te], lr, lsl #2]\n\t"
 9678        "ldr	r7, [%[te], r7, lsl #2]\n\t"
 9679        "ldr	r2, [%[te], r2, lsl #2]\n\t"
 9680        "eor	lr, lr, r10, ror #24\n\t"
 9681        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
 9682        "eor	r7, r7, lr, ror #24\n\t"
 9683        "eor	r7, r7, r2, ror #8\n\t"
 9684        /*   XOR in Key Schedule */
 9685        "eor	r4, r4, r8\n\t"
 9686        "eor	r5, r5, r9\n\t"
 9687        "eor	r6, r6, r10\n\t"
 9688        "eor	r7, r7, r11\n\t"
 9689        "subs	%[nr], %[nr], #1\n\t"
 9690        "bne	L_AES_encrypt_block_nr_%=\n\t"
 9691#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9692#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9693        "lsl	r8, r5, #8\n\t"
 9694        "lsr	r8, r8, #24\n\t"
 9695#else
 9696        "uxtb	r8, r5, ror #16\n\t"
 9697#endif
 9698#else
 9699        "ubfx	r8, r5, #16, #8\n\t"
 9700#endif
 9701        "lsr	r11, r4, #24\n\t"
 9702#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9703#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9704        "lsl	lr, r6, #16\n\t"
 9705        "lsr	lr, lr, #24\n\t"
 9706#else
 9707        "uxtb	lr, r6, ror #8\n\t"
 9708#endif
 9709#else
 9710        "ubfx	lr, r6, #8, #8\n\t"
 9711#endif
 9712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9713#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9714        "lsl	r2, r7, #24\n\t"
 9715        "lsr	r2, r2, #24\n\t"
 9716#else
 9717        "uxtb	r2, r7\n\t"
 9718#endif
 9719#else
 9720        "ubfx	r2, r7, #0, #8\n\t"
 9721#endif
 9722        "ldr	r8, [%[te], r8, lsl #2]\n\t"
 9723        "ldr	r11, [%[te], r11, lsl #2]\n\t"
 9724        "ldr	lr, [%[te], lr, lsl #2]\n\t"
 9725        "ldr	r2, [%[te], r2, lsl #2]\n\t"
 9726#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9727#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9728        "lsl	r9, r6, #8\n\t"
 9729        "lsr	r9, r9, #24\n\t"
 9730#else
 9731        "uxtb	r9, r6, ror #16\n\t"
 9732#endif
 9733#else
 9734        "ubfx	r9, r6, #16, #8\n\t"
 9735#endif
 9736        "eor	r8, r8, r11, ror #24\n\t"
 9737        "lsr	r11, r5, #24\n\t"
 9738        "eor	r8, r8, lr, ror #8\n\t"
 9739#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9740#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9741        "lsl	lr, r7, #16\n\t"
 9742        "lsr	lr, lr, #24\n\t"
 9743#else
 9744        "uxtb	lr, r7, ror #8\n\t"
 9745#endif
 9746#else
 9747        "ubfx	lr, r7, #8, #8\n\t"
 9748#endif
 9749        "eor	r8, r8, r2, ror #16\n\t"
 9750#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9751#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9752        "lsl	r2, r4, #24\n\t"
 9753        "lsr	r2, r2, #24\n\t"
 9754#else
 9755        "uxtb	r2, r4\n\t"
 9756#endif
 9757#else
 9758        "ubfx	r2, r4, #0, #8\n\t"
 9759#endif
 9760        "ldr	r9, [%[te], r9, lsl #2]\n\t"
 9761        "ldr	r11, [%[te], r11, lsl #2]\n\t"
 9762        "ldr	lr, [%[te], lr, lsl #2]\n\t"
 9763        "ldr	r2, [%[te], r2, lsl #2]\n\t"
 9764#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9765#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9766        "lsl	r10, r7, #8\n\t"
 9767        "lsr	r10, r10, #24\n\t"
 9768#else
 9769        "uxtb	r10, r7, ror #16\n\t"
 9770#endif
 9771#else
 9772        "ubfx	r10, r7, #16, #8\n\t"
 9773#endif
 9774        "eor	r9, r9, r11, ror #24\n\t"
 9775        "lsr	r11, r6, #24\n\t"
 9776        "eor	r9, r9, lr, ror #8\n\t"
 9777#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9778#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9779        "lsl	lr, r4, #16\n\t"
 9780        "lsr	lr, lr, #24\n\t"
 9781#else
 9782        "uxtb	lr, r4, ror #8\n\t"
 9783#endif
 9784#else
 9785        "ubfx	lr, r4, #8, #8\n\t"
 9786#endif
 9787        "eor	r9, r9, r2, ror #16\n\t"
 9788#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9789#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9790        "lsl	r2, r5, #24\n\t"
 9791        "lsr	r2, r2, #24\n\t"
 9792#else
 9793        "uxtb	r2, r5\n\t"
 9794#endif
 9795#else
 9796        "ubfx	r2, r5, #0, #8\n\t"
 9797#endif
 9798        "ldr	r10, [%[te], r10, lsl #2]\n\t"
 9799        "ldr	r11, [%[te], r11, lsl #2]\n\t"
 9800        "ldr	lr, [%[te], lr, lsl #2]\n\t"
 9801        "ldr	r2, [%[te], r2, lsl #2]\n\t"
 9802#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9803#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9804        "lsl	r6, r6, #24\n\t"
 9805        "lsr	r6, r6, #24\n\t"
 9806#else
 9807        "uxtb	r6, r6\n\t"
 9808#endif
 9809#else
 9810        "ubfx	r6, r6, #0, #8\n\t"
 9811#endif
 9812        "eor	r10, r10, r11, ror #24\n\t"
 9813#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9814#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9815        "lsl	r11, r4, #8\n\t"
 9816        "lsr	r11, r11, #24\n\t"
 9817#else
 9818        "uxtb	r11, r4, ror #16\n\t"
 9819#endif
 9820#else
 9821        "ubfx	r11, r4, #16, #8\n\t"
 9822#endif
 9823        "eor	r10, r10, lr, ror #8\n\t"
 9824        "lsr	lr, r7, #24\n\t"
 9825        "eor	r10, r10, r2, ror #16\n\t"
 9826#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9827#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9828        "lsl	r2, r5, #16\n\t"
 9829        "lsr	r2, r2, #24\n\t"
 9830#else
 9831        "uxtb	r2, r5, ror #8\n\t"
 9832#endif
 9833#else
 9834        "ubfx	r2, r5, #8, #8\n\t"
 9835#endif
 9836        "ldr	r6, [%[te], r6, lsl #2]\n\t"
 9837        "ldr	lr, [%[te], lr, lsl #2]\n\t"
 9838        "ldr	r11, [%[te], r11, lsl #2]\n\t"
 9839        "ldr	r2, [%[te], r2, lsl #2]\n\t"
 9840        "eor	lr, lr, r6, ror #24\n\t"
 9841        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
 9842        "eor	r11, r11, lr, ror #24\n\t"
 9843        "eor	r11, r11, r2, ror #8\n\t"
 9844        /*   XOR in Key Schedule */
 9845        "eor	r8, r8, r4\n\t"
 9846        "eor	r9, r9, r5\n\t"
 9847        "eor	r10, r10, r6\n\t"
 9848        "eor	r11, r11, r7\n\t"
 9849#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9850#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9851        "lsl	r4, r11, #24\n\t"
 9852        "lsr	r4, r4, #24\n\t"
 9853#else
 9854        "uxtb	r4, r11\n\t"
 9855#endif
 9856#else
 9857        "ubfx	r4, r11, #0, #8\n\t"
 9858#endif
 9859#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9860#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9861        "lsl	r7, r10, #16\n\t"
 9862        "lsr	r7, r7, #24\n\t"
 9863#else
 9864        "uxtb	r7, r10, ror #8\n\t"
 9865#endif
 9866#else
 9867        "ubfx	r7, r10, #8, #8\n\t"
 9868#endif
 9869#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9871        "lsl	lr, r9, #8\n\t"
 9872        "lsr	lr, lr, #24\n\t"
 9873#else
 9874        "uxtb	lr, r9, ror #16\n\t"
 9875#endif
 9876#else
 9877        "ubfx	lr, r9, #16, #8\n\t"
 9878#endif
 9879        "lsr	r2, r8, #24\n\t"
 9880        "ldrb	r4, [%[te], r4, lsl #2]\n\t"
 9881        "ldrb	r7, [%[te], r7, lsl #2]\n\t"
 9882        "ldrb	lr, [%[te], lr, lsl #2]\n\t"
 9883        "ldrb	r2, [%[te], r2, lsl #2]\n\t"
 9884#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9885#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9886        "lsl	r5, r8, #24\n\t"
 9887        "lsr	r5, r5, #24\n\t"
 9888#else
 9889        "uxtb	r5, r8\n\t"
 9890#endif
 9891#else
 9892        "ubfx	r5, r8, #0, #8\n\t"
 9893#endif
 9894        "eor	r4, r4, r7, lsl #8\n\t"
 9895#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9896#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9897        "lsl	r7, r11, #16\n\t"
 9898        "lsr	r7, r7, #24\n\t"
 9899#else
 9900        "uxtb	r7, r11, ror #8\n\t"
 9901#endif
 9902#else
 9903        "ubfx	r7, r11, #8, #8\n\t"
 9904#endif
 9905        "eor	r4, r4, lr, lsl #16\n\t"
 9906#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9907#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9908        "lsl	lr, r10, #8\n\t"
 9909        "lsr	lr, lr, #24\n\t"
 9910#else
 9911        "uxtb	lr, r10, ror #16\n\t"
 9912#endif
 9913#else
 9914        "ubfx	lr, r10, #16, #8\n\t"
 9915#endif
 9916        "eor	r4, r4, r2, lsl #24\n\t"
 9917        "lsr	r2, r9, #24\n\t"
 9918        "ldrb	r5, [%[te], r5, lsl #2]\n\t"
 9919        "ldrb	r7, [%[te], r7, lsl #2]\n\t"
 9920        "ldrb	lr, [%[te], lr, lsl #2]\n\t"
 9921        "ldrb	r2, [%[te], r2, lsl #2]\n\t"
 9922#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9923#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9924        "lsl	r6, r9, #24\n\t"
 9925        "lsr	r6, r6, #24\n\t"
 9926#else
 9927        "uxtb	r6, r9\n\t"
 9928#endif
 9929#else
 9930        "ubfx	r6, r9, #0, #8\n\t"
 9931#endif
 9932        "eor	r5, r5, r7, lsl #8\n\t"
 9933#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9934#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9935        "lsl	r7, r8, #16\n\t"
 9936        "lsr	r7, r7, #24\n\t"
 9937#else
 9938        "uxtb	r7, r8, ror #8\n\t"
 9939#endif
 9940#else
 9941        "ubfx	r7, r8, #8, #8\n\t"
 9942#endif
 9943        "eor	r5, r5, lr, lsl #16\n\t"
 9944#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9945#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9946        "lsl	lr, r11, #8\n\t"
 9947        "lsr	lr, lr, #24\n\t"
 9948#else
 9949        "uxtb	lr, r11, ror #16\n\t"
 9950#endif
 9951#else
 9952        "ubfx	lr, r11, #16, #8\n\t"
 9953#endif
 9954        "eor	r5, r5, r2, lsl #24\n\t"
 9955        "lsr	r2, r10, #24\n\t"
 9956        "ldrb	r6, [%[te], r6, lsl #2]\n\t"
 9957        "ldrb	r7, [%[te], r7, lsl #2]\n\t"
 9958        "ldrb	lr, [%[te], lr, lsl #2]\n\t"
 9959        "ldrb	r2, [%[te], r2, lsl #2]\n\t"
 9960        "lsr	r11, r11, #24\n\t"
 9961        "eor	r6, r6, r7, lsl #8\n\t"
 9962#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9964        "lsl	r7, r10, #24\n\t"
 9965        "lsr	r7, r7, #24\n\t"
 9966#else
 9967        "uxtb	r7, r10\n\t"
 9968#endif
 9969#else
 9970        "ubfx	r7, r10, #0, #8\n\t"
 9971#endif
 9972        "eor	r6, r6, lr, lsl #16\n\t"
 9973#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9974#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9975        "lsl	lr, r9, #16\n\t"
 9976        "lsr	lr, lr, #24\n\t"
 9977#else
 9978        "uxtb	lr, r9, ror #8\n\t"
 9979#endif
 9980#else
 9981        "ubfx	lr, r9, #8, #8\n\t"
 9982#endif
 9983        "eor	r6, r6, r2, lsl #24\n\t"
 9984#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9985#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9986        "lsl	r2, r8, #8\n\t"
 9987        "lsr	r2, r2, #24\n\t"
 9988#else
 9989        "uxtb	r2, r8, ror #16\n\t"
 9990#endif
 9991#else
 9992        "ubfx	r2, r8, #16, #8\n\t"
 9993#endif
 9994        "ldrb	r11, [%[te], r11, lsl #2]\n\t"
 9995        "ldrb	r7, [%[te], r7, lsl #2]\n\t"
 9996        "ldrb	lr, [%[te], lr, lsl #2]\n\t"
 9997        "ldrb	r2, [%[te], r2, lsl #2]\n\t"
 9998        "eor	lr, lr, r11, lsl #16\n\t"
 9999        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
10000        "eor	r7, r7, lr, lsl #8\n\t"
10001        "eor	r7, r7, r2, lsl #16\n\t"
10002        /*   XOR in Key Schedule */
10003        "eor	r4, r4, r8\n\t"
10004        "eor	r5, r5, r9\n\t"
10005        "eor	r6, r6, r10\n\t"
10006        "eor	r7, r7, r11\n\t"
10007#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
10008        : [te] "+r" (te), [nr] "+r" (nr), [len] "+r" (len), [ks] "+r" (ks)
10009        :
10010#else
10011        :
10012        : [te] "r" (te), [nr] "r" (nr), [len] "r" (len), [ks] "r" (ks)
10013#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
10014        : "memory", "cc", "lr"
10015    );
10016}
10017
10018#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
10019#if defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \
10020    defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
10021    defined(HAVE_AES_ECB)
10022static const word32* L_AES_ARM32_te_ecb = L_AES_ARM32_te_data;
10023void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p,
10024    unsigned long len_p, const unsigned char* ks_p, int nr_p);
10025#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
10026WC_OMIT_FRAME_POINTER void AES_ECB_encrypt(const unsigned char* in_p,
10027    unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
10028    int nr_p)
10029#else
10030WC_OMIT_FRAME_POINTER void AES_ECB_encrypt(const unsigned char* in,
10031    unsigned char* out, unsigned long len, const unsigned char* ks, int nr)
10032#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
10033{
10034#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
10035    register const unsigned char* in __asm__ ("r0") =
10036        (const unsigned char*)in_p;
10037    register unsigned char* out __asm__ ("r1") = (unsigned char*)out_p;
10038    register unsigned long len __asm__ ("r2") = (unsigned long)len_p;
10039    register const unsigned char* ks __asm__ ("r3") =
10040        (const unsigned char*)ks_p;
10041    register int nr __asm__ ("r12") = (int)nr_p;
10042    register word32* L_AES_ARM32_te_ecb_c __asm__ ("lr") =
10043        (word32*)L_AES_ARM32_te_ecb;
10044#else
10045    register word32* L_AES_ARM32_te_ecb_c = (word32*)L_AES_ARM32_te_ecb;
10046#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
10047
10048    __asm__ __volatile__ (
10049        "push	{%[nr], %[L_AES_ARM32_te_ecb]}\n\t"
10050        "mov	lr, %[in]\n\t"
10051        "ldr	r0, [sp, #4]\n\t"
10052        "ldr	r12, [sp]\n\t"
10053        "push	{%[ks]}\n\t"
10054        "cmp	r12, #10\n\t"
10055        "beq	L_AES_ECB_encrypt_start_block_128_%=\n\t"
10056        "cmp	r12, #12\n\t"
10057        "beq	L_AES_ECB_encrypt_start_block_192_%=\n\t"
10058        "\n"
10059    "L_AES_ECB_encrypt_loop_block_256_%=:\n\t"
10060        "ldr	r4, [lr]\n\t"
10061        "ldr	r5, [lr, #4]\n\t"
10062        "ldr	r6, [lr, #8]\n\t"
10063        "ldr	r7, [lr, #12]\n\t"
10064#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10065        "eor	r8, r4, r4, ror #16\n\t"
10066        "eor	r9, r5, r5, ror #16\n\t"
10067        "eor	r10, r6, r6, ror #16\n\t"
10068        "eor	r11, r7, r7, ror #16\n\t"
10069        "bic	r8, r8, #0xff0000\n\t"
10070        "bic	r9, r9, #0xff0000\n\t"
10071        "bic	r10, r10, #0xff0000\n\t"
10072        "bic	r11, r11, #0xff0000\n\t"
10073        "ror	r4, r4, #8\n\t"
10074        "ror	r5, r5, #8\n\t"
10075        "ror	r6, r6, #8\n\t"
10076        "ror	r7, r7, #8\n\t"
10077        "eor	r4, r4, r8, lsr #8\n\t"
10078        "eor	r5, r5, r9, lsr #8\n\t"
10079        "eor	r6, r6, r10, lsr #8\n\t"
10080        "eor	r7, r7, r11, lsr #8\n\t"
10081#else
10082        "rev	r4, r4\n\t"
10083        "rev	r5, r5\n\t"
10084        "rev	r6, r6\n\t"
10085        "rev	r7, r7\n\t"
10086#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
10087        "push	{r1, %[len], lr}\n\t"
10088        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
10089        /* Round: 0 - XOR in key schedule */
10090        "eor	r4, r4, r8\n\t"
10091        "eor	r5, r5, r9\n\t"
10092        "eor	r6, r6, r10\n\t"
10093        "eor	r7, r7, r11\n\t"
10094        "mov	r1, #6\n\t"
10095#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
10096        "bl	AES_encrypt_block\n\t"
10097#else
10098        "\n"
10099    "L_AES_ECB_encrypt_block_nr_256_%=:\n\t"
10100#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10101#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10102        "lsl	r8, r5, #8\n\t"
10103        "lsr	r8, r8, #24\n\t"
10104#else
10105        "uxtb	r8, r5, ror #16\n\t"
10106#endif
10107#else
10108        "ubfx	r8, r5, #16, #8\n\t"
10109#endif
10110        "lsr	r11, r4, #24\n\t"
10111#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10112#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10113        "lsl	lr, r6, #16\n\t"
10114        "lsr	lr, lr, #24\n\t"
10115#else
10116        "uxtb	lr, r6, ror #8\n\t"
10117#endif
10118#else
10119        "ubfx	lr, r6, #8, #8\n\t"
10120#endif
10121#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10122#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10123        "lsl	r2, r7, #24\n\t"
10124        "lsr	r2, r2, #24\n\t"
10125#else
10126        "uxtb	r2, r7\n\t"
10127#endif
10128#else
10129        "ubfx	r2, r7, #0, #8\n\t"
10130#endif
10131        "ldr	r8, [r0, r8, lsl #2]\n\t"
10132        "ldr	r11, [r0, r11, lsl #2]\n\t"
10133        "ldr	lr, [r0, lr, lsl #2]\n\t"
10134        "ldr	r2, [r0, r2, lsl #2]\n\t"
10135#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10136#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10137        "lsl	r9, r6, #8\n\t"
10138        "lsr	r9, r9, #24\n\t"
10139#else
10140        "uxtb	r9, r6, ror #16\n\t"
10141#endif
10142#else
10143        "ubfx	r9, r6, #16, #8\n\t"
10144#endif
10145        "eor	r8, r8, r11, ror #24\n\t"
10146        "lsr	r11, r5, #24\n\t"
10147        "eor	r8, r8, lr, ror #8\n\t"
10148#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10149#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10150        "lsl	lr, r7, #16\n\t"
10151        "lsr	lr, lr, #24\n\t"
10152#else
10153        "uxtb	lr, r7, ror #8\n\t"
10154#endif
10155#else
10156        "ubfx	lr, r7, #8, #8\n\t"
10157#endif
10158        "eor	r8, r8, r2, ror #16\n\t"
10159#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10160#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10161        "lsl	r2, r4, #24\n\t"
10162        "lsr	r2, r2, #24\n\t"
10163#else
10164        "uxtb	r2, r4\n\t"
10165#endif
10166#else
10167        "ubfx	r2, r4, #0, #8\n\t"
10168#endif
10169        "ldr	r9, [r0, r9, lsl #2]\n\t"
10170        "ldr	r11, [r0, r11, lsl #2]\n\t"
10171        "ldr	lr, [r0, lr, lsl #2]\n\t"
10172        "ldr	r2, [r0, r2, lsl #2]\n\t"
10173#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10174#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10175        "lsl	r10, r7, #8\n\t"
10176        "lsr	r10, r10, #24\n\t"
10177#else
10178        "uxtb	r10, r7, ror #16\n\t"
10179#endif
10180#else
10181        "ubfx	r10, r7, #16, #8\n\t"
10182#endif
10183        "eor	r9, r9, r11, ror #24\n\t"
10184        "lsr	r11, r6, #24\n\t"
10185        "eor	r9, r9, lr, ror #8\n\t"
10186#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10188        "lsl	lr, r4, #16\n\t"
10189        "lsr	lr, lr, #24\n\t"
10190#else
10191        "uxtb	lr, r4, ror #8\n\t"
10192#endif
10193#else
10194        "ubfx	lr, r4, #8, #8\n\t"
10195#endif
10196        "eor	r9, r9, r2, ror #16\n\t"
10197#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10198#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10199        "lsl	r2, r5, #24\n\t"
10200        "lsr	r2, r2, #24\n\t"
10201#else
10202        "uxtb	r2, r5\n\t"
10203#endif
10204#else
10205        "ubfx	r2, r5, #0, #8\n\t"
10206#endif
10207        "ldr	r10, [r0, r10, lsl #2]\n\t"
10208        "ldr	r11, [r0, r11, lsl #2]\n\t"
10209        "ldr	lr, [r0, lr, lsl #2]\n\t"
10210        "ldr	r2, [r0, r2, lsl #2]\n\t"
10211#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10213        "lsl	r6, r6, #24\n\t"
10214        "lsr	r6, r6, #24\n\t"
10215#else
10216        "uxtb	r6, r6\n\t"
10217#endif
10218#else
10219        "ubfx	r6, r6, #0, #8\n\t"
10220#endif
10221        "eor	r10, r10, r11, ror #24\n\t"
10222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10223#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10224        "lsl	r11, r4, #8\n\t"
10225        "lsr	r11, r11, #24\n\t"
10226#else
10227        "uxtb	r11, r4, ror #16\n\t"
10228#endif
10229#else
10230        "ubfx	r11, r4, #16, #8\n\t"
10231#endif
10232        "eor	r10, r10, lr, ror #8\n\t"
10233        "lsr	lr, r7, #24\n\t"
10234        "eor	r10, r10, r2, ror #16\n\t"
10235#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10236#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10237        "lsl	r2, r5, #16\n\t"
10238        "lsr	r2, r2, #24\n\t"
10239#else
10240        "uxtb	r2, r5, ror #8\n\t"
10241#endif
10242#else
10243        "ubfx	r2, r5, #8, #8\n\t"
10244#endif
10245        "ldr	r6, [r0, r6, lsl #2]\n\t"
10246        "ldr	lr, [r0, lr, lsl #2]\n\t"
10247        "ldr	r11, [r0, r11, lsl #2]\n\t"
10248        "ldr	r2, [r0, r2, lsl #2]\n\t"
10249        "eor	lr, lr, r6, ror #24\n\t"
10250        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
10251        "eor	r11, r11, lr, ror #24\n\t"
10252        "eor	r11, r11, r2, ror #8\n\t"
10253        /*   XOR in Key Schedule */
10254        "eor	r8, r8, r4\n\t"
10255        "eor	r9, r9, r5\n\t"
10256        "eor	r10, r10, r6\n\t"
10257        "eor	r11, r11, r7\n\t"
10258#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10259#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10260        "lsl	r4, r9, #8\n\t"
10261        "lsr	r4, r4, #24\n\t"
10262#else
10263        "uxtb	r4, r9, ror #16\n\t"
10264#endif
10265#else
10266        "ubfx	r4, r9, #16, #8\n\t"
10267#endif
10268        "lsr	r7, r8, #24\n\t"
10269#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10270#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10271        "lsl	lr, r10, #16\n\t"
10272        "lsr	lr, lr, #24\n\t"
10273#else
10274        "uxtb	lr, r10, ror #8\n\t"
10275#endif
10276#else
10277        "ubfx	lr, r10, #8, #8\n\t"
10278#endif
10279#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10280#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10281        "lsl	r2, r11, #24\n\t"
10282        "lsr	r2, r2, #24\n\t"
10283#else
10284        "uxtb	r2, r11\n\t"
10285#endif
10286#else
10287        "ubfx	r2, r11, #0, #8\n\t"
10288#endif
10289        "ldr	r4, [r0, r4, lsl #2]\n\t"
10290        "ldr	r7, [r0, r7, lsl #2]\n\t"
10291        "ldr	lr, [r0, lr, lsl #2]\n\t"
10292        "ldr	r2, [r0, r2, lsl #2]\n\t"
10293#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10294#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10295        "lsl	r5, r10, #8\n\t"
10296        "lsr	r5, r5, #24\n\t"
10297#else
10298        "uxtb	r5, r10, ror #16\n\t"
10299#endif
10300#else
10301        "ubfx	r5, r10, #16, #8\n\t"
10302#endif
10303        "eor	r4, r4, r7, ror #24\n\t"
10304        "lsr	r7, r9, #24\n\t"
10305        "eor	r4, r4, lr, ror #8\n\t"
10306#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10307#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10308        "lsl	lr, r11, #16\n\t"
10309        "lsr	lr, lr, #24\n\t"
10310#else
10311        "uxtb	lr, r11, ror #8\n\t"
10312#endif
10313#else
10314        "ubfx	lr, r11, #8, #8\n\t"
10315#endif
10316        "eor	r4, r4, r2, ror #16\n\t"
10317#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10318#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10319        "lsl	r2, r8, #24\n\t"
10320        "lsr	r2, r2, #24\n\t"
10321#else
10322        "uxtb	r2, r8\n\t"
10323#endif
10324#else
10325        "ubfx	r2, r8, #0, #8\n\t"
10326#endif
10327        "ldr	r5, [r0, r5, lsl #2]\n\t"
10328        "ldr	r7, [r0, r7, lsl #2]\n\t"
10329        "ldr	lr, [r0, lr, lsl #2]\n\t"
10330        "ldr	r2, [r0, r2, lsl #2]\n\t"
10331#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10332#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10333        "lsl	r6, r11, #8\n\t"
10334        "lsr	r6, r6, #24\n\t"
10335#else
10336        "uxtb	r6, r11, ror #16\n\t"
10337#endif
10338#else
10339        "ubfx	r6, r11, #16, #8\n\t"
10340#endif
10341        "eor	r5, r5, r7, ror #24\n\t"
10342        "lsr	r7, r10, #24\n\t"
10343        "eor	r5, r5, lr, ror #8\n\t"
10344#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10345#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10346        "lsl	lr, r8, #16\n\t"
10347        "lsr	lr, lr, #24\n\t"
10348#else
10349        "uxtb	lr, r8, ror #8\n\t"
10350#endif
10351#else
10352        "ubfx	lr, r8, #8, #8\n\t"
10353#endif
10354        "eor	r5, r5, r2, ror #16\n\t"
10355#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10356#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10357        "lsl	r2, r9, #24\n\t"
10358        "lsr	r2, r2, #24\n\t"
10359#else
10360        "uxtb	r2, r9\n\t"
10361#endif
10362#else
10363        "ubfx	r2, r9, #0, #8\n\t"
10364#endif
10365        "ldr	r6, [r0, r6, lsl #2]\n\t"
10366        "ldr	r7, [r0, r7, lsl #2]\n\t"
10367        "ldr	lr, [r0, lr, lsl #2]\n\t"
10368        "ldr	r2, [r0, r2, lsl #2]\n\t"
10369#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10370#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10371        "lsl	r10, r10, #24\n\t"
10372        "lsr	r10, r10, #24\n\t"
10373#else
10374        "uxtb	r10, r10\n\t"
10375#endif
10376#else
10377        "ubfx	r10, r10, #0, #8\n\t"
10378#endif
10379        "eor	r6, r6, r7, ror #24\n\t"
10380#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10381#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10382        "lsl	r7, r8, #8\n\t"
10383        "lsr	r7, r7, #24\n\t"
10384#else
10385        "uxtb	r7, r8, ror #16\n\t"
10386#endif
10387#else
10388        "ubfx	r7, r8, #16, #8\n\t"
10389#endif
10390        "eor	r6, r6, lr, ror #8\n\t"
10391        "lsr	lr, r11, #24\n\t"
10392        "eor	r6, r6, r2, ror #16\n\t"
10393#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10394#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10395        "lsl	r2, r9, #16\n\t"
10396        "lsr	r2, r2, #24\n\t"
10397#else
10398        "uxtb	r2, r9, ror #8\n\t"
10399#endif
10400#else
10401        "ubfx	r2, r9, #8, #8\n\t"
10402#endif
10403        "ldr	r10, [r0, r10, lsl #2]\n\t"
10404        "ldr	lr, [r0, lr, lsl #2]\n\t"
10405        "ldr	r7, [r0, r7, lsl #2]\n\t"
10406        "ldr	r2, [r0, r2, lsl #2]\n\t"
10407        "eor	lr, lr, r10, ror #24\n\t"
10408        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
10409        "eor	r7, r7, lr, ror #24\n\t"
10410        "eor	r7, r7, r2, ror #8\n\t"
10411        /*   XOR in Key Schedule */
10412        "eor	r4, r4, r8\n\t"
10413        "eor	r5, r5, r9\n\t"
10414        "eor	r6, r6, r10\n\t"
10415        "eor	r7, r7, r11\n\t"
10416        "subs	r1, r1, #1\n\t"
10417        "bne	L_AES_ECB_encrypt_block_nr_256_%=\n\t"
10418#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10419#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10420        "lsl	r8, r5, #8\n\t"
10421        "lsr	r8, r8, #24\n\t"
10422#else
10423        "uxtb	r8, r5, ror #16\n\t"
10424#endif
10425#else
10426        "ubfx	r8, r5, #16, #8\n\t"
10427#endif
10428        "lsr	r11, r4, #24\n\t"
10429#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10430#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10431        "lsl	lr, r6, #16\n\t"
10432        "lsr	lr, lr, #24\n\t"
10433#else
10434        "uxtb	lr, r6, ror #8\n\t"
10435#endif
10436#else
10437        "ubfx	lr, r6, #8, #8\n\t"
10438#endif
10439#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10440#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10441        "lsl	r2, r7, #24\n\t"
10442        "lsr	r2, r2, #24\n\t"
10443#else
10444        "uxtb	r2, r7\n\t"
10445#endif
10446#else
10447        "ubfx	r2, r7, #0, #8\n\t"
10448#endif
10449        "ldr	r8, [r0, r8, lsl #2]\n\t"
10450        "ldr	r11, [r0, r11, lsl #2]\n\t"
10451        "ldr	lr, [r0, lr, lsl #2]\n\t"
10452        "ldr	r2, [r0, r2, lsl #2]\n\t"
10453#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10454#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10455        "lsl	r9, r6, #8\n\t"
10456        "lsr	r9, r9, #24\n\t"
10457#else
10458        "uxtb	r9, r6, ror #16\n\t"
10459#endif
10460#else
10461        "ubfx	r9, r6, #16, #8\n\t"
10462#endif
10463        "eor	r8, r8, r11, ror #24\n\t"
10464        "lsr	r11, r5, #24\n\t"
10465        "eor	r8, r8, lr, ror #8\n\t"
10466#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10467#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10468        "lsl	lr, r7, #16\n\t"
10469        "lsr	lr, lr, #24\n\t"
10470#else
10471        "uxtb	lr, r7, ror #8\n\t"
10472#endif
10473#else
10474        "ubfx	lr, r7, #8, #8\n\t"
10475#endif
10476        "eor	r8, r8, r2, ror #16\n\t"
10477#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10478#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10479        "lsl	r2, r4, #24\n\t"
10480        "lsr	r2, r2, #24\n\t"
10481#else
10482        "uxtb	r2, r4\n\t"
10483#endif
10484#else
10485        "ubfx	r2, r4, #0, #8\n\t"
10486#endif
10487        "ldr	r9, [r0, r9, lsl #2]\n\t"
10488        "ldr	r11, [r0, r11, lsl #2]\n\t"
10489        "ldr	lr, [r0, lr, lsl #2]\n\t"
10490        "ldr	r2, [r0, r2, lsl #2]\n\t"
10491#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10492#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10493        "lsl	r10, r7, #8\n\t"
10494        "lsr	r10, r10, #24\n\t"
10495#else
10496        "uxtb	r10, r7, ror #16\n\t"
10497#endif
10498#else
10499        "ubfx	r10, r7, #16, #8\n\t"
10500#endif
10501        "eor	r9, r9, r11, ror #24\n\t"
10502        "lsr	r11, r6, #24\n\t"
10503        "eor	r9, r9, lr, ror #8\n\t"
10504#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10505#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10506        "lsl	lr, r4, #16\n\t"
10507        "lsr	lr, lr, #24\n\t"
10508#else
10509        "uxtb	lr, r4, ror #8\n\t"
10510#endif
10511#else
10512        "ubfx	lr, r4, #8, #8\n\t"
10513#endif
10514        "eor	r9, r9, r2, ror #16\n\t"
10515#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10516#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10517        "lsl	r2, r5, #24\n\t"
10518        "lsr	r2, r2, #24\n\t"
10519#else
10520        "uxtb	r2, r5\n\t"
10521#endif
10522#else
10523        "ubfx	r2, r5, #0, #8\n\t"
10524#endif
10525        "ldr	r10, [r0, r10, lsl #2]\n\t"
10526        "ldr	r11, [r0, r11, lsl #2]\n\t"
10527        "ldr	lr, [r0, lr, lsl #2]\n\t"
10528        "ldr	r2, [r0, r2, lsl #2]\n\t"
10529#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10530#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10531        "lsl	r6, r6, #24\n\t"
10532        "lsr	r6, r6, #24\n\t"
10533#else
10534        "uxtb	r6, r6\n\t"
10535#endif
10536#else
10537        "ubfx	r6, r6, #0, #8\n\t"
10538#endif
10539        "eor	r10, r10, r11, ror #24\n\t"
10540#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10541#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10542        "lsl	r11, r4, #8\n\t"
10543        "lsr	r11, r11, #24\n\t"
10544#else
10545        "uxtb	r11, r4, ror #16\n\t"
10546#endif
10547#else
10548        "ubfx	r11, r4, #16, #8\n\t"
10549#endif
10550        "eor	r10, r10, lr, ror #8\n\t"
10551        "lsr	lr, r7, #24\n\t"
10552        "eor	r10, r10, r2, ror #16\n\t"
10553#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10554#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10555        "lsl	r2, r5, #16\n\t"
10556        "lsr	r2, r2, #24\n\t"
10557#else
10558        "uxtb	r2, r5, ror #8\n\t"
10559#endif
10560#else
10561        "ubfx	r2, r5, #8, #8\n\t"
10562#endif
10563        "ldr	r6, [r0, r6, lsl #2]\n\t"
10564        "ldr	lr, [r0, lr, lsl #2]\n\t"
10565        "ldr	r11, [r0, r11, lsl #2]\n\t"
10566        "ldr	r2, [r0, r2, lsl #2]\n\t"
10567        "eor	lr, lr, r6, ror #24\n\t"
10568        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
10569        "eor	r11, r11, lr, ror #24\n\t"
10570        "eor	r11, r11, r2, ror #8\n\t"
10571        /*   XOR in Key Schedule */
10572        "eor	r8, r8, r4\n\t"
10573        "eor	r9, r9, r5\n\t"
10574        "eor	r10, r10, r6\n\t"
10575        "eor	r11, r11, r7\n\t"
10576#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10577#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10578        "lsl	r4, r11, #24\n\t"
10579        "lsr	r4, r4, #24\n\t"
10580#else
10581        "uxtb	r4, r11\n\t"
10582#endif
10583#else
10584        "ubfx	r4, r11, #0, #8\n\t"
10585#endif
10586#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10587#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10588        "lsl	r7, r10, #16\n\t"
10589        "lsr	r7, r7, #24\n\t"
10590#else
10591        "uxtb	r7, r10, ror #8\n\t"
10592#endif
10593#else
10594        "ubfx	r7, r10, #8, #8\n\t"
10595#endif
10596#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10597#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10598        "lsl	lr, r9, #8\n\t"
10599        "lsr	lr, lr, #24\n\t"
10600#else
10601        "uxtb	lr, r9, ror #16\n\t"
10602#endif
10603#else
10604        "ubfx	lr, r9, #16, #8\n\t"
10605#endif
10606        "lsr	r2, r8, #24\n\t"
10607        "ldrb	r4, [r0, r4, lsl #2]\n\t"
10608        "ldrb	r7, [r0, r7, lsl #2]\n\t"
10609        "ldrb	lr, [r0, lr, lsl #2]\n\t"
10610        "ldrb	r2, [r0, r2, lsl #2]\n\t"
10611#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10612#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10613        "lsl	r5, r8, #24\n\t"
10614        "lsr	r5, r5, #24\n\t"
10615#else
10616        "uxtb	r5, r8\n\t"
10617#endif
10618#else
10619        "ubfx	r5, r8, #0, #8\n\t"
10620#endif
10621        "eor	r4, r4, r7, lsl #8\n\t"
10622#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10623#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10624        "lsl	r7, r11, #16\n\t"
10625        "lsr	r7, r7, #24\n\t"
10626#else
10627        "uxtb	r7, r11, ror #8\n\t"
10628#endif
10629#else
10630        "ubfx	r7, r11, #8, #8\n\t"
10631#endif
10632        "eor	r4, r4, lr, lsl #16\n\t"
10633#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10634#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10635        "lsl	lr, r10, #8\n\t"
10636        "lsr	lr, lr, #24\n\t"
10637#else
10638        "uxtb	lr, r10, ror #16\n\t"
10639#endif
10640#else
10641        "ubfx	lr, r10, #16, #8\n\t"
10642#endif
10643        "eor	r4, r4, r2, lsl #24\n\t"
10644        "lsr	r2, r9, #24\n\t"
10645        "ldrb	r5, [r0, r5, lsl #2]\n\t"
10646        "ldrb	r7, [r0, r7, lsl #2]\n\t"
10647        "ldrb	lr, [r0, lr, lsl #2]\n\t"
10648        "ldrb	r2, [r0, r2, lsl #2]\n\t"
10649#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10650#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10651        "lsl	r6, r9, #24\n\t"
10652        "lsr	r6, r6, #24\n\t"
10653#else
10654        "uxtb	r6, r9\n\t"
10655#endif
10656#else
10657        "ubfx	r6, r9, #0, #8\n\t"
10658#endif
10659        "eor	r5, r5, r7, lsl #8\n\t"
10660#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10661#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10662        "lsl	r7, r8, #16\n\t"
10663        "lsr	r7, r7, #24\n\t"
10664#else
10665        "uxtb	r7, r8, ror #8\n\t"
10666#endif
10667#else
10668        "ubfx	r7, r8, #8, #8\n\t"
10669#endif
10670        "eor	r5, r5, lr, lsl #16\n\t"
10671#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10672#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10673        "lsl	lr, r11, #8\n\t"
10674        "lsr	lr, lr, #24\n\t"
10675#else
10676        "uxtb	lr, r11, ror #16\n\t"
10677#endif
10678#else
10679        "ubfx	lr, r11, #16, #8\n\t"
10680#endif
10681        "eor	r5, r5, r2, lsl #24\n\t"
10682        "lsr	r2, r10, #24\n\t"
10683        "ldrb	r6, [r0, r6, lsl #2]\n\t"
10684        "ldrb	r7, [r0, r7, lsl #2]\n\t"
10685        "ldrb	lr, [r0, lr, lsl #2]\n\t"
10686        "ldrb	r2, [r0, r2, lsl #2]\n\t"
10687        "lsr	r11, r11, #24\n\t"
10688        "eor	r6, r6, r7, lsl #8\n\t"
10689#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10690#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10691        "lsl	r7, r10, #24\n\t"
10692        "lsr	r7, r7, #24\n\t"
10693#else
10694        "uxtb	r7, r10\n\t"
10695#endif
10696#else
10697        "ubfx	r7, r10, #0, #8\n\t"
10698#endif
10699        "eor	r6, r6, lr, lsl #16\n\t"
10700#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10701#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10702        "lsl	lr, r9, #16\n\t"
10703        "lsr	lr, lr, #24\n\t"
10704#else
10705        "uxtb	lr, r9, ror #8\n\t"
10706#endif
10707#else
10708        "ubfx	lr, r9, #8, #8\n\t"
10709#endif
10710        "eor	r6, r6, r2, lsl #24\n\t"
10711#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10713        "lsl	r2, r8, #8\n\t"
10714        "lsr	r2, r2, #24\n\t"
10715#else
10716        "uxtb	r2, r8, ror #16\n\t"
10717#endif
10718#else
10719        "ubfx	r2, r8, #16, #8\n\t"
10720#endif
10721        "ldrb	r11, [r0, r11, lsl #2]\n\t"
10722        "ldrb	r7, [r0, r7, lsl #2]\n\t"
10723        "ldrb	lr, [r0, lr, lsl #2]\n\t"
10724        "ldrb	r2, [r0, r2, lsl #2]\n\t"
10725        "eor	lr, lr, r11, lsl #16\n\t"
10726        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
10727        "eor	r7, r7, lr, lsl #8\n\t"
10728        "eor	r7, r7, r2, lsl #16\n\t"
10729        /*   XOR in Key Schedule */
10730        "eor	r4, r4, r8\n\t"
10731        "eor	r5, r5, r9\n\t"
10732        "eor	r6, r6, r10\n\t"
10733        "eor	r7, r7, r11\n\t"
10734#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
10735        "pop	{r1, %[len], lr}\n\t"
10736        "ldr	%[ks], [sp]\n\t"
10737#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10738        "eor	r8, r4, r4, ror #16\n\t"
10739        "eor	r9, r5, r5, ror #16\n\t"
10740        "eor	r10, r6, r6, ror #16\n\t"
10741        "eor	r11, r7, r7, ror #16\n\t"
10742        "bic	r8, r8, #0xff0000\n\t"
10743        "bic	r9, r9, #0xff0000\n\t"
10744        "bic	r10, r10, #0xff0000\n\t"
10745        "bic	r11, r11, #0xff0000\n\t"
10746        "ror	r4, r4, #8\n\t"
10747        "ror	r5, r5, #8\n\t"
10748        "ror	r6, r6, #8\n\t"
10749        "ror	r7, r7, #8\n\t"
10750        "eor	r4, r4, r8, lsr #8\n\t"
10751        "eor	r5, r5, r9, lsr #8\n\t"
10752        "eor	r6, r6, r10, lsr #8\n\t"
10753        "eor	r7, r7, r11, lsr #8\n\t"
10754#else
10755        "rev	r4, r4\n\t"
10756        "rev	r5, r5\n\t"
10757        "rev	r6, r6\n\t"
10758        "rev	r7, r7\n\t"
10759#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
10760        "str	r4, [%[out]]\n\t"
10761        "str	r5, [%[out], #4]\n\t"
10762        "str	r6, [%[out], #8]\n\t"
10763        "str	r7, [%[out], #12]\n\t"
10764        "subs	%[len], %[len], #16\n\t"
10765        "add	lr, lr, #16\n\t"
10766        "add	%[out], %[out], #16\n\t"
10767        "bne	L_AES_ECB_encrypt_loop_block_256_%=\n\t"
10768        "b	L_AES_ECB_encrypt_end_%=\n\t"
10769        "\n"
10770    "L_AES_ECB_encrypt_start_block_192_%=:\n\t"
10771        "\n"
10772    "L_AES_ECB_encrypt_loop_block_192_%=:\n\t"
10773        "ldr	r4, [lr]\n\t"
10774        "ldr	r5, [lr, #4]\n\t"
10775        "ldr	r6, [lr, #8]\n\t"
10776        "ldr	r7, [lr, #12]\n\t"
10777#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10778        "eor	r8, r4, r4, ror #16\n\t"
10779        "eor	r9, r5, r5, ror #16\n\t"
10780        "eor	r10, r6, r6, ror #16\n\t"
10781        "eor	r11, r7, r7, ror #16\n\t"
10782        "bic	r8, r8, #0xff0000\n\t"
10783        "bic	r9, r9, #0xff0000\n\t"
10784        "bic	r10, r10, #0xff0000\n\t"
10785        "bic	r11, r11, #0xff0000\n\t"
10786        "ror	r4, r4, #8\n\t"
10787        "ror	r5, r5, #8\n\t"
10788        "ror	r6, r6, #8\n\t"
10789        "ror	r7, r7, #8\n\t"
10790        "eor	r4, r4, r8, lsr #8\n\t"
10791        "eor	r5, r5, r9, lsr #8\n\t"
10792        "eor	r6, r6, r10, lsr #8\n\t"
10793        "eor	r7, r7, r11, lsr #8\n\t"
10794#else
10795        "rev	r4, r4\n\t"
10796        "rev	r5, r5\n\t"
10797        "rev	r6, r6\n\t"
10798        "rev	r7, r7\n\t"
10799#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
10800        "push	{r1, %[len], lr}\n\t"
10801        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
10802        /* Round: 0 - XOR in key schedule */
10803        "eor	r4, r4, r8\n\t"
10804        "eor	r5, r5, r9\n\t"
10805        "eor	r6, r6, r10\n\t"
10806        "eor	r7, r7, r11\n\t"
10807        "mov	r1, #5\n\t"
10808#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
10809        "bl	AES_encrypt_block\n\t"
10810#else
10811        "\n"
10812    "L_AES_ECB_encrypt_block_nr_192_%=:\n\t"
10813#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10814#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10815        "lsl	r8, r5, #8\n\t"
10816        "lsr	r8, r8, #24\n\t"
10817#else
10818        "uxtb	r8, r5, ror #16\n\t"
10819#endif
10820#else
10821        "ubfx	r8, r5, #16, #8\n\t"
10822#endif
10823        "lsr	r11, r4, #24\n\t"
10824#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10825#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10826        "lsl	lr, r6, #16\n\t"
10827        "lsr	lr, lr, #24\n\t"
10828#else
10829        "uxtb	lr, r6, ror #8\n\t"
10830#endif
10831#else
10832        "ubfx	lr, r6, #8, #8\n\t"
10833#endif
10834#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10835#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10836        "lsl	r2, r7, #24\n\t"
10837        "lsr	r2, r2, #24\n\t"
10838#else
10839        "uxtb	r2, r7\n\t"
10840#endif
10841#else
10842        "ubfx	r2, r7, #0, #8\n\t"
10843#endif
10844        "ldr	r8, [r0, r8, lsl #2]\n\t"
10845        "ldr	r11, [r0, r11, lsl #2]\n\t"
10846        "ldr	lr, [r0, lr, lsl #2]\n\t"
10847        "ldr	r2, [r0, r2, lsl #2]\n\t"
10848#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10849#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10850        "lsl	r9, r6, #8\n\t"
10851        "lsr	r9, r9, #24\n\t"
10852#else
10853        "uxtb	r9, r6, ror #16\n\t"
10854#endif
10855#else
10856        "ubfx	r9, r6, #16, #8\n\t"
10857#endif
10858        "eor	r8, r8, r11, ror #24\n\t"
10859        "lsr	r11, r5, #24\n\t"
10860        "eor	r8, r8, lr, ror #8\n\t"
10861#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10862#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10863        "lsl	lr, r7, #16\n\t"
10864        "lsr	lr, lr, #24\n\t"
10865#else
10866        "uxtb	lr, r7, ror #8\n\t"
10867#endif
10868#else
10869        "ubfx	lr, r7, #8, #8\n\t"
10870#endif
10871        "eor	r8, r8, r2, ror #16\n\t"
10872#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10873#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10874        "lsl	r2, r4, #24\n\t"
10875        "lsr	r2, r2, #24\n\t"
10876#else
10877        "uxtb	r2, r4\n\t"
10878#endif
10879#else
10880        "ubfx	r2, r4, #0, #8\n\t"
10881#endif
10882        "ldr	r9, [r0, r9, lsl #2]\n\t"
10883        "ldr	r11, [r0, r11, lsl #2]\n\t"
10884        "ldr	lr, [r0, lr, lsl #2]\n\t"
10885        "ldr	r2, [r0, r2, lsl #2]\n\t"
10886#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10887#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10888        "lsl	r10, r7, #8\n\t"
10889        "lsr	r10, r10, #24\n\t"
10890#else
10891        "uxtb	r10, r7, ror #16\n\t"
10892#endif
10893#else
10894        "ubfx	r10, r7, #16, #8\n\t"
10895#endif
10896        "eor	r9, r9, r11, ror #24\n\t"
10897        "lsr	r11, r6, #24\n\t"
10898        "eor	r9, r9, lr, ror #8\n\t"
10899#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10900#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10901        "lsl	lr, r4, #16\n\t"
10902        "lsr	lr, lr, #24\n\t"
10903#else
10904        "uxtb	lr, r4, ror #8\n\t"
10905#endif
10906#else
10907        "ubfx	lr, r4, #8, #8\n\t"
10908#endif
10909        "eor	r9, r9, r2, ror #16\n\t"
10910#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10911#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10912        "lsl	r2, r5, #24\n\t"
10913        "lsr	r2, r2, #24\n\t"
10914#else
10915        "uxtb	r2, r5\n\t"
10916#endif
10917#else
10918        "ubfx	r2, r5, #0, #8\n\t"
10919#endif
10920        "ldr	r10, [r0, r10, lsl #2]\n\t"
10921        "ldr	r11, [r0, r11, lsl #2]\n\t"
10922        "ldr	lr, [r0, lr, lsl #2]\n\t"
10923        "ldr	r2, [r0, r2, lsl #2]\n\t"
10924#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10925#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10926        "lsl	r6, r6, #24\n\t"
10927        "lsr	r6, r6, #24\n\t"
10928#else
10929        "uxtb	r6, r6\n\t"
10930#endif
10931#else
10932        "ubfx	r6, r6, #0, #8\n\t"
10933#endif
10934        "eor	r10, r10, r11, ror #24\n\t"
10935#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10936#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10937        "lsl	r11, r4, #8\n\t"
10938        "lsr	r11, r11, #24\n\t"
10939#else
10940        "uxtb	r11, r4, ror #16\n\t"
10941#endif
10942#else
10943        "ubfx	r11, r4, #16, #8\n\t"
10944#endif
10945        "eor	r10, r10, lr, ror #8\n\t"
10946        "lsr	lr, r7, #24\n\t"
10947        "eor	r10, r10, r2, ror #16\n\t"
10948#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10949#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10950        "lsl	r2, r5, #16\n\t"
10951        "lsr	r2, r2, #24\n\t"
10952#else
10953        "uxtb	r2, r5, ror #8\n\t"
10954#endif
10955#else
10956        "ubfx	r2, r5, #8, #8\n\t"
10957#endif
10958        "ldr	r6, [r0, r6, lsl #2]\n\t"
10959        "ldr	lr, [r0, lr, lsl #2]\n\t"
10960        "ldr	r11, [r0, r11, lsl #2]\n\t"
10961        "ldr	r2, [r0, r2, lsl #2]\n\t"
10962        "eor	lr, lr, r6, ror #24\n\t"
10963        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
10964        "eor	r11, r11, lr, ror #24\n\t"
10965        "eor	r11, r11, r2, ror #8\n\t"
10966        /*   XOR in Key Schedule */
10967        "eor	r8, r8, r4\n\t"
10968        "eor	r9, r9, r5\n\t"
10969        "eor	r10, r10, r6\n\t"
10970        "eor	r11, r11, r7\n\t"
10971#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10972#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10973        "lsl	r4, r9, #8\n\t"
10974        "lsr	r4, r4, #24\n\t"
10975#else
10976        "uxtb	r4, r9, ror #16\n\t"
10977#endif
10978#else
10979        "ubfx	r4, r9, #16, #8\n\t"
10980#endif
10981        "lsr	r7, r8, #24\n\t"
10982#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10983#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10984        "lsl	lr, r10, #16\n\t"
10985        "lsr	lr, lr, #24\n\t"
10986#else
10987        "uxtb	lr, r10, ror #8\n\t"
10988#endif
10989#else
10990        "ubfx	lr, r10, #8, #8\n\t"
10991#endif
10992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10993#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10994        "lsl	r2, r11, #24\n\t"
10995        "lsr	r2, r2, #24\n\t"
10996#else
10997        "uxtb	r2, r11\n\t"
10998#endif
10999#else
11000        "ubfx	r2, r11, #0, #8\n\t"
11001#endif
11002        "ldr	r4, [r0, r4, lsl #2]\n\t"
11003        "ldr	r7, [r0, r7, lsl #2]\n\t"
11004        "ldr	lr, [r0, lr, lsl #2]\n\t"
11005        "ldr	r2, [r0, r2, lsl #2]\n\t"
11006#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11007#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11008        "lsl	r5, r10, #8\n\t"
11009        "lsr	r5, r5, #24\n\t"
11010#else
11011        "uxtb	r5, r10, ror #16\n\t"
11012#endif
11013#else
11014        "ubfx	r5, r10, #16, #8\n\t"
11015#endif
11016        "eor	r4, r4, r7, ror #24\n\t"
11017        "lsr	r7, r9, #24\n\t"
11018        "eor	r4, r4, lr, ror #8\n\t"
11019#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11020#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11021        "lsl	lr, r11, #16\n\t"
11022        "lsr	lr, lr, #24\n\t"
11023#else
11024        "uxtb	lr, r11, ror #8\n\t"
11025#endif
11026#else
11027        "ubfx	lr, r11, #8, #8\n\t"
11028#endif
11029        "eor	r4, r4, r2, ror #16\n\t"
11030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11031#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11032        "lsl	r2, r8, #24\n\t"
11033        "lsr	r2, r2, #24\n\t"
11034#else
11035        "uxtb	r2, r8\n\t"
11036#endif
11037#else
11038        "ubfx	r2, r8, #0, #8\n\t"
11039#endif
11040        "ldr	r5, [r0, r5, lsl #2]\n\t"
11041        "ldr	r7, [r0, r7, lsl #2]\n\t"
11042        "ldr	lr, [r0, lr, lsl #2]\n\t"
11043        "ldr	r2, [r0, r2, lsl #2]\n\t"
11044#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11045#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11046        "lsl	r6, r11, #8\n\t"
11047        "lsr	r6, r6, #24\n\t"
11048#else
11049        "uxtb	r6, r11, ror #16\n\t"
11050#endif
11051#else
11052        "ubfx	r6, r11, #16, #8\n\t"
11053#endif
11054        "eor	r5, r5, r7, ror #24\n\t"
11055        "lsr	r7, r10, #24\n\t"
11056        "eor	r5, r5, lr, ror #8\n\t"
11057#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11058#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11059        "lsl	lr, r8, #16\n\t"
11060        "lsr	lr, lr, #24\n\t"
11061#else
11062        "uxtb	lr, r8, ror #8\n\t"
11063#endif
11064#else
11065        "ubfx	lr, r8, #8, #8\n\t"
11066#endif
11067        "eor	r5, r5, r2, ror #16\n\t"
11068#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11069#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11070        "lsl	r2, r9, #24\n\t"
11071        "lsr	r2, r2, #24\n\t"
11072#else
11073        "uxtb	r2, r9\n\t"
11074#endif
11075#else
11076        "ubfx	r2, r9, #0, #8\n\t"
11077#endif
11078        "ldr	r6, [r0, r6, lsl #2]\n\t"
11079        "ldr	r7, [r0, r7, lsl #2]\n\t"
11080        "ldr	lr, [r0, lr, lsl #2]\n\t"
11081        "ldr	r2, [r0, r2, lsl #2]\n\t"
11082#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11083#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11084        "lsl	r10, r10, #24\n\t"
11085        "lsr	r10, r10, #24\n\t"
11086#else
11087        "uxtb	r10, r10\n\t"
11088#endif
11089#else
11090        "ubfx	r10, r10, #0, #8\n\t"
11091#endif
11092        "eor	r6, r6, r7, ror #24\n\t"
11093#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11094#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11095        "lsl	r7, r8, #8\n\t"
11096        "lsr	r7, r7, #24\n\t"
11097#else
11098        "uxtb	r7, r8, ror #16\n\t"
11099#endif
11100#else
11101        "ubfx	r7, r8, #16, #8\n\t"
11102#endif
11103        "eor	r6, r6, lr, ror #8\n\t"
11104        "lsr	lr, r11, #24\n\t"
11105        "eor	r6, r6, r2, ror #16\n\t"
11106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11107#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11108        "lsl	r2, r9, #16\n\t"
11109        "lsr	r2, r2, #24\n\t"
11110#else
11111        "uxtb	r2, r9, ror #8\n\t"
11112#endif
11113#else
11114        "ubfx	r2, r9, #8, #8\n\t"
11115#endif
11116        "ldr	r10, [r0, r10, lsl #2]\n\t"
11117        "ldr	lr, [r0, lr, lsl #2]\n\t"
11118        "ldr	r7, [r0, r7, lsl #2]\n\t"
11119        "ldr	r2, [r0, r2, lsl #2]\n\t"
11120        "eor	lr, lr, r10, ror #24\n\t"
11121        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
11122        "eor	r7, r7, lr, ror #24\n\t"
11123        "eor	r7, r7, r2, ror #8\n\t"
11124        /*   XOR in Key Schedule */
11125        "eor	r4, r4, r8\n\t"
11126        "eor	r5, r5, r9\n\t"
11127        "eor	r6, r6, r10\n\t"
11128        "eor	r7, r7, r11\n\t"
11129        "subs	r1, r1, #1\n\t"
11130        "bne	L_AES_ECB_encrypt_block_nr_192_%=\n\t"
11131#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11132#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11133        "lsl	r8, r5, #8\n\t"
11134        "lsr	r8, r8, #24\n\t"
11135#else
11136        "uxtb	r8, r5, ror #16\n\t"
11137#endif
11138#else
11139        "ubfx	r8, r5, #16, #8\n\t"
11140#endif
11141        "lsr	r11, r4, #24\n\t"
11142#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11143#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11144        "lsl	lr, r6, #16\n\t"
11145        "lsr	lr, lr, #24\n\t"
11146#else
11147        "uxtb	lr, r6, ror #8\n\t"
11148#endif
11149#else
11150        "ubfx	lr, r6, #8, #8\n\t"
11151#endif
11152#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11153#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11154        "lsl	r2, r7, #24\n\t"
11155        "lsr	r2, r2, #24\n\t"
11156#else
11157        "uxtb	r2, r7\n\t"
11158#endif
11159#else
11160        "ubfx	r2, r7, #0, #8\n\t"
11161#endif
11162        "ldr	r8, [r0, r8, lsl #2]\n\t"
11163        "ldr	r11, [r0, r11, lsl #2]\n\t"
11164        "ldr	lr, [r0, lr, lsl #2]\n\t"
11165        "ldr	r2, [r0, r2, lsl #2]\n\t"
11166#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11167#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11168        "lsl	r9, r6, #8\n\t"
11169        "lsr	r9, r9, #24\n\t"
11170#else
11171        "uxtb	r9, r6, ror #16\n\t"
11172#endif
11173#else
11174        "ubfx	r9, r6, #16, #8\n\t"
11175#endif
11176        "eor	r8, r8, r11, ror #24\n\t"
11177        "lsr	r11, r5, #24\n\t"
11178        "eor	r8, r8, lr, ror #8\n\t"
11179#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11180#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11181        "lsl	lr, r7, #16\n\t"
11182        "lsr	lr, lr, #24\n\t"
11183#else
11184        "uxtb	lr, r7, ror #8\n\t"
11185#endif
11186#else
11187        "ubfx	lr, r7, #8, #8\n\t"
11188#endif
11189        "eor	r8, r8, r2, ror #16\n\t"
11190#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11191#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11192        "lsl	r2, r4, #24\n\t"
11193        "lsr	r2, r2, #24\n\t"
11194#else
11195        "uxtb	r2, r4\n\t"
11196#endif
11197#else
11198        "ubfx	r2, r4, #0, #8\n\t"
11199#endif
11200        "ldr	r9, [r0, r9, lsl #2]\n\t"
11201        "ldr	r11, [r0, r11, lsl #2]\n\t"
11202        "ldr	lr, [r0, lr, lsl #2]\n\t"
11203        "ldr	r2, [r0, r2, lsl #2]\n\t"
11204#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11205#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11206        "lsl	r10, r7, #8\n\t"
11207        "lsr	r10, r10, #24\n\t"
11208#else
11209        "uxtb	r10, r7, ror #16\n\t"
11210#endif
11211#else
11212        "ubfx	r10, r7, #16, #8\n\t"
11213#endif
11214        "eor	r9, r9, r11, ror #24\n\t"
11215        "lsr	r11, r6, #24\n\t"
11216        "eor	r9, r9, lr, ror #8\n\t"
11217#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11218#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11219        "lsl	lr, r4, #16\n\t"
11220        "lsr	lr, lr, #24\n\t"
11221#else
11222        "uxtb	lr, r4, ror #8\n\t"
11223#endif
11224#else
11225        "ubfx	lr, r4, #8, #8\n\t"
11226#endif
11227        "eor	r9, r9, r2, ror #16\n\t"
11228#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11229#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11230        "lsl	r2, r5, #24\n\t"
11231        "lsr	r2, r2, #24\n\t"
11232#else
11233        "uxtb	r2, r5\n\t"
11234#endif
11235#else
11236        "ubfx	r2, r5, #0, #8\n\t"
11237#endif
11238        "ldr	r10, [r0, r10, lsl #2]\n\t"
11239        "ldr	r11, [r0, r11, lsl #2]\n\t"
11240        "ldr	lr, [r0, lr, lsl #2]\n\t"
11241        "ldr	r2, [r0, r2, lsl #2]\n\t"
11242#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11243#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11244        "lsl	r6, r6, #24\n\t"
11245        "lsr	r6, r6, #24\n\t"
11246#else
11247        "uxtb	r6, r6\n\t"
11248#endif
11249#else
11250        "ubfx	r6, r6, #0, #8\n\t"
11251#endif
11252        "eor	r10, r10, r11, ror #24\n\t"
11253#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11254#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11255        "lsl	r11, r4, #8\n\t"
11256        "lsr	r11, r11, #24\n\t"
11257#else
11258        "uxtb	r11, r4, ror #16\n\t"
11259#endif
11260#else
11261        "ubfx	r11, r4, #16, #8\n\t"
11262#endif
11263        "eor	r10, r10, lr, ror #8\n\t"
11264        "lsr	lr, r7, #24\n\t"
11265        "eor	r10, r10, r2, ror #16\n\t"
11266#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11267#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11268        "lsl	r2, r5, #16\n\t"
11269        "lsr	r2, r2, #24\n\t"
11270#else
11271        "uxtb	r2, r5, ror #8\n\t"
11272#endif
11273#else
11274        "ubfx	r2, r5, #8, #8\n\t"
11275#endif
11276        "ldr	r6, [r0, r6, lsl #2]\n\t"
11277        "ldr	lr, [r0, lr, lsl #2]\n\t"
11278        "ldr	r11, [r0, r11, lsl #2]\n\t"
11279        "ldr	r2, [r0, r2, lsl #2]\n\t"
11280        "eor	lr, lr, r6, ror #24\n\t"
11281        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
11282        "eor	r11, r11, lr, ror #24\n\t"
11283        "eor	r11, r11, r2, ror #8\n\t"
11284        /*   XOR in Key Schedule */
11285        "eor	r8, r8, r4\n\t"
11286        "eor	r9, r9, r5\n\t"
11287        "eor	r10, r10, r6\n\t"
11288        "eor	r11, r11, r7\n\t"
11289#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11290#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11291        "lsl	r4, r11, #24\n\t"
11292        "lsr	r4, r4, #24\n\t"
11293#else
11294        "uxtb	r4, r11\n\t"
11295#endif
11296#else
11297        "ubfx	r4, r11, #0, #8\n\t"
11298#endif
11299#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11300#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11301        "lsl	r7, r10, #16\n\t"
11302        "lsr	r7, r7, #24\n\t"
11303#else
11304        "uxtb	r7, r10, ror #8\n\t"
11305#endif
11306#else
11307        "ubfx	r7, r10, #8, #8\n\t"
11308#endif
11309#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11310#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11311        "lsl	lr, r9, #8\n\t"
11312        "lsr	lr, lr, #24\n\t"
11313#else
11314        "uxtb	lr, r9, ror #16\n\t"
11315#endif
11316#else
11317        "ubfx	lr, r9, #16, #8\n\t"
11318#endif
11319        "lsr	r2, r8, #24\n\t"
11320        "ldrb	r4, [r0, r4, lsl #2]\n\t"
11321        "ldrb	r7, [r0, r7, lsl #2]\n\t"
11322        "ldrb	lr, [r0, lr, lsl #2]\n\t"
11323        "ldrb	r2, [r0, r2, lsl #2]\n\t"
11324#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11325#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11326        "lsl	r5, r8, #24\n\t"
11327        "lsr	r5, r5, #24\n\t"
11328#else
11329        "uxtb	r5, r8\n\t"
11330#endif
11331#else
11332        "ubfx	r5, r8, #0, #8\n\t"
11333#endif
11334        "eor	r4, r4, r7, lsl #8\n\t"
11335#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11336#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11337        "lsl	r7, r11, #16\n\t"
11338        "lsr	r7, r7, #24\n\t"
11339#else
11340        "uxtb	r7, r11, ror #8\n\t"
11341#endif
11342#else
11343        "ubfx	r7, r11, #8, #8\n\t"
11344#endif
11345        "eor	r4, r4, lr, lsl #16\n\t"
11346#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11347#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11348        "lsl	lr, r10, #8\n\t"
11349        "lsr	lr, lr, #24\n\t"
11350#else
11351        "uxtb	lr, r10, ror #16\n\t"
11352#endif
11353#else
11354        "ubfx	lr, r10, #16, #8\n\t"
11355#endif
11356        "eor	r4, r4, r2, lsl #24\n\t"
11357        "lsr	r2, r9, #24\n\t"
11358        "ldrb	r5, [r0, r5, lsl #2]\n\t"
11359        "ldrb	r7, [r0, r7, lsl #2]\n\t"
11360        "ldrb	lr, [r0, lr, lsl #2]\n\t"
11361        "ldrb	r2, [r0, r2, lsl #2]\n\t"
11362#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11363#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11364        "lsl	r6, r9, #24\n\t"
11365        "lsr	r6, r6, #24\n\t"
11366#else
11367        "uxtb	r6, r9\n\t"
11368#endif
11369#else
11370        "ubfx	r6, r9, #0, #8\n\t"
11371#endif
11372        "eor	r5, r5, r7, lsl #8\n\t"
11373#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11374#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11375        "lsl	r7, r8, #16\n\t"
11376        "lsr	r7, r7, #24\n\t"
11377#else
11378        "uxtb	r7, r8, ror #8\n\t"
11379#endif
11380#else
11381        "ubfx	r7, r8, #8, #8\n\t"
11382#endif
11383        "eor	r5, r5, lr, lsl #16\n\t"
11384#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11385#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11386        "lsl	lr, r11, #8\n\t"
11387        "lsr	lr, lr, #24\n\t"
11388#else
11389        "uxtb	lr, r11, ror #16\n\t"
11390#endif
11391#else
11392        "ubfx	lr, r11, #16, #8\n\t"
11393#endif
11394        "eor	r5, r5, r2, lsl #24\n\t"
11395        "lsr	r2, r10, #24\n\t"
11396        "ldrb	r6, [r0, r6, lsl #2]\n\t"
11397        "ldrb	r7, [r0, r7, lsl #2]\n\t"
11398        "ldrb	lr, [r0, lr, lsl #2]\n\t"
11399        "ldrb	r2, [r0, r2, lsl #2]\n\t"
11400        "lsr	r11, r11, #24\n\t"
11401        "eor	r6, r6, r7, lsl #8\n\t"
11402#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11403#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11404        "lsl	r7, r10, #24\n\t"
11405        "lsr	r7, r7, #24\n\t"
11406#else
11407        "uxtb	r7, r10\n\t"
11408#endif
11409#else
11410        "ubfx	r7, r10, #0, #8\n\t"
11411#endif
11412        "eor	r6, r6, lr, lsl #16\n\t"
11413#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11414#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11415        "lsl	lr, r9, #16\n\t"
11416        "lsr	lr, lr, #24\n\t"
11417#else
11418        "uxtb	lr, r9, ror #8\n\t"
11419#endif
11420#else
11421        "ubfx	lr, r9, #8, #8\n\t"
11422#endif
11423        "eor	r6, r6, r2, lsl #24\n\t"
11424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11425#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11426        "lsl	r2, r8, #8\n\t"
11427        "lsr	r2, r2, #24\n\t"
11428#else
11429        "uxtb	r2, r8, ror #16\n\t"
11430#endif
11431#else
11432        "ubfx	r2, r8, #16, #8\n\t"
11433#endif
11434        "ldrb	r11, [r0, r11, lsl #2]\n\t"
11435        "ldrb	r7, [r0, r7, lsl #2]\n\t"
11436        "ldrb	lr, [r0, lr, lsl #2]\n\t"
11437        "ldrb	r2, [r0, r2, lsl #2]\n\t"
11438        "eor	lr, lr, r11, lsl #16\n\t"
11439        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
11440        "eor	r7, r7, lr, lsl #8\n\t"
11441        "eor	r7, r7, r2, lsl #16\n\t"
11442        /*   XOR in Key Schedule */
11443        "eor	r4, r4, r8\n\t"
11444        "eor	r5, r5, r9\n\t"
11445        "eor	r6, r6, r10\n\t"
11446        "eor	r7, r7, r11\n\t"
11447#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
11448        "pop	{r1, %[len], lr}\n\t"
11449        "ldr	%[ks], [sp]\n\t"
11450#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11451        "eor	r8, r4, r4, ror #16\n\t"
11452        "eor	r9, r5, r5, ror #16\n\t"
11453        "eor	r10, r6, r6, ror #16\n\t"
11454        "eor	r11, r7, r7, ror #16\n\t"
11455        "bic	r8, r8, #0xff0000\n\t"
11456        "bic	r9, r9, #0xff0000\n\t"
11457        "bic	r10, r10, #0xff0000\n\t"
11458        "bic	r11, r11, #0xff0000\n\t"
11459        "ror	r4, r4, #8\n\t"
11460        "ror	r5, r5, #8\n\t"
11461        "ror	r6, r6, #8\n\t"
11462        "ror	r7, r7, #8\n\t"
11463        "eor	r4, r4, r8, lsr #8\n\t"
11464        "eor	r5, r5, r9, lsr #8\n\t"
11465        "eor	r6, r6, r10, lsr #8\n\t"
11466        "eor	r7, r7, r11, lsr #8\n\t"
11467#else
11468        "rev	r4, r4\n\t"
11469        "rev	r5, r5\n\t"
11470        "rev	r6, r6\n\t"
11471        "rev	r7, r7\n\t"
11472#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
11473        "str	r4, [%[out]]\n\t"
11474        "str	r5, [%[out], #4]\n\t"
11475        "str	r6, [%[out], #8]\n\t"
11476        "str	r7, [%[out], #12]\n\t"
11477        "subs	%[len], %[len], #16\n\t"
11478        "add	lr, lr, #16\n\t"
11479        "add	%[out], %[out], #16\n\t"
11480        "bne	L_AES_ECB_encrypt_loop_block_192_%=\n\t"
11481        "b	L_AES_ECB_encrypt_end_%=\n\t"
11482        "\n"
11483    "L_AES_ECB_encrypt_start_block_128_%=:\n\t"
11484        "\n"
11485    "L_AES_ECB_encrypt_loop_block_128_%=:\n\t"
11486        "ldr	r4, [lr]\n\t"
11487        "ldr	r5, [lr, #4]\n\t"
11488        "ldr	r6, [lr, #8]\n\t"
11489        "ldr	r7, [lr, #12]\n\t"
11490#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11491        "eor	r8, r4, r4, ror #16\n\t"
11492        "eor	r9, r5, r5, ror #16\n\t"
11493        "eor	r10, r6, r6, ror #16\n\t"
11494        "eor	r11, r7, r7, ror #16\n\t"
11495        "bic	r8, r8, #0xff0000\n\t"
11496        "bic	r9, r9, #0xff0000\n\t"
11497        "bic	r10, r10, #0xff0000\n\t"
11498        "bic	r11, r11, #0xff0000\n\t"
11499        "ror	r4, r4, #8\n\t"
11500        "ror	r5, r5, #8\n\t"
11501        "ror	r6, r6, #8\n\t"
11502        "ror	r7, r7, #8\n\t"
11503        "eor	r4, r4, r8, lsr #8\n\t"
11504        "eor	r5, r5, r9, lsr #8\n\t"
11505        "eor	r6, r6, r10, lsr #8\n\t"
11506        "eor	r7, r7, r11, lsr #8\n\t"
11507#else
11508        "rev	r4, r4\n\t"
11509        "rev	r5, r5\n\t"
11510        "rev	r6, r6\n\t"
11511        "rev	r7, r7\n\t"
11512#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
11513        "push	{r1, %[len], lr}\n\t"
11514        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
11515        /* Round: 0 - XOR in key schedule */
11516        "eor	r4, r4, r8\n\t"
11517        "eor	r5, r5, r9\n\t"
11518        "eor	r6, r6, r10\n\t"
11519        "eor	r7, r7, r11\n\t"
11520        "mov	r1, #4\n\t"
11521#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
11522        "bl	AES_encrypt_block\n\t"
11523#else
11524        "\n"
11525    "L_AES_ECB_encrypt_block_nr_128_%=:\n\t"
11526#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11527#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11528        "lsl	r8, r5, #8\n\t"
11529        "lsr	r8, r8, #24\n\t"
11530#else
11531        "uxtb	r8, r5, ror #16\n\t"
11532#endif
11533#else
11534        "ubfx	r8, r5, #16, #8\n\t"
11535#endif
11536        "lsr	r11, r4, #24\n\t"
11537#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11538#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11539        "lsl	lr, r6, #16\n\t"
11540        "lsr	lr, lr, #24\n\t"
11541#else
11542        "uxtb	lr, r6, ror #8\n\t"
11543#endif
11544#else
11545        "ubfx	lr, r6, #8, #8\n\t"
11546#endif
11547#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11548#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11549        "lsl	r2, r7, #24\n\t"
11550        "lsr	r2, r2, #24\n\t"
11551#else
11552        "uxtb	r2, r7\n\t"
11553#endif
11554#else
11555        "ubfx	r2, r7, #0, #8\n\t"
11556#endif
11557        "ldr	r8, [r0, r8, lsl #2]\n\t"
11558        "ldr	r11, [r0, r11, lsl #2]\n\t"
11559        "ldr	lr, [r0, lr, lsl #2]\n\t"
11560        "ldr	r2, [r0, r2, lsl #2]\n\t"
11561#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11562#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11563        "lsl	r9, r6, #8\n\t"
11564        "lsr	r9, r9, #24\n\t"
11565#else
11566        "uxtb	r9, r6, ror #16\n\t"
11567#endif
11568#else
11569        "ubfx	r9, r6, #16, #8\n\t"
11570#endif
11571        "eor	r8, r8, r11, ror #24\n\t"
11572        "lsr	r11, r5, #24\n\t"
11573        "eor	r8, r8, lr, ror #8\n\t"
11574#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11575#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11576        "lsl	lr, r7, #16\n\t"
11577        "lsr	lr, lr, #24\n\t"
11578#else
11579        "uxtb	lr, r7, ror #8\n\t"
11580#endif
11581#else
11582        "ubfx	lr, r7, #8, #8\n\t"
11583#endif
11584        "eor	r8, r8, r2, ror #16\n\t"
11585#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11586#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11587        "lsl	r2, r4, #24\n\t"
11588        "lsr	r2, r2, #24\n\t"
11589#else
11590        "uxtb	r2, r4\n\t"
11591#endif
11592#else
11593        "ubfx	r2, r4, #0, #8\n\t"
11594#endif
11595        "ldr	r9, [r0, r9, lsl #2]\n\t"
11596        "ldr	r11, [r0, r11, lsl #2]\n\t"
11597        "ldr	lr, [r0, lr, lsl #2]\n\t"
11598        "ldr	r2, [r0, r2, lsl #2]\n\t"
11599#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11600#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11601        "lsl	r10, r7, #8\n\t"
11602        "lsr	r10, r10, #24\n\t"
11603#else
11604        "uxtb	r10, r7, ror #16\n\t"
11605#endif
11606#else
11607        "ubfx	r10, r7, #16, #8\n\t"
11608#endif
11609        "eor	r9, r9, r11, ror #24\n\t"
11610        "lsr	r11, r6, #24\n\t"
11611        "eor	r9, r9, lr, ror #8\n\t"
11612#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11613#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11614        "lsl	lr, r4, #16\n\t"
11615        "lsr	lr, lr, #24\n\t"
11616#else
11617        "uxtb	lr, r4, ror #8\n\t"
11618#endif
11619#else
11620        "ubfx	lr, r4, #8, #8\n\t"
11621#endif
11622        "eor	r9, r9, r2, ror #16\n\t"
11623#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11624#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11625        "lsl	r2, r5, #24\n\t"
11626        "lsr	r2, r2, #24\n\t"
11627#else
11628        "uxtb	r2, r5\n\t"
11629#endif
11630#else
11631        "ubfx	r2, r5, #0, #8\n\t"
11632#endif
11633        "ldr	r10, [r0, r10, lsl #2]\n\t"
11634        "ldr	r11, [r0, r11, lsl #2]\n\t"
11635        "ldr	lr, [r0, lr, lsl #2]\n\t"
11636        "ldr	r2, [r0, r2, lsl #2]\n\t"
11637#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11638#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11639        "lsl	r6, r6, #24\n\t"
11640        "lsr	r6, r6, #24\n\t"
11641#else
11642        "uxtb	r6, r6\n\t"
11643#endif
11644#else
11645        "ubfx	r6, r6, #0, #8\n\t"
11646#endif
11647        "eor	r10, r10, r11, ror #24\n\t"
11648#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11649#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11650        "lsl	r11, r4, #8\n\t"
11651        "lsr	r11, r11, #24\n\t"
11652#else
11653        "uxtb	r11, r4, ror #16\n\t"
11654#endif
11655#else
11656        "ubfx	r11, r4, #16, #8\n\t"
11657#endif
11658        "eor	r10, r10, lr, ror #8\n\t"
11659        "lsr	lr, r7, #24\n\t"
11660        "eor	r10, r10, r2, ror #16\n\t"
11661#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11662#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11663        "lsl	r2, r5, #16\n\t"
11664        "lsr	r2, r2, #24\n\t"
11665#else
11666        "uxtb	r2, r5, ror #8\n\t"
11667#endif
11668#else
11669        "ubfx	r2, r5, #8, #8\n\t"
11670#endif
11671        "ldr	r6, [r0, r6, lsl #2]\n\t"
11672        "ldr	lr, [r0, lr, lsl #2]\n\t"
11673        "ldr	r11, [r0, r11, lsl #2]\n\t"
11674        "ldr	r2, [r0, r2, lsl #2]\n\t"
11675        "eor	lr, lr, r6, ror #24\n\t"
11676        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
11677        "eor	r11, r11, lr, ror #24\n\t"
11678        "eor	r11, r11, r2, ror #8\n\t"
11679        /*   XOR in Key Schedule */
11680        "eor	r8, r8, r4\n\t"
11681        "eor	r9, r9, r5\n\t"
11682        "eor	r10, r10, r6\n\t"
11683        "eor	r11, r11, r7\n\t"
11684#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11685#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11686        "lsl	r4, r9, #8\n\t"
11687        "lsr	r4, r4, #24\n\t"
11688#else
11689        "uxtb	r4, r9, ror #16\n\t"
11690#endif
11691#else
11692        "ubfx	r4, r9, #16, #8\n\t"
11693#endif
11694        "lsr	r7, r8, #24\n\t"
11695#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11696#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11697        "lsl	lr, r10, #16\n\t"
11698        "lsr	lr, lr, #24\n\t"
11699#else
11700        "uxtb	lr, r10, ror #8\n\t"
11701#endif
11702#else
11703        "ubfx	lr, r10, #8, #8\n\t"
11704#endif
11705#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11706#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11707        "lsl	r2, r11, #24\n\t"
11708        "lsr	r2, r2, #24\n\t"
11709#else
11710        "uxtb	r2, r11\n\t"
11711#endif
11712#else
11713        "ubfx	r2, r11, #0, #8\n\t"
11714#endif
11715        "ldr	r4, [r0, r4, lsl #2]\n\t"
11716        "ldr	r7, [r0, r7, lsl #2]\n\t"
11717        "ldr	lr, [r0, lr, lsl #2]\n\t"
11718        "ldr	r2, [r0, r2, lsl #2]\n\t"
11719#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11720#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11721        "lsl	r5, r10, #8\n\t"
11722        "lsr	r5, r5, #24\n\t"
11723#else
11724        "uxtb	r5, r10, ror #16\n\t"
11725#endif
11726#else
11727        "ubfx	r5, r10, #16, #8\n\t"
11728#endif
11729        "eor	r4, r4, r7, ror #24\n\t"
11730        "lsr	r7, r9, #24\n\t"
11731        "eor	r4, r4, lr, ror #8\n\t"
11732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11733#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11734        "lsl	lr, r11, #16\n\t"
11735        "lsr	lr, lr, #24\n\t"
11736#else
11737        "uxtb	lr, r11, ror #8\n\t"
11738#endif
11739#else
11740        "ubfx	lr, r11, #8, #8\n\t"
11741#endif
11742        "eor	r4, r4, r2, ror #16\n\t"
11743#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11744#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11745        "lsl	r2, r8, #24\n\t"
11746        "lsr	r2, r2, #24\n\t"
11747#else
11748        "uxtb	r2, r8\n\t"
11749#endif
11750#else
11751        "ubfx	r2, r8, #0, #8\n\t"
11752#endif
11753        "ldr	r5, [r0, r5, lsl #2]\n\t"
11754        "ldr	r7, [r0, r7, lsl #2]\n\t"
11755        "ldr	lr, [r0, lr, lsl #2]\n\t"
11756        "ldr	r2, [r0, r2, lsl #2]\n\t"
11757#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11758#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11759        "lsl	r6, r11, #8\n\t"
11760        "lsr	r6, r6, #24\n\t"
11761#else
11762        "uxtb	r6, r11, ror #16\n\t"
11763#endif
11764#else
11765        "ubfx	r6, r11, #16, #8\n\t"
11766#endif
11767        "eor	r5, r5, r7, ror #24\n\t"
11768        "lsr	r7, r10, #24\n\t"
11769        "eor	r5, r5, lr, ror #8\n\t"
11770#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11771#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11772        "lsl	lr, r8, #16\n\t"
11773        "lsr	lr, lr, #24\n\t"
11774#else
11775        "uxtb	lr, r8, ror #8\n\t"
11776#endif
11777#else
11778        "ubfx	lr, r8, #8, #8\n\t"
11779#endif
11780        "eor	r5, r5, r2, ror #16\n\t"
11781#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11782#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11783        "lsl	r2, r9, #24\n\t"
11784        "lsr	r2, r2, #24\n\t"
11785#else
11786        "uxtb	r2, r9\n\t"
11787#endif
11788#else
11789        "ubfx	r2, r9, #0, #8\n\t"
11790#endif
11791        "ldr	r6, [r0, r6, lsl #2]\n\t"
11792        "ldr	r7, [r0, r7, lsl #2]\n\t"
11793        "ldr	lr, [r0, lr, lsl #2]\n\t"
11794        "ldr	r2, [r0, r2, lsl #2]\n\t"
11795#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11796#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11797        "lsl	r10, r10, #24\n\t"
11798        "lsr	r10, r10, #24\n\t"
11799#else
11800        "uxtb	r10, r10\n\t"
11801#endif
11802#else
11803        "ubfx	r10, r10, #0, #8\n\t"
11804#endif
11805        "eor	r6, r6, r7, ror #24\n\t"
11806#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11807#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11808        "lsl	r7, r8, #8\n\t"
11809        "lsr	r7, r7, #24\n\t"
11810#else
11811        "uxtb	r7, r8, ror #16\n\t"
11812#endif
11813#else
11814        "ubfx	r7, r8, #16, #8\n\t"
11815#endif
11816        "eor	r6, r6, lr, ror #8\n\t"
11817        "lsr	lr, r11, #24\n\t"
11818        "eor	r6, r6, r2, ror #16\n\t"
11819#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11820#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11821        "lsl	r2, r9, #16\n\t"
11822        "lsr	r2, r2, #24\n\t"
11823#else
11824        "uxtb	r2, r9, ror #8\n\t"
11825#endif
11826#else
11827        "ubfx	r2, r9, #8, #8\n\t"
11828#endif
11829        "ldr	r10, [r0, r10, lsl #2]\n\t"
11830        "ldr	lr, [r0, lr, lsl #2]\n\t"
11831        "ldr	r7, [r0, r7, lsl #2]\n\t"
11832        "ldr	r2, [r0, r2, lsl #2]\n\t"
11833        "eor	lr, lr, r10, ror #24\n\t"
11834        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
11835        "eor	r7, r7, lr, ror #24\n\t"
11836        "eor	r7, r7, r2, ror #8\n\t"
11837        /*   XOR in Key Schedule */
11838        "eor	r4, r4, r8\n\t"
11839        "eor	r5, r5, r9\n\t"
11840        "eor	r6, r6, r10\n\t"
11841        "eor	r7, r7, r11\n\t"
11842        "subs	r1, r1, #1\n\t"
11843        "bne	L_AES_ECB_encrypt_block_nr_128_%=\n\t"
11844#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11845#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11846        "lsl	r8, r5, #8\n\t"
11847        "lsr	r8, r8, #24\n\t"
11848#else
11849        "uxtb	r8, r5, ror #16\n\t"
11850#endif
11851#else
11852        "ubfx	r8, r5, #16, #8\n\t"
11853#endif
11854        "lsr	r11, r4, #24\n\t"
11855#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11856#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11857        "lsl	lr, r6, #16\n\t"
11858        "lsr	lr, lr, #24\n\t"
11859#else
11860        "uxtb	lr, r6, ror #8\n\t"
11861#endif
11862#else
11863        "ubfx	lr, r6, #8, #8\n\t"
11864#endif
11865#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11866#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11867        "lsl	r2, r7, #24\n\t"
11868        "lsr	r2, r2, #24\n\t"
11869#else
11870        "uxtb	r2, r7\n\t"
11871#endif
11872#else
11873        "ubfx	r2, r7, #0, #8\n\t"
11874#endif
11875        "ldr	r8, [r0, r8, lsl #2]\n\t"
11876        "ldr	r11, [r0, r11, lsl #2]\n\t"
11877        "ldr	lr, [r0, lr, lsl #2]\n\t"
11878        "ldr	r2, [r0, r2, lsl #2]\n\t"
11879#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11880#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11881        "lsl	r9, r6, #8\n\t"
11882        "lsr	r9, r9, #24\n\t"
11883#else
11884        "uxtb	r9, r6, ror #16\n\t"
11885#endif
11886#else
11887        "ubfx	r9, r6, #16, #8\n\t"
11888#endif
11889        "eor	r8, r8, r11, ror #24\n\t"
11890        "lsr	r11, r5, #24\n\t"
11891        "eor	r8, r8, lr, ror #8\n\t"
11892#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11893#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11894        "lsl	lr, r7, #16\n\t"
11895        "lsr	lr, lr, #24\n\t"
11896#else
11897        "uxtb	lr, r7, ror #8\n\t"
11898#endif
11899#else
11900        "ubfx	lr, r7, #8, #8\n\t"
11901#endif
11902        "eor	r8, r8, r2, ror #16\n\t"
11903#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11904#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11905        "lsl	r2, r4, #24\n\t"
11906        "lsr	r2, r2, #24\n\t"
11907#else
11908        "uxtb	r2, r4\n\t"
11909#endif
11910#else
11911        "ubfx	r2, r4, #0, #8\n\t"
11912#endif
11913        "ldr	r9, [r0, r9, lsl #2]\n\t"
11914        "ldr	r11, [r0, r11, lsl #2]\n\t"
11915        "ldr	lr, [r0, lr, lsl #2]\n\t"
11916        "ldr	r2, [r0, r2, lsl #2]\n\t"
11917#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11918#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11919        "lsl	r10, r7, #8\n\t"
11920        "lsr	r10, r10, #24\n\t"
11921#else
11922        "uxtb	r10, r7, ror #16\n\t"
11923#endif
11924#else
11925        "ubfx	r10, r7, #16, #8\n\t"
11926#endif
11927        "eor	r9, r9, r11, ror #24\n\t"
11928        "lsr	r11, r6, #24\n\t"
11929        "eor	r9, r9, lr, ror #8\n\t"
11930#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11931#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11932        "lsl	lr, r4, #16\n\t"
11933        "lsr	lr, lr, #24\n\t"
11934#else
11935        "uxtb	lr, r4, ror #8\n\t"
11936#endif
11937#else
11938        "ubfx	lr, r4, #8, #8\n\t"
11939#endif
11940        "eor	r9, r9, r2, ror #16\n\t"
11941#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11942#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11943        "lsl	r2, r5, #24\n\t"
11944        "lsr	r2, r2, #24\n\t"
11945#else
11946        "uxtb	r2, r5\n\t"
11947#endif
11948#else
11949        "ubfx	r2, r5, #0, #8\n\t"
11950#endif
11951        "ldr	r10, [r0, r10, lsl #2]\n\t"
11952        "ldr	r11, [r0, r11, lsl #2]\n\t"
11953        "ldr	lr, [r0, lr, lsl #2]\n\t"
11954        "ldr	r2, [r0, r2, lsl #2]\n\t"
11955#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11956#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11957        "lsl	r6, r6, #24\n\t"
11958        "lsr	r6, r6, #24\n\t"
11959#else
11960        "uxtb	r6, r6\n\t"
11961#endif
11962#else
11963        "ubfx	r6, r6, #0, #8\n\t"
11964#endif
11965        "eor	r10, r10, r11, ror #24\n\t"
11966#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11967#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11968        "lsl	r11, r4, #8\n\t"
11969        "lsr	r11, r11, #24\n\t"
11970#else
11971        "uxtb	r11, r4, ror #16\n\t"
11972#endif
11973#else
11974        "ubfx	r11, r4, #16, #8\n\t"
11975#endif
11976        "eor	r10, r10, lr, ror #8\n\t"
11977        "lsr	lr, r7, #24\n\t"
11978        "eor	r10, r10, r2, ror #16\n\t"
11979#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11980#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11981        "lsl	r2, r5, #16\n\t"
11982        "lsr	r2, r2, #24\n\t"
11983#else
11984        "uxtb	r2, r5, ror #8\n\t"
11985#endif
11986#else
11987        "ubfx	r2, r5, #8, #8\n\t"
11988#endif
11989        "ldr	r6, [r0, r6, lsl #2]\n\t"
11990        "ldr	lr, [r0, lr, lsl #2]\n\t"
11991        "ldr	r11, [r0, r11, lsl #2]\n\t"
11992        "ldr	r2, [r0, r2, lsl #2]\n\t"
11993        "eor	lr, lr, r6, ror #24\n\t"
11994        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
11995        "eor	r11, r11, lr, ror #24\n\t"
11996        "eor	r11, r11, r2, ror #8\n\t"
11997        /*   XOR in Key Schedule */
11998        "eor	r8, r8, r4\n\t"
11999        "eor	r9, r9, r5\n\t"
12000        "eor	r10, r10, r6\n\t"
12001        "eor	r11, r11, r7\n\t"
12002#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12003#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12004        "lsl	r4, r11, #24\n\t"
12005        "lsr	r4, r4, #24\n\t"
12006#else
12007        "uxtb	r4, r11\n\t"
12008#endif
12009#else
12010        "ubfx	r4, r11, #0, #8\n\t"
12011#endif
12012#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12013#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12014        "lsl	r7, r10, #16\n\t"
12015        "lsr	r7, r7, #24\n\t"
12016#else
12017        "uxtb	r7, r10, ror #8\n\t"
12018#endif
12019#else
12020        "ubfx	r7, r10, #8, #8\n\t"
12021#endif
12022#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12023#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12024        "lsl	lr, r9, #8\n\t"
12025        "lsr	lr, lr, #24\n\t"
12026#else
12027        "uxtb	lr, r9, ror #16\n\t"
12028#endif
12029#else
12030        "ubfx	lr, r9, #16, #8\n\t"
12031#endif
12032        "lsr	r2, r8, #24\n\t"
12033        "ldrb	r4, [r0, r4, lsl #2]\n\t"
12034        "ldrb	r7, [r0, r7, lsl #2]\n\t"
12035        "ldrb	lr, [r0, lr, lsl #2]\n\t"
12036        "ldrb	r2, [r0, r2, lsl #2]\n\t"
12037#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12038#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12039        "lsl	r5, r8, #24\n\t"
12040        "lsr	r5, r5, #24\n\t"
12041#else
12042        "uxtb	r5, r8\n\t"
12043#endif
12044#else
12045        "ubfx	r5, r8, #0, #8\n\t"
12046#endif
12047        "eor	r4, r4, r7, lsl #8\n\t"
12048#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12049#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12050        "lsl	r7, r11, #16\n\t"
12051        "lsr	r7, r7, #24\n\t"
12052#else
12053        "uxtb	r7, r11, ror #8\n\t"
12054#endif
12055#else
12056        "ubfx	r7, r11, #8, #8\n\t"
12057#endif
12058        "eor	r4, r4, lr, lsl #16\n\t"
12059#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12060#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12061        "lsl	lr, r10, #8\n\t"
12062        "lsr	lr, lr, #24\n\t"
12063#else
12064        "uxtb	lr, r10, ror #16\n\t"
12065#endif
12066#else
12067        "ubfx	lr, r10, #16, #8\n\t"
12068#endif
12069        "eor	r4, r4, r2, lsl #24\n\t"
12070        "lsr	r2, r9, #24\n\t"
12071        "ldrb	r5, [r0, r5, lsl #2]\n\t"
12072        "ldrb	r7, [r0, r7, lsl #2]\n\t"
12073        "ldrb	lr, [r0, lr, lsl #2]\n\t"
12074        "ldrb	r2, [r0, r2, lsl #2]\n\t"
12075#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12077        "lsl	r6, r9, #24\n\t"
12078        "lsr	r6, r6, #24\n\t"
12079#else
12080        "uxtb	r6, r9\n\t"
12081#endif
12082#else
12083        "ubfx	r6, r9, #0, #8\n\t"
12084#endif
12085        "eor	r5, r5, r7, lsl #8\n\t"
12086#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12087#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12088        "lsl	r7, r8, #16\n\t"
12089        "lsr	r7, r7, #24\n\t"
12090#else
12091        "uxtb	r7, r8, ror #8\n\t"
12092#endif
12093#else
12094        "ubfx	r7, r8, #8, #8\n\t"
12095#endif
12096        "eor	r5, r5, lr, lsl #16\n\t"
12097#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12098#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12099        "lsl	lr, r11, #8\n\t"
12100        "lsr	lr, lr, #24\n\t"
12101#else
12102        "uxtb	lr, r11, ror #16\n\t"
12103#endif
12104#else
12105        "ubfx	lr, r11, #16, #8\n\t"
12106#endif
12107        "eor	r5, r5, r2, lsl #24\n\t"
12108        "lsr	r2, r10, #24\n\t"
12109        "ldrb	r6, [r0, r6, lsl #2]\n\t"
12110        "ldrb	r7, [r0, r7, lsl #2]\n\t"
12111        "ldrb	lr, [r0, lr, lsl #2]\n\t"
12112        "ldrb	r2, [r0, r2, lsl #2]\n\t"
12113        "lsr	r11, r11, #24\n\t"
12114        "eor	r6, r6, r7, lsl #8\n\t"
12115#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12116#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12117        "lsl	r7, r10, #24\n\t"
12118        "lsr	r7, r7, #24\n\t"
12119#else
12120        "uxtb	r7, r10\n\t"
12121#endif
12122#else
12123        "ubfx	r7, r10, #0, #8\n\t"
12124#endif
12125        "eor	r6, r6, lr, lsl #16\n\t"
12126#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12127#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12128        "lsl	lr, r9, #16\n\t"
12129        "lsr	lr, lr, #24\n\t"
12130#else
12131        "uxtb	lr, r9, ror #8\n\t"
12132#endif
12133#else
12134        "ubfx	lr, r9, #8, #8\n\t"
12135#endif
12136        "eor	r6, r6, r2, lsl #24\n\t"
12137#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12138#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12139        "lsl	r2, r8, #8\n\t"
12140        "lsr	r2, r2, #24\n\t"
12141#else
12142        "uxtb	r2, r8, ror #16\n\t"
12143#endif
12144#else
12145        "ubfx	r2, r8, #16, #8\n\t"
12146#endif
12147        "ldrb	r11, [r0, r11, lsl #2]\n\t"
12148        "ldrb	r7, [r0, r7, lsl #2]\n\t"
12149        "ldrb	lr, [r0, lr, lsl #2]\n\t"
12150        "ldrb	r2, [r0, r2, lsl #2]\n\t"
12151        "eor	lr, lr, r11, lsl #16\n\t"
12152        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
12153        "eor	r7, r7, lr, lsl #8\n\t"
12154        "eor	r7, r7, r2, lsl #16\n\t"
12155        /*   XOR in Key Schedule */
12156        "eor	r4, r4, r8\n\t"
12157        "eor	r5, r5, r9\n\t"
12158        "eor	r6, r6, r10\n\t"
12159        "eor	r7, r7, r11\n\t"
12160#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
12161        "pop	{r1, %[len], lr}\n\t"
12162        "ldr	%[ks], [sp]\n\t"
12163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12164        "eor	r8, r4, r4, ror #16\n\t"
12165        "eor	r9, r5, r5, ror #16\n\t"
12166        "eor	r10, r6, r6, ror #16\n\t"
12167        "eor	r11, r7, r7, ror #16\n\t"
12168        "bic	r8, r8, #0xff0000\n\t"
12169        "bic	r9, r9, #0xff0000\n\t"
12170        "bic	r10, r10, #0xff0000\n\t"
12171        "bic	r11, r11, #0xff0000\n\t"
12172        "ror	r4, r4, #8\n\t"
12173        "ror	r5, r5, #8\n\t"
12174        "ror	r6, r6, #8\n\t"
12175        "ror	r7, r7, #8\n\t"
12176        "eor	r4, r4, r8, lsr #8\n\t"
12177        "eor	r5, r5, r9, lsr #8\n\t"
12178        "eor	r6, r6, r10, lsr #8\n\t"
12179        "eor	r7, r7, r11, lsr #8\n\t"
12180#else
12181        "rev	r4, r4\n\t"
12182        "rev	r5, r5\n\t"
12183        "rev	r6, r6\n\t"
12184        "rev	r7, r7\n\t"
12185#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
12186        "str	r4, [%[out]]\n\t"
12187        "str	r5, [%[out], #4]\n\t"
12188        "str	r6, [%[out], #8]\n\t"
12189        "str	r7, [%[out], #12]\n\t"
12190        "subs	%[len], %[len], #16\n\t"
12191        "add	lr, lr, #16\n\t"
12192        "add	%[out], %[out], #16\n\t"
12193        "bne	L_AES_ECB_encrypt_loop_block_128_%=\n\t"
12194        "\n"
12195    "L_AES_ECB_encrypt_end_%=:\n\t"
12196        "pop	{%[ks]}\n\t"
12197        "pop	{%[nr], %[L_AES_ARM32_te_ecb]}\n\t"
12198#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
12199        : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
12200          [nr] "+r" (nr), [L_AES_ARM32_te_ecb] "+r" (L_AES_ARM32_te_ecb_c)
12201        :
12202#else
12203        :
12204        : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
12205          [nr] "r" (nr), [L_AES_ARM32_te_ecb] "r" (L_AES_ARM32_te_ecb_c)
12206#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
12207        : "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
12208    );
12209}
12210
12211#endif /* HAVE_AESCCM || HAVE_AESGCM || WOLFSSL_AES_DIRECT ||
12212        * WOLFSSL_AES_COUNTER || HAVE_AES_ECB */
12213#ifdef HAVE_AES_CBC
12214static const word32* L_AES_ARM32_te_cbc = L_AES_ARM32_te_data;
12215void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p,
12216    unsigned long len_p, const unsigned char* ks_p, int nr_p,
12217    unsigned char* iv_p);
12218#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
12219WC_OMIT_FRAME_POINTER void AES_CBC_encrypt(const unsigned char* in_p,
12220    unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
12221    int nr_p, unsigned char* iv_p)
12222#else
12223WC_OMIT_FRAME_POINTER void AES_CBC_encrypt(const unsigned char* in,
12224    unsigned char* out, unsigned long len, const unsigned char* ks, int nr,
12225    unsigned char* iv)
12226#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
12227{
12228#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
12229    register const unsigned char* in __asm__ ("r0") =
12230        (const unsigned char*)in_p;
12231    register unsigned char* out __asm__ ("r1") = (unsigned char*)out_p;
12232    register unsigned long len __asm__ ("r2") = (unsigned long)len_p;
12233    register const unsigned char* ks __asm__ ("r3") =
12234        (const unsigned char*)ks_p;
12235    register int nr __asm__ ("r12") = (int)nr_p;
12236    register unsigned char* iv __asm__ ("lr") = (unsigned char*)iv_p;
12237    register word32* L_AES_ARM32_te_cbc_c __asm__ ("r4") =
12238        (word32*)L_AES_ARM32_te_cbc;
12239#else
12240    register word32* L_AES_ARM32_te_cbc_c = (word32*)L_AES_ARM32_te_cbc;
12241#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
12242
12243    __asm__ __volatile__ (
12244        "push	{%[L_AES_ARM32_te_cbc]}\n\t"
12245        "push	{%[nr], %[iv]}\n\t"
12246        "ldr	r8, [sp]\n\t"
12247        "ldr	r9, [sp, #4]\n\t"
12248        "mov	lr, %[in]\n\t"
12249        "ldr	r0, [sp, #8]\n\t"
12250        "ldm	r9, {r4, r5, r6, r7}\n\t"
12251        "push	{%[ks], r9}\n\t"
12252        "cmp	r8, #10\n\t"
12253        "beq	L_AES_CBC_encrypt_start_block_128_%=\n\t"
12254        "cmp	r8, #12\n\t"
12255        "beq	L_AES_CBC_encrypt_start_block_192_%=\n\t"
12256        "\n"
12257    "L_AES_CBC_encrypt_loop_block_256_%=:\n\t"
12258        "ldr	r8, [lr]\n\t"
12259        "ldr	r9, [lr, #4]\n\t"
12260        "ldr	r10, [lr, #8]\n\t"
12261        "ldr	r11, [lr, #12]\n\t"
12262        "eor	r4, r4, r8\n\t"
12263        "eor	r5, r5, r9\n\t"
12264        "eor	r6, r6, r10\n\t"
12265        "eor	r7, r7, r11\n\t"
12266        "push	{r1, %[len], lr}\n\t"
12267#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12268        "eor	r8, r4, r4, ror #16\n\t"
12269        "eor	r9, r5, r5, ror #16\n\t"
12270        "eor	r10, r6, r6, ror #16\n\t"
12271        "eor	r11, r7, r7, ror #16\n\t"
12272        "bic	r8, r8, #0xff0000\n\t"
12273        "bic	r9, r9, #0xff0000\n\t"
12274        "bic	r10, r10, #0xff0000\n\t"
12275        "bic	r11, r11, #0xff0000\n\t"
12276        "ror	r4, r4, #8\n\t"
12277        "ror	r5, r5, #8\n\t"
12278        "ror	r6, r6, #8\n\t"
12279        "ror	r7, r7, #8\n\t"
12280        "eor	r4, r4, r8, lsr #8\n\t"
12281        "eor	r5, r5, r9, lsr #8\n\t"
12282        "eor	r6, r6, r10, lsr #8\n\t"
12283        "eor	r7, r7, r11, lsr #8\n\t"
12284#else
12285        "rev	r4, r4\n\t"
12286        "rev	r5, r5\n\t"
12287        "rev	r6, r6\n\t"
12288        "rev	r7, r7\n\t"
12289#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
12290        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
12291        /* Round: 0 - XOR in key schedule */
12292        "eor	r4, r4, r8\n\t"
12293        "eor	r5, r5, r9\n\t"
12294        "eor	r6, r6, r10\n\t"
12295        "eor	r7, r7, r11\n\t"
12296        "mov	r1, #6\n\t"
12297#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
12298        "bl	AES_encrypt_block\n\t"
12299#else
12300        "\n"
12301    "L_AES_CBC_encrypt_block_nr_256_%=:\n\t"
12302#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12303#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12304        "lsl	r8, r5, #8\n\t"
12305        "lsr	r8, r8, #24\n\t"
12306#else
12307        "uxtb	r8, r5, ror #16\n\t"
12308#endif
12309#else
12310        "ubfx	r8, r5, #16, #8\n\t"
12311#endif
12312        "lsr	r11, r4, #24\n\t"
12313#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12314#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12315        "lsl	lr, r6, #16\n\t"
12316        "lsr	lr, lr, #24\n\t"
12317#else
12318        "uxtb	lr, r6, ror #8\n\t"
12319#endif
12320#else
12321        "ubfx	lr, r6, #8, #8\n\t"
12322#endif
12323#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12324#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12325        "lsl	r2, r7, #24\n\t"
12326        "lsr	r2, r2, #24\n\t"
12327#else
12328        "uxtb	r2, r7\n\t"
12329#endif
12330#else
12331        "ubfx	r2, r7, #0, #8\n\t"
12332#endif
12333        "ldr	r8, [r0, r8, lsl #2]\n\t"
12334        "ldr	r11, [r0, r11, lsl #2]\n\t"
12335        "ldr	lr, [r0, lr, lsl #2]\n\t"
12336        "ldr	r2, [r0, r2, lsl #2]\n\t"
12337#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12338#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12339        "lsl	r9, r6, #8\n\t"
12340        "lsr	r9, r9, #24\n\t"
12341#else
12342        "uxtb	r9, r6, ror #16\n\t"
12343#endif
12344#else
12345        "ubfx	r9, r6, #16, #8\n\t"
12346#endif
12347        "eor	r8, r8, r11, ror #24\n\t"
12348        "lsr	r11, r5, #24\n\t"
12349        "eor	r8, r8, lr, ror #8\n\t"
12350#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12351#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12352        "lsl	lr, r7, #16\n\t"
12353        "lsr	lr, lr, #24\n\t"
12354#else
12355        "uxtb	lr, r7, ror #8\n\t"
12356#endif
12357#else
12358        "ubfx	lr, r7, #8, #8\n\t"
12359#endif
12360        "eor	r8, r8, r2, ror #16\n\t"
12361#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12362#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12363        "lsl	r2, r4, #24\n\t"
12364        "lsr	r2, r2, #24\n\t"
12365#else
12366        "uxtb	r2, r4\n\t"
12367#endif
12368#else
12369        "ubfx	r2, r4, #0, #8\n\t"
12370#endif
12371        "ldr	r9, [r0, r9, lsl #2]\n\t"
12372        "ldr	r11, [r0, r11, lsl #2]\n\t"
12373        "ldr	lr, [r0, lr, lsl #2]\n\t"
12374        "ldr	r2, [r0, r2, lsl #2]\n\t"
12375#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12376#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12377        "lsl	r10, r7, #8\n\t"
12378        "lsr	r10, r10, #24\n\t"
12379#else
12380        "uxtb	r10, r7, ror #16\n\t"
12381#endif
12382#else
12383        "ubfx	r10, r7, #16, #8\n\t"
12384#endif
12385        "eor	r9, r9, r11, ror #24\n\t"
12386        "lsr	r11, r6, #24\n\t"
12387        "eor	r9, r9, lr, ror #8\n\t"
12388#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12389#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12390        "lsl	lr, r4, #16\n\t"
12391        "lsr	lr, lr, #24\n\t"
12392#else
12393        "uxtb	lr, r4, ror #8\n\t"
12394#endif
12395#else
12396        "ubfx	lr, r4, #8, #8\n\t"
12397#endif
12398        "eor	r9, r9, r2, ror #16\n\t"
12399#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12400#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12401        "lsl	r2, r5, #24\n\t"
12402        "lsr	r2, r2, #24\n\t"
12403#else
12404        "uxtb	r2, r5\n\t"
12405#endif
12406#else
12407        "ubfx	r2, r5, #0, #8\n\t"
12408#endif
12409        "ldr	r10, [r0, r10, lsl #2]\n\t"
12410        "ldr	r11, [r0, r11, lsl #2]\n\t"
12411        "ldr	lr, [r0, lr, lsl #2]\n\t"
12412        "ldr	r2, [r0, r2, lsl #2]\n\t"
12413#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12414#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12415        "lsl	r6, r6, #24\n\t"
12416        "lsr	r6, r6, #24\n\t"
12417#else
12418        "uxtb	r6, r6\n\t"
12419#endif
12420#else
12421        "ubfx	r6, r6, #0, #8\n\t"
12422#endif
12423        "eor	r10, r10, r11, ror #24\n\t"
12424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12425#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12426        "lsl	r11, r4, #8\n\t"
12427        "lsr	r11, r11, #24\n\t"
12428#else
12429        "uxtb	r11, r4, ror #16\n\t"
12430#endif
12431#else
12432        "ubfx	r11, r4, #16, #8\n\t"
12433#endif
12434        "eor	r10, r10, lr, ror #8\n\t"
12435        "lsr	lr, r7, #24\n\t"
12436        "eor	r10, r10, r2, ror #16\n\t"
12437#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12438#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12439        "lsl	r2, r5, #16\n\t"
12440        "lsr	r2, r2, #24\n\t"
12441#else
12442        "uxtb	r2, r5, ror #8\n\t"
12443#endif
12444#else
12445        "ubfx	r2, r5, #8, #8\n\t"
12446#endif
12447        "ldr	r6, [r0, r6, lsl #2]\n\t"
12448        "ldr	lr, [r0, lr, lsl #2]\n\t"
12449        "ldr	r11, [r0, r11, lsl #2]\n\t"
12450        "ldr	r2, [r0, r2, lsl #2]\n\t"
12451        "eor	lr, lr, r6, ror #24\n\t"
12452        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
12453        "eor	r11, r11, lr, ror #24\n\t"
12454        "eor	r11, r11, r2, ror #8\n\t"
12455        /*   XOR in Key Schedule */
12456        "eor	r8, r8, r4\n\t"
12457        "eor	r9, r9, r5\n\t"
12458        "eor	r10, r10, r6\n\t"
12459        "eor	r11, r11, r7\n\t"
12460#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12461#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12462        "lsl	r4, r9, #8\n\t"
12463        "lsr	r4, r4, #24\n\t"
12464#else
12465        "uxtb	r4, r9, ror #16\n\t"
12466#endif
12467#else
12468        "ubfx	r4, r9, #16, #8\n\t"
12469#endif
12470        "lsr	r7, r8, #24\n\t"
12471#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12472#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12473        "lsl	lr, r10, #16\n\t"
12474        "lsr	lr, lr, #24\n\t"
12475#else
12476        "uxtb	lr, r10, ror #8\n\t"
12477#endif
12478#else
12479        "ubfx	lr, r10, #8, #8\n\t"
12480#endif
12481#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12482#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12483        "lsl	r2, r11, #24\n\t"
12484        "lsr	r2, r2, #24\n\t"
12485#else
12486        "uxtb	r2, r11\n\t"
12487#endif
12488#else
12489        "ubfx	r2, r11, #0, #8\n\t"
12490#endif
12491        "ldr	r4, [r0, r4, lsl #2]\n\t"
12492        "ldr	r7, [r0, r7, lsl #2]\n\t"
12493        "ldr	lr, [r0, lr, lsl #2]\n\t"
12494        "ldr	r2, [r0, r2, lsl #2]\n\t"
12495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12496#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12497        "lsl	r5, r10, #8\n\t"
12498        "lsr	r5, r5, #24\n\t"
12499#else
12500        "uxtb	r5, r10, ror #16\n\t"
12501#endif
12502#else
12503        "ubfx	r5, r10, #16, #8\n\t"
12504#endif
12505        "eor	r4, r4, r7, ror #24\n\t"
12506        "lsr	r7, r9, #24\n\t"
12507        "eor	r4, r4, lr, ror #8\n\t"
12508#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12509#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12510        "lsl	lr, r11, #16\n\t"
12511        "lsr	lr, lr, #24\n\t"
12512#else
12513        "uxtb	lr, r11, ror #8\n\t"
12514#endif
12515#else
12516        "ubfx	lr, r11, #8, #8\n\t"
12517#endif
12518        "eor	r4, r4, r2, ror #16\n\t"
12519#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12520#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12521        "lsl	r2, r8, #24\n\t"
12522        "lsr	r2, r2, #24\n\t"
12523#else
12524        "uxtb	r2, r8\n\t"
12525#endif
12526#else
12527        "ubfx	r2, r8, #0, #8\n\t"
12528#endif
12529        "ldr	r5, [r0, r5, lsl #2]\n\t"
12530        "ldr	r7, [r0, r7, lsl #2]\n\t"
12531        "ldr	lr, [r0, lr, lsl #2]\n\t"
12532        "ldr	r2, [r0, r2, lsl #2]\n\t"
12533#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12534#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12535        "lsl	r6, r11, #8\n\t"
12536        "lsr	r6, r6, #24\n\t"
12537#else
12538        "uxtb	r6, r11, ror #16\n\t"
12539#endif
12540#else
12541        "ubfx	r6, r11, #16, #8\n\t"
12542#endif
12543        "eor	r5, r5, r7, ror #24\n\t"
12544        "lsr	r7, r10, #24\n\t"
12545        "eor	r5, r5, lr, ror #8\n\t"
12546#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12547#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12548        "lsl	lr, r8, #16\n\t"
12549        "lsr	lr, lr, #24\n\t"
12550#else
12551        "uxtb	lr, r8, ror #8\n\t"
12552#endif
12553#else
12554        "ubfx	lr, r8, #8, #8\n\t"
12555#endif
12556        "eor	r5, r5, r2, ror #16\n\t"
12557#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12558#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12559        "lsl	r2, r9, #24\n\t"
12560        "lsr	r2, r2, #24\n\t"
12561#else
12562        "uxtb	r2, r9\n\t"
12563#endif
12564#else
12565        "ubfx	r2, r9, #0, #8\n\t"
12566#endif
12567        "ldr	r6, [r0, r6, lsl #2]\n\t"
12568        "ldr	r7, [r0, r7, lsl #2]\n\t"
12569        "ldr	lr, [r0, lr, lsl #2]\n\t"
12570        "ldr	r2, [r0, r2, lsl #2]\n\t"
12571#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12572#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12573        "lsl	r10, r10, #24\n\t"
12574        "lsr	r10, r10, #24\n\t"
12575#else
12576        "uxtb	r10, r10\n\t"
12577#endif
12578#else
12579        "ubfx	r10, r10, #0, #8\n\t"
12580#endif
12581        "eor	r6, r6, r7, ror #24\n\t"
12582#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12583#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12584        "lsl	r7, r8, #8\n\t"
12585        "lsr	r7, r7, #24\n\t"
12586#else
12587        "uxtb	r7, r8, ror #16\n\t"
12588#endif
12589#else
12590        "ubfx	r7, r8, #16, #8\n\t"
12591#endif
12592        "eor	r6, r6, lr, ror #8\n\t"
12593        "lsr	lr, r11, #24\n\t"
12594        "eor	r6, r6, r2, ror #16\n\t"
12595#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12596#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12597        "lsl	r2, r9, #16\n\t"
12598        "lsr	r2, r2, #24\n\t"
12599#else
12600        "uxtb	r2, r9, ror #8\n\t"
12601#endif
12602#else
12603        "ubfx	r2, r9, #8, #8\n\t"
12604#endif
12605        "ldr	r10, [r0, r10, lsl #2]\n\t"
12606        "ldr	lr, [r0, lr, lsl #2]\n\t"
12607        "ldr	r7, [r0, r7, lsl #2]\n\t"
12608        "ldr	r2, [r0, r2, lsl #2]\n\t"
12609        "eor	lr, lr, r10, ror #24\n\t"
12610        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
12611        "eor	r7, r7, lr, ror #24\n\t"
12612        "eor	r7, r7, r2, ror #8\n\t"
12613        /*   XOR in Key Schedule */
12614        "eor	r4, r4, r8\n\t"
12615        "eor	r5, r5, r9\n\t"
12616        "eor	r6, r6, r10\n\t"
12617        "eor	r7, r7, r11\n\t"
12618        "subs	r1, r1, #1\n\t"
12619        "bne	L_AES_CBC_encrypt_block_nr_256_%=\n\t"
12620#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12621#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12622        "lsl	r8, r5, #8\n\t"
12623        "lsr	r8, r8, #24\n\t"
12624#else
12625        "uxtb	r8, r5, ror #16\n\t"
12626#endif
12627#else
12628        "ubfx	r8, r5, #16, #8\n\t"
12629#endif
12630        "lsr	r11, r4, #24\n\t"
12631#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12632#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12633        "lsl	lr, r6, #16\n\t"
12634        "lsr	lr, lr, #24\n\t"
12635#else
12636        "uxtb	lr, r6, ror #8\n\t"
12637#endif
12638#else
12639        "ubfx	lr, r6, #8, #8\n\t"
12640#endif
12641#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12642#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12643        "lsl	r2, r7, #24\n\t"
12644        "lsr	r2, r2, #24\n\t"
12645#else
12646        "uxtb	r2, r7\n\t"
12647#endif
12648#else
12649        "ubfx	r2, r7, #0, #8\n\t"
12650#endif
12651        "ldr	r8, [r0, r8, lsl #2]\n\t"
12652        "ldr	r11, [r0, r11, lsl #2]\n\t"
12653        "ldr	lr, [r0, lr, lsl #2]\n\t"
12654        "ldr	r2, [r0, r2, lsl #2]\n\t"
12655#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12656#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12657        "lsl	r9, r6, #8\n\t"
12658        "lsr	r9, r9, #24\n\t"
12659#else
12660        "uxtb	r9, r6, ror #16\n\t"
12661#endif
12662#else
12663        "ubfx	r9, r6, #16, #8\n\t"
12664#endif
12665        "eor	r8, r8, r11, ror #24\n\t"
12666        "lsr	r11, r5, #24\n\t"
12667        "eor	r8, r8, lr, ror #8\n\t"
12668#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12669#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12670        "lsl	lr, r7, #16\n\t"
12671        "lsr	lr, lr, #24\n\t"
12672#else
12673        "uxtb	lr, r7, ror #8\n\t"
12674#endif
12675#else
12676        "ubfx	lr, r7, #8, #8\n\t"
12677#endif
12678        "eor	r8, r8, r2, ror #16\n\t"
12679#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12680#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12681        "lsl	r2, r4, #24\n\t"
12682        "lsr	r2, r2, #24\n\t"
12683#else
12684        "uxtb	r2, r4\n\t"
12685#endif
12686#else
12687        "ubfx	r2, r4, #0, #8\n\t"
12688#endif
12689        "ldr	r9, [r0, r9, lsl #2]\n\t"
12690        "ldr	r11, [r0, r11, lsl #2]\n\t"
12691        "ldr	lr, [r0, lr, lsl #2]\n\t"
12692        "ldr	r2, [r0, r2, lsl #2]\n\t"
12693#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12694#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12695        "lsl	r10, r7, #8\n\t"
12696        "lsr	r10, r10, #24\n\t"
12697#else
12698        "uxtb	r10, r7, ror #16\n\t"
12699#endif
12700#else
12701        "ubfx	r10, r7, #16, #8\n\t"
12702#endif
12703        "eor	r9, r9, r11, ror #24\n\t"
12704        "lsr	r11, r6, #24\n\t"
12705        "eor	r9, r9, lr, ror #8\n\t"
12706#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12707#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12708        "lsl	lr, r4, #16\n\t"
12709        "lsr	lr, lr, #24\n\t"
12710#else
12711        "uxtb	lr, r4, ror #8\n\t"
12712#endif
12713#else
12714        "ubfx	lr, r4, #8, #8\n\t"
12715#endif
12716        "eor	r9, r9, r2, ror #16\n\t"
12717#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12718#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12719        "lsl	r2, r5, #24\n\t"
12720        "lsr	r2, r2, #24\n\t"
12721#else
12722        "uxtb	r2, r5\n\t"
12723#endif
12724#else
12725        "ubfx	r2, r5, #0, #8\n\t"
12726#endif
12727        "ldr	r10, [r0, r10, lsl #2]\n\t"
12728        "ldr	r11, [r0, r11, lsl #2]\n\t"
12729        "ldr	lr, [r0, lr, lsl #2]\n\t"
12730        "ldr	r2, [r0, r2, lsl #2]\n\t"
12731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12733        "lsl	r6, r6, #24\n\t"
12734        "lsr	r6, r6, #24\n\t"
12735#else
12736        "uxtb	r6, r6\n\t"
12737#endif
12738#else
12739        "ubfx	r6, r6, #0, #8\n\t"
12740#endif
12741        "eor	r10, r10, r11, ror #24\n\t"
12742#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12743#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12744        "lsl	r11, r4, #8\n\t"
12745        "lsr	r11, r11, #24\n\t"
12746#else
12747        "uxtb	r11, r4, ror #16\n\t"
12748#endif
12749#else
12750        "ubfx	r11, r4, #16, #8\n\t"
12751#endif
12752        "eor	r10, r10, lr, ror #8\n\t"
12753        "lsr	lr, r7, #24\n\t"
12754        "eor	r10, r10, r2, ror #16\n\t"
12755#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12756#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12757        "lsl	r2, r5, #16\n\t"
12758        "lsr	r2, r2, #24\n\t"
12759#else
12760        "uxtb	r2, r5, ror #8\n\t"
12761#endif
12762#else
12763        "ubfx	r2, r5, #8, #8\n\t"
12764#endif
12765        "ldr	r6, [r0, r6, lsl #2]\n\t"
12766        "ldr	lr, [r0, lr, lsl #2]\n\t"
12767        "ldr	r11, [r0, r11, lsl #2]\n\t"
12768        "ldr	r2, [r0, r2, lsl #2]\n\t"
12769        "eor	lr, lr, r6, ror #24\n\t"
12770        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
12771        "eor	r11, r11, lr, ror #24\n\t"
12772        "eor	r11, r11, r2, ror #8\n\t"
12773        /*   XOR in Key Schedule */
12774        "eor	r8, r8, r4\n\t"
12775        "eor	r9, r9, r5\n\t"
12776        "eor	r10, r10, r6\n\t"
12777        "eor	r11, r11, r7\n\t"
12778#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12779#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12780        "lsl	r4, r11, #24\n\t"
12781        "lsr	r4, r4, #24\n\t"
12782#else
12783        "uxtb	r4, r11\n\t"
12784#endif
12785#else
12786        "ubfx	r4, r11, #0, #8\n\t"
12787#endif
12788#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12789#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12790        "lsl	r7, r10, #16\n\t"
12791        "lsr	r7, r7, #24\n\t"
12792#else
12793        "uxtb	r7, r10, ror #8\n\t"
12794#endif
12795#else
12796        "ubfx	r7, r10, #8, #8\n\t"
12797#endif
12798#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12799#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12800        "lsl	lr, r9, #8\n\t"
12801        "lsr	lr, lr, #24\n\t"
12802#else
12803        "uxtb	lr, r9, ror #16\n\t"
12804#endif
12805#else
12806        "ubfx	lr, r9, #16, #8\n\t"
12807#endif
12808        "lsr	r2, r8, #24\n\t"
12809        "ldrb	r4, [r0, r4, lsl #2]\n\t"
12810        "ldrb	r7, [r0, r7, lsl #2]\n\t"
12811        "ldrb	lr, [r0, lr, lsl #2]\n\t"
12812        "ldrb	r2, [r0, r2, lsl #2]\n\t"
12813#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12814#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12815        "lsl	r5, r8, #24\n\t"
12816        "lsr	r5, r5, #24\n\t"
12817#else
12818        "uxtb	r5, r8\n\t"
12819#endif
12820#else
12821        "ubfx	r5, r8, #0, #8\n\t"
12822#endif
12823        "eor	r4, r4, r7, lsl #8\n\t"
12824#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12825#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12826        "lsl	r7, r11, #16\n\t"
12827        "lsr	r7, r7, #24\n\t"
12828#else
12829        "uxtb	r7, r11, ror #8\n\t"
12830#endif
12831#else
12832        "ubfx	r7, r11, #8, #8\n\t"
12833#endif
12834        "eor	r4, r4, lr, lsl #16\n\t"
12835#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12836#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12837        "lsl	lr, r10, #8\n\t"
12838        "lsr	lr, lr, #24\n\t"
12839#else
12840        "uxtb	lr, r10, ror #16\n\t"
12841#endif
12842#else
12843        "ubfx	lr, r10, #16, #8\n\t"
12844#endif
12845        "eor	r4, r4, r2, lsl #24\n\t"
12846        "lsr	r2, r9, #24\n\t"
12847        "ldrb	r5, [r0, r5, lsl #2]\n\t"
12848        "ldrb	r7, [r0, r7, lsl #2]\n\t"
12849        "ldrb	lr, [r0, lr, lsl #2]\n\t"
12850        "ldrb	r2, [r0, r2, lsl #2]\n\t"
12851#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12852#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12853        "lsl	r6, r9, #24\n\t"
12854        "lsr	r6, r6, #24\n\t"
12855#else
12856        "uxtb	r6, r9\n\t"
12857#endif
12858#else
12859        "ubfx	r6, r9, #0, #8\n\t"
12860#endif
12861        "eor	r5, r5, r7, lsl #8\n\t"
12862#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12863#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12864        "lsl	r7, r8, #16\n\t"
12865        "lsr	r7, r7, #24\n\t"
12866#else
12867        "uxtb	r7, r8, ror #8\n\t"
12868#endif
12869#else
12870        "ubfx	r7, r8, #8, #8\n\t"
12871#endif
12872        "eor	r5, r5, lr, lsl #16\n\t"
12873#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12874#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12875        "lsl	lr, r11, #8\n\t"
12876        "lsr	lr, lr, #24\n\t"
12877#else
12878        "uxtb	lr, r11, ror #16\n\t"
12879#endif
12880#else
12881        "ubfx	lr, r11, #16, #8\n\t"
12882#endif
12883        "eor	r5, r5, r2, lsl #24\n\t"
12884        "lsr	r2, r10, #24\n\t"
12885        "ldrb	r6, [r0, r6, lsl #2]\n\t"
12886        "ldrb	r7, [r0, r7, lsl #2]\n\t"
12887        "ldrb	lr, [r0, lr, lsl #2]\n\t"
12888        "ldrb	r2, [r0, r2, lsl #2]\n\t"
12889        "lsr	r11, r11, #24\n\t"
12890        "eor	r6, r6, r7, lsl #8\n\t"
12891#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12892#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12893        "lsl	r7, r10, #24\n\t"
12894        "lsr	r7, r7, #24\n\t"
12895#else
12896        "uxtb	r7, r10\n\t"
12897#endif
12898#else
12899        "ubfx	r7, r10, #0, #8\n\t"
12900#endif
12901        "eor	r6, r6, lr, lsl #16\n\t"
12902#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12903#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12904        "lsl	lr, r9, #16\n\t"
12905        "lsr	lr, lr, #24\n\t"
12906#else
12907        "uxtb	lr, r9, ror #8\n\t"
12908#endif
12909#else
12910        "ubfx	lr, r9, #8, #8\n\t"
12911#endif
12912        "eor	r6, r6, r2, lsl #24\n\t"
12913#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12914#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12915        "lsl	r2, r8, #8\n\t"
12916        "lsr	r2, r2, #24\n\t"
12917#else
12918        "uxtb	r2, r8, ror #16\n\t"
12919#endif
12920#else
12921        "ubfx	r2, r8, #16, #8\n\t"
12922#endif
12923        "ldrb	r11, [r0, r11, lsl #2]\n\t"
12924        "ldrb	r7, [r0, r7, lsl #2]\n\t"
12925        "ldrb	lr, [r0, lr, lsl #2]\n\t"
12926        "ldrb	r2, [r0, r2, lsl #2]\n\t"
12927        "eor	lr, lr, r11, lsl #16\n\t"
12928        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
12929        "eor	r7, r7, lr, lsl #8\n\t"
12930        "eor	r7, r7, r2, lsl #16\n\t"
12931        /*   XOR in Key Schedule */
12932        "eor	r4, r4, r8\n\t"
12933        "eor	r5, r5, r9\n\t"
12934        "eor	r6, r6, r10\n\t"
12935        "eor	r7, r7, r11\n\t"
12936#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
12937        "pop	{r1, %[len], lr}\n\t"
12938        "ldr	%[ks], [sp]\n\t"
12939#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12940        "eor	r8, r4, r4, ror #16\n\t"
12941        "eor	r9, r5, r5, ror #16\n\t"
12942        "eor	r10, r6, r6, ror #16\n\t"
12943        "eor	r11, r7, r7, ror #16\n\t"
12944        "bic	r8, r8, #0xff0000\n\t"
12945        "bic	r9, r9, #0xff0000\n\t"
12946        "bic	r10, r10, #0xff0000\n\t"
12947        "bic	r11, r11, #0xff0000\n\t"
12948        "ror	r4, r4, #8\n\t"
12949        "ror	r5, r5, #8\n\t"
12950        "ror	r6, r6, #8\n\t"
12951        "ror	r7, r7, #8\n\t"
12952        "eor	r4, r4, r8, lsr #8\n\t"
12953        "eor	r5, r5, r9, lsr #8\n\t"
12954        "eor	r6, r6, r10, lsr #8\n\t"
12955        "eor	r7, r7, r11, lsr #8\n\t"
12956#else
12957        "rev	r4, r4\n\t"
12958        "rev	r5, r5\n\t"
12959        "rev	r6, r6\n\t"
12960        "rev	r7, r7\n\t"
12961#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
12962        "str	r4, [%[out]]\n\t"
12963        "str	r5, [%[out], #4]\n\t"
12964        "str	r6, [%[out], #8]\n\t"
12965        "str	r7, [%[out], #12]\n\t"
12966        "subs	%[len], %[len], #16\n\t"
12967        "add	lr, lr, #16\n\t"
12968        "add	%[out], %[out], #16\n\t"
12969        "bne	L_AES_CBC_encrypt_loop_block_256_%=\n\t"
12970        "b	L_AES_CBC_encrypt_end_%=\n\t"
12971        "\n"
12972    "L_AES_CBC_encrypt_start_block_192_%=:\n\t"
12973        "\n"
12974    "L_AES_CBC_encrypt_loop_block_192_%=:\n\t"
12975        "ldr	r8, [lr]\n\t"
12976        "ldr	r9, [lr, #4]\n\t"
12977        "ldr	r10, [lr, #8]\n\t"
12978        "ldr	r11, [lr, #12]\n\t"
12979        "eor	r4, r4, r8\n\t"
12980        "eor	r5, r5, r9\n\t"
12981        "eor	r6, r6, r10\n\t"
12982        "eor	r7, r7, r11\n\t"
12983        "push	{r1, %[len], lr}\n\t"
12984#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12985        "eor	r8, r4, r4, ror #16\n\t"
12986        "eor	r9, r5, r5, ror #16\n\t"
12987        "eor	r10, r6, r6, ror #16\n\t"
12988        "eor	r11, r7, r7, ror #16\n\t"
12989        "bic	r8, r8, #0xff0000\n\t"
12990        "bic	r9, r9, #0xff0000\n\t"
12991        "bic	r10, r10, #0xff0000\n\t"
12992        "bic	r11, r11, #0xff0000\n\t"
12993        "ror	r4, r4, #8\n\t"
12994        "ror	r5, r5, #8\n\t"
12995        "ror	r6, r6, #8\n\t"
12996        "ror	r7, r7, #8\n\t"
12997        "eor	r4, r4, r8, lsr #8\n\t"
12998        "eor	r5, r5, r9, lsr #8\n\t"
12999        "eor	r6, r6, r10, lsr #8\n\t"
13000        "eor	r7, r7, r11, lsr #8\n\t"
13001#else
13002        "rev	r4, r4\n\t"
13003        "rev	r5, r5\n\t"
13004        "rev	r6, r6\n\t"
13005        "rev	r7, r7\n\t"
13006#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
13007        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
13008        /* Round: 0 - XOR in key schedule */
13009        "eor	r4, r4, r8\n\t"
13010        "eor	r5, r5, r9\n\t"
13011        "eor	r6, r6, r10\n\t"
13012        "eor	r7, r7, r11\n\t"
13013        "mov	r1, #5\n\t"
13014#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
13015        "bl	AES_encrypt_block\n\t"
13016#else
13017        "\n"
13018    "L_AES_CBC_encrypt_block_nr_192_%=:\n\t"
13019#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13020#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13021        "lsl	r8, r5, #8\n\t"
13022        "lsr	r8, r8, #24\n\t"
13023#else
13024        "uxtb	r8, r5, ror #16\n\t"
13025#endif
13026#else
13027        "ubfx	r8, r5, #16, #8\n\t"
13028#endif
13029        "lsr	r11, r4, #24\n\t"
13030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13031#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13032        "lsl	lr, r6, #16\n\t"
13033        "lsr	lr, lr, #24\n\t"
13034#else
13035        "uxtb	lr, r6, ror #8\n\t"
13036#endif
13037#else
13038        "ubfx	lr, r6, #8, #8\n\t"
13039#endif
13040#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13041#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13042        "lsl	r2, r7, #24\n\t"
13043        "lsr	r2, r2, #24\n\t"
13044#else
13045        "uxtb	r2, r7\n\t"
13046#endif
13047#else
13048        "ubfx	r2, r7, #0, #8\n\t"
13049#endif
13050        "ldr	r8, [r0, r8, lsl #2]\n\t"
13051        "ldr	r11, [r0, r11, lsl #2]\n\t"
13052        "ldr	lr, [r0, lr, lsl #2]\n\t"
13053        "ldr	r2, [r0, r2, lsl #2]\n\t"
13054#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13055#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13056        "lsl	r9, r6, #8\n\t"
13057        "lsr	r9, r9, #24\n\t"
13058#else
13059        "uxtb	r9, r6, ror #16\n\t"
13060#endif
13061#else
13062        "ubfx	r9, r6, #16, #8\n\t"
13063#endif
13064        "eor	r8, r8, r11, ror #24\n\t"
13065        "lsr	r11, r5, #24\n\t"
13066        "eor	r8, r8, lr, ror #8\n\t"
13067#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13068#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13069        "lsl	lr, r7, #16\n\t"
13070        "lsr	lr, lr, #24\n\t"
13071#else
13072        "uxtb	lr, r7, ror #8\n\t"
13073#endif
13074#else
13075        "ubfx	lr, r7, #8, #8\n\t"
13076#endif
13077        "eor	r8, r8, r2, ror #16\n\t"
13078#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13079#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13080        "lsl	r2, r4, #24\n\t"
13081        "lsr	r2, r2, #24\n\t"
13082#else
13083        "uxtb	r2, r4\n\t"
13084#endif
13085#else
13086        "ubfx	r2, r4, #0, #8\n\t"
13087#endif
13088        "ldr	r9, [r0, r9, lsl #2]\n\t"
13089        "ldr	r11, [r0, r11, lsl #2]\n\t"
13090        "ldr	lr, [r0, lr, lsl #2]\n\t"
13091        "ldr	r2, [r0, r2, lsl #2]\n\t"
13092#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13093#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13094        "lsl	r10, r7, #8\n\t"
13095        "lsr	r10, r10, #24\n\t"
13096#else
13097        "uxtb	r10, r7, ror #16\n\t"
13098#endif
13099#else
13100        "ubfx	r10, r7, #16, #8\n\t"
13101#endif
13102        "eor	r9, r9, r11, ror #24\n\t"
13103        "lsr	r11, r6, #24\n\t"
13104        "eor	r9, r9, lr, ror #8\n\t"
13105#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13107        "lsl	lr, r4, #16\n\t"
13108        "lsr	lr, lr, #24\n\t"
13109#else
13110        "uxtb	lr, r4, ror #8\n\t"
13111#endif
13112#else
13113        "ubfx	lr, r4, #8, #8\n\t"
13114#endif
13115        "eor	r9, r9, r2, ror #16\n\t"
13116#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13117#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13118        "lsl	r2, r5, #24\n\t"
13119        "lsr	r2, r2, #24\n\t"
13120#else
13121        "uxtb	r2, r5\n\t"
13122#endif
13123#else
13124        "ubfx	r2, r5, #0, #8\n\t"
13125#endif
13126        "ldr	r10, [r0, r10, lsl #2]\n\t"
13127        "ldr	r11, [r0, r11, lsl #2]\n\t"
13128        "ldr	lr, [r0, lr, lsl #2]\n\t"
13129        "ldr	r2, [r0, r2, lsl #2]\n\t"
13130#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13131#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13132        "lsl	r6, r6, #24\n\t"
13133        "lsr	r6, r6, #24\n\t"
13134#else
13135        "uxtb	r6, r6\n\t"
13136#endif
13137#else
13138        "ubfx	r6, r6, #0, #8\n\t"
13139#endif
13140        "eor	r10, r10, r11, ror #24\n\t"
13141#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13142#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13143        "lsl	r11, r4, #8\n\t"
13144        "lsr	r11, r11, #24\n\t"
13145#else
13146        "uxtb	r11, r4, ror #16\n\t"
13147#endif
13148#else
13149        "ubfx	r11, r4, #16, #8\n\t"
13150#endif
13151        "eor	r10, r10, lr, ror #8\n\t"
13152        "lsr	lr, r7, #24\n\t"
13153        "eor	r10, r10, r2, ror #16\n\t"
13154#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13155#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13156        "lsl	r2, r5, #16\n\t"
13157        "lsr	r2, r2, #24\n\t"
13158#else
13159        "uxtb	r2, r5, ror #8\n\t"
13160#endif
13161#else
13162        "ubfx	r2, r5, #8, #8\n\t"
13163#endif
13164        "ldr	r6, [r0, r6, lsl #2]\n\t"
13165        "ldr	lr, [r0, lr, lsl #2]\n\t"
13166        "ldr	r11, [r0, r11, lsl #2]\n\t"
13167        "ldr	r2, [r0, r2, lsl #2]\n\t"
13168        "eor	lr, lr, r6, ror #24\n\t"
13169        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
13170        "eor	r11, r11, lr, ror #24\n\t"
13171        "eor	r11, r11, r2, ror #8\n\t"
13172        /*   XOR in Key Schedule */
13173        "eor	r8, r8, r4\n\t"
13174        "eor	r9, r9, r5\n\t"
13175        "eor	r10, r10, r6\n\t"
13176        "eor	r11, r11, r7\n\t"
13177#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13178#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13179        "lsl	r4, r9, #8\n\t"
13180        "lsr	r4, r4, #24\n\t"
13181#else
13182        "uxtb	r4, r9, ror #16\n\t"
13183#endif
13184#else
13185        "ubfx	r4, r9, #16, #8\n\t"
13186#endif
13187        "lsr	r7, r8, #24\n\t"
13188#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13189#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13190        "lsl	lr, r10, #16\n\t"
13191        "lsr	lr, lr, #24\n\t"
13192#else
13193        "uxtb	lr, r10, ror #8\n\t"
13194#endif
13195#else
13196        "ubfx	lr, r10, #8, #8\n\t"
13197#endif
13198#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13200        "lsl	r2, r11, #24\n\t"
13201        "lsr	r2, r2, #24\n\t"
13202#else
13203        "uxtb	r2, r11\n\t"
13204#endif
13205#else
13206        "ubfx	r2, r11, #0, #8\n\t"
13207#endif
13208        "ldr	r4, [r0, r4, lsl #2]\n\t"
13209        "ldr	r7, [r0, r7, lsl #2]\n\t"
13210        "ldr	lr, [r0, lr, lsl #2]\n\t"
13211        "ldr	r2, [r0, r2, lsl #2]\n\t"
13212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13213#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13214        "lsl	r5, r10, #8\n\t"
13215        "lsr	r5, r5, #24\n\t"
13216#else
13217        "uxtb	r5, r10, ror #16\n\t"
13218#endif
13219#else
13220        "ubfx	r5, r10, #16, #8\n\t"
13221#endif
13222        "eor	r4, r4, r7, ror #24\n\t"
13223        "lsr	r7, r9, #24\n\t"
13224        "eor	r4, r4, lr, ror #8\n\t"
13225#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13226#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13227        "lsl	lr, r11, #16\n\t"
13228        "lsr	lr, lr, #24\n\t"
13229#else
13230        "uxtb	lr, r11, ror #8\n\t"
13231#endif
13232#else
13233        "ubfx	lr, r11, #8, #8\n\t"
13234#endif
13235        "eor	r4, r4, r2, ror #16\n\t"
13236#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13237#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13238        "lsl	r2, r8, #24\n\t"
13239        "lsr	r2, r2, #24\n\t"
13240#else
13241        "uxtb	r2, r8\n\t"
13242#endif
13243#else
13244        "ubfx	r2, r8, #0, #8\n\t"
13245#endif
13246        "ldr	r5, [r0, r5, lsl #2]\n\t"
13247        "ldr	r7, [r0, r7, lsl #2]\n\t"
13248        "ldr	lr, [r0, lr, lsl #2]\n\t"
13249        "ldr	r2, [r0, r2, lsl #2]\n\t"
13250#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13251#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13252        "lsl	r6, r11, #8\n\t"
13253        "lsr	r6, r6, #24\n\t"
13254#else
13255        "uxtb	r6, r11, ror #16\n\t"
13256#endif
13257#else
13258        "ubfx	r6, r11, #16, #8\n\t"
13259#endif
13260        "eor	r5, r5, r7, ror #24\n\t"
13261        "lsr	r7, r10, #24\n\t"
13262        "eor	r5, r5, lr, ror #8\n\t"
13263#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13264#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13265        "lsl	lr, r8, #16\n\t"
13266        "lsr	lr, lr, #24\n\t"
13267#else
13268        "uxtb	lr, r8, ror #8\n\t"
13269#endif
13270#else
13271        "ubfx	lr, r8, #8, #8\n\t"
13272#endif
13273        "eor	r5, r5, r2, ror #16\n\t"
13274#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13275#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13276        "lsl	r2, r9, #24\n\t"
13277        "lsr	r2, r2, #24\n\t"
13278#else
13279        "uxtb	r2, r9\n\t"
13280#endif
13281#else
13282        "ubfx	r2, r9, #0, #8\n\t"
13283#endif
13284        "ldr	r6, [r0, r6, lsl #2]\n\t"
13285        "ldr	r7, [r0, r7, lsl #2]\n\t"
13286        "ldr	lr, [r0, lr, lsl #2]\n\t"
13287        "ldr	r2, [r0, r2, lsl #2]\n\t"
13288#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13289#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13290        "lsl	r10, r10, #24\n\t"
13291        "lsr	r10, r10, #24\n\t"
13292#else
13293        "uxtb	r10, r10\n\t"
13294#endif
13295#else
13296        "ubfx	r10, r10, #0, #8\n\t"
13297#endif
13298        "eor	r6, r6, r7, ror #24\n\t"
13299#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13300#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13301        "lsl	r7, r8, #8\n\t"
13302        "lsr	r7, r7, #24\n\t"
13303#else
13304        "uxtb	r7, r8, ror #16\n\t"
13305#endif
13306#else
13307        "ubfx	r7, r8, #16, #8\n\t"
13308#endif
13309        "eor	r6, r6, lr, ror #8\n\t"
13310        "lsr	lr, r11, #24\n\t"
13311        "eor	r6, r6, r2, ror #16\n\t"
13312#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13313#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13314        "lsl	r2, r9, #16\n\t"
13315        "lsr	r2, r2, #24\n\t"
13316#else
13317        "uxtb	r2, r9, ror #8\n\t"
13318#endif
13319#else
13320        "ubfx	r2, r9, #8, #8\n\t"
13321#endif
13322        "ldr	r10, [r0, r10, lsl #2]\n\t"
13323        "ldr	lr, [r0, lr, lsl #2]\n\t"
13324        "ldr	r7, [r0, r7, lsl #2]\n\t"
13325        "ldr	r2, [r0, r2, lsl #2]\n\t"
13326        "eor	lr, lr, r10, ror #24\n\t"
13327        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
13328        "eor	r7, r7, lr, ror #24\n\t"
13329        "eor	r7, r7, r2, ror #8\n\t"
13330        /*   XOR in Key Schedule */
13331        "eor	r4, r4, r8\n\t"
13332        "eor	r5, r5, r9\n\t"
13333        "eor	r6, r6, r10\n\t"
13334        "eor	r7, r7, r11\n\t"
13335        "subs	r1, r1, #1\n\t"
13336        "bne	L_AES_CBC_encrypt_block_nr_192_%=\n\t"
13337#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13338#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13339        "lsl	r8, r5, #8\n\t"
13340        "lsr	r8, r8, #24\n\t"
13341#else
13342        "uxtb	r8, r5, ror #16\n\t"
13343#endif
13344#else
13345        "ubfx	r8, r5, #16, #8\n\t"
13346#endif
13347        "lsr	r11, r4, #24\n\t"
13348#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13349#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13350        "lsl	lr, r6, #16\n\t"
13351        "lsr	lr, lr, #24\n\t"
13352#else
13353        "uxtb	lr, r6, ror #8\n\t"
13354#endif
13355#else
13356        "ubfx	lr, r6, #8, #8\n\t"
13357#endif
13358#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13359#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13360        "lsl	r2, r7, #24\n\t"
13361        "lsr	r2, r2, #24\n\t"
13362#else
13363        "uxtb	r2, r7\n\t"
13364#endif
13365#else
13366        "ubfx	r2, r7, #0, #8\n\t"
13367#endif
13368        "ldr	r8, [r0, r8, lsl #2]\n\t"
13369        "ldr	r11, [r0, r11, lsl #2]\n\t"
13370        "ldr	lr, [r0, lr, lsl #2]\n\t"
13371        "ldr	r2, [r0, r2, lsl #2]\n\t"
13372#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13373#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13374        "lsl	r9, r6, #8\n\t"
13375        "lsr	r9, r9, #24\n\t"
13376#else
13377        "uxtb	r9, r6, ror #16\n\t"
13378#endif
13379#else
13380        "ubfx	r9, r6, #16, #8\n\t"
13381#endif
13382        "eor	r8, r8, r11, ror #24\n\t"
13383        "lsr	r11, r5, #24\n\t"
13384        "eor	r8, r8, lr, ror #8\n\t"
13385#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13386#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13387        "lsl	lr, r7, #16\n\t"
13388        "lsr	lr, lr, #24\n\t"
13389#else
13390        "uxtb	lr, r7, ror #8\n\t"
13391#endif
13392#else
13393        "ubfx	lr, r7, #8, #8\n\t"
13394#endif
13395        "eor	r8, r8, r2, ror #16\n\t"
13396#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13397#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13398        "lsl	r2, r4, #24\n\t"
13399        "lsr	r2, r2, #24\n\t"
13400#else
13401        "uxtb	r2, r4\n\t"
13402#endif
13403#else
13404        "ubfx	r2, r4, #0, #8\n\t"
13405#endif
13406        "ldr	r9, [r0, r9, lsl #2]\n\t"
13407        "ldr	r11, [r0, r11, lsl #2]\n\t"
13408        "ldr	lr, [r0, lr, lsl #2]\n\t"
13409        "ldr	r2, [r0, r2, lsl #2]\n\t"
13410#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13411#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13412        "lsl	r10, r7, #8\n\t"
13413        "lsr	r10, r10, #24\n\t"
13414#else
13415        "uxtb	r10, r7, ror #16\n\t"
13416#endif
13417#else
13418        "ubfx	r10, r7, #16, #8\n\t"
13419#endif
13420        "eor	r9, r9, r11, ror #24\n\t"
13421        "lsr	r11, r6, #24\n\t"
13422        "eor	r9, r9, lr, ror #8\n\t"
13423#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13425        "lsl	lr, r4, #16\n\t"
13426        "lsr	lr, lr, #24\n\t"
13427#else
13428        "uxtb	lr, r4, ror #8\n\t"
13429#endif
13430#else
13431        "ubfx	lr, r4, #8, #8\n\t"
13432#endif
13433        "eor	r9, r9, r2, ror #16\n\t"
13434#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13435#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13436        "lsl	r2, r5, #24\n\t"
13437        "lsr	r2, r2, #24\n\t"
13438#else
13439        "uxtb	r2, r5\n\t"
13440#endif
13441#else
13442        "ubfx	r2, r5, #0, #8\n\t"
13443#endif
13444        "ldr	r10, [r0, r10, lsl #2]\n\t"
13445        "ldr	r11, [r0, r11, lsl #2]\n\t"
13446        "ldr	lr, [r0, lr, lsl #2]\n\t"
13447        "ldr	r2, [r0, r2, lsl #2]\n\t"
13448#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13449#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13450        "lsl	r6, r6, #24\n\t"
13451        "lsr	r6, r6, #24\n\t"
13452#else
13453        "uxtb	r6, r6\n\t"
13454#endif
13455#else
13456        "ubfx	r6, r6, #0, #8\n\t"
13457#endif
13458        "eor	r10, r10, r11, ror #24\n\t"
13459#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13460#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13461        "lsl	r11, r4, #8\n\t"
13462        "lsr	r11, r11, #24\n\t"
13463#else
13464        "uxtb	r11, r4, ror #16\n\t"
13465#endif
13466#else
13467        "ubfx	r11, r4, #16, #8\n\t"
13468#endif
13469        "eor	r10, r10, lr, ror #8\n\t"
13470        "lsr	lr, r7, #24\n\t"
13471        "eor	r10, r10, r2, ror #16\n\t"
13472#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13473#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13474        "lsl	r2, r5, #16\n\t"
13475        "lsr	r2, r2, #24\n\t"
13476#else
13477        "uxtb	r2, r5, ror #8\n\t"
13478#endif
13479#else
13480        "ubfx	r2, r5, #8, #8\n\t"
13481#endif
13482        "ldr	r6, [r0, r6, lsl #2]\n\t"
13483        "ldr	lr, [r0, lr, lsl #2]\n\t"
13484        "ldr	r11, [r0, r11, lsl #2]\n\t"
13485        "ldr	r2, [r0, r2, lsl #2]\n\t"
13486        "eor	lr, lr, r6, ror #24\n\t"
13487        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
13488        "eor	r11, r11, lr, ror #24\n\t"
13489        "eor	r11, r11, r2, ror #8\n\t"
13490        /*   XOR in Key Schedule */
13491        "eor	r8, r8, r4\n\t"
13492        "eor	r9, r9, r5\n\t"
13493        "eor	r10, r10, r6\n\t"
13494        "eor	r11, r11, r7\n\t"
13495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13496#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13497        "lsl	r4, r11, #24\n\t"
13498        "lsr	r4, r4, #24\n\t"
13499#else
13500        "uxtb	r4, r11\n\t"
13501#endif
13502#else
13503        "ubfx	r4, r11, #0, #8\n\t"
13504#endif
13505#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13506#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13507        "lsl	r7, r10, #16\n\t"
13508        "lsr	r7, r7, #24\n\t"
13509#else
13510        "uxtb	r7, r10, ror #8\n\t"
13511#endif
13512#else
13513        "ubfx	r7, r10, #8, #8\n\t"
13514#endif
13515#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13516#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13517        "lsl	lr, r9, #8\n\t"
13518        "lsr	lr, lr, #24\n\t"
13519#else
13520        "uxtb	lr, r9, ror #16\n\t"
13521#endif
13522#else
13523        "ubfx	lr, r9, #16, #8\n\t"
13524#endif
13525        "lsr	r2, r8, #24\n\t"
13526        "ldrb	r4, [r0, r4, lsl #2]\n\t"
13527        "ldrb	r7, [r0, r7, lsl #2]\n\t"
13528        "ldrb	lr, [r0, lr, lsl #2]\n\t"
13529        "ldrb	r2, [r0, r2, lsl #2]\n\t"
13530#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13531#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13532        "lsl	r5, r8, #24\n\t"
13533        "lsr	r5, r5, #24\n\t"
13534#else
13535        "uxtb	r5, r8\n\t"
13536#endif
13537#else
13538        "ubfx	r5, r8, #0, #8\n\t"
13539#endif
13540        "eor	r4, r4, r7, lsl #8\n\t"
13541#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13542#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13543        "lsl	r7, r11, #16\n\t"
13544        "lsr	r7, r7, #24\n\t"
13545#else
13546        "uxtb	r7, r11, ror #8\n\t"
13547#endif
13548#else
13549        "ubfx	r7, r11, #8, #8\n\t"
13550#endif
13551        "eor	r4, r4, lr, lsl #16\n\t"
13552#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13553#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13554        "lsl	lr, r10, #8\n\t"
13555        "lsr	lr, lr, #24\n\t"
13556#else
13557        "uxtb	lr, r10, ror #16\n\t"
13558#endif
13559#else
13560        "ubfx	lr, r10, #16, #8\n\t"
13561#endif
13562        "eor	r4, r4, r2, lsl #24\n\t"
13563        "lsr	r2, r9, #24\n\t"
13564        "ldrb	r5, [r0, r5, lsl #2]\n\t"
13565        "ldrb	r7, [r0, r7, lsl #2]\n\t"
13566        "ldrb	lr, [r0, lr, lsl #2]\n\t"
13567        "ldrb	r2, [r0, r2, lsl #2]\n\t"
13568#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13569#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13570        "lsl	r6, r9, #24\n\t"
13571        "lsr	r6, r6, #24\n\t"
13572#else
13573        "uxtb	r6, r9\n\t"
13574#endif
13575#else
13576        "ubfx	r6, r9, #0, #8\n\t"
13577#endif
13578        "eor	r5, r5, r7, lsl #8\n\t"
13579#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13580#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13581        "lsl	r7, r8, #16\n\t"
13582        "lsr	r7, r7, #24\n\t"
13583#else
13584        "uxtb	r7, r8, ror #8\n\t"
13585#endif
13586#else
13587        "ubfx	r7, r8, #8, #8\n\t"
13588#endif
13589        "eor	r5, r5, lr, lsl #16\n\t"
13590#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13591#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13592        "lsl	lr, r11, #8\n\t"
13593        "lsr	lr, lr, #24\n\t"
13594#else
13595        "uxtb	lr, r11, ror #16\n\t"
13596#endif
13597#else
13598        "ubfx	lr, r11, #16, #8\n\t"
13599#endif
13600        "eor	r5, r5, r2, lsl #24\n\t"
13601        "lsr	r2, r10, #24\n\t"
13602        "ldrb	r6, [r0, r6, lsl #2]\n\t"
13603        "ldrb	r7, [r0, r7, lsl #2]\n\t"
13604        "ldrb	lr, [r0, lr, lsl #2]\n\t"
13605        "ldrb	r2, [r0, r2, lsl #2]\n\t"
13606        "lsr	r11, r11, #24\n\t"
13607        "eor	r6, r6, r7, lsl #8\n\t"
13608#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13609#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13610        "lsl	r7, r10, #24\n\t"
13611        "lsr	r7, r7, #24\n\t"
13612#else
13613        "uxtb	r7, r10\n\t"
13614#endif
13615#else
13616        "ubfx	r7, r10, #0, #8\n\t"
13617#endif
13618        "eor	r6, r6, lr, lsl #16\n\t"
13619#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13620#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13621        "lsl	lr, r9, #16\n\t"
13622        "lsr	lr, lr, #24\n\t"
13623#else
13624        "uxtb	lr, r9, ror #8\n\t"
13625#endif
13626#else
13627        "ubfx	lr, r9, #8, #8\n\t"
13628#endif
13629        "eor	r6, r6, r2, lsl #24\n\t"
13630#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13631#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13632        "lsl	r2, r8, #8\n\t"
13633        "lsr	r2, r2, #24\n\t"
13634#else
13635        "uxtb	r2, r8, ror #16\n\t"
13636#endif
13637#else
13638        "ubfx	r2, r8, #16, #8\n\t"
13639#endif
13640        "ldrb	r11, [r0, r11, lsl #2]\n\t"
13641        "ldrb	r7, [r0, r7, lsl #2]\n\t"
13642        "ldrb	lr, [r0, lr, lsl #2]\n\t"
13643        "ldrb	r2, [r0, r2, lsl #2]\n\t"
13644        "eor	lr, lr, r11, lsl #16\n\t"
13645        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
13646        "eor	r7, r7, lr, lsl #8\n\t"
13647        "eor	r7, r7, r2, lsl #16\n\t"
13648        /*   XOR in Key Schedule */
13649        "eor	r4, r4, r8\n\t"
13650        "eor	r5, r5, r9\n\t"
13651        "eor	r6, r6, r10\n\t"
13652        "eor	r7, r7, r11\n\t"
13653#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
13654        "pop	{r1, %[len], lr}\n\t"
13655        "ldr	%[ks], [sp]\n\t"
13656#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13657        "eor	r8, r4, r4, ror #16\n\t"
13658        "eor	r9, r5, r5, ror #16\n\t"
13659        "eor	r10, r6, r6, ror #16\n\t"
13660        "eor	r11, r7, r7, ror #16\n\t"
13661        "bic	r8, r8, #0xff0000\n\t"
13662        "bic	r9, r9, #0xff0000\n\t"
13663        "bic	r10, r10, #0xff0000\n\t"
13664        "bic	r11, r11, #0xff0000\n\t"
13665        "ror	r4, r4, #8\n\t"
13666        "ror	r5, r5, #8\n\t"
13667        "ror	r6, r6, #8\n\t"
13668        "ror	r7, r7, #8\n\t"
13669        "eor	r4, r4, r8, lsr #8\n\t"
13670        "eor	r5, r5, r9, lsr #8\n\t"
13671        "eor	r6, r6, r10, lsr #8\n\t"
13672        "eor	r7, r7, r11, lsr #8\n\t"
13673#else
13674        "rev	r4, r4\n\t"
13675        "rev	r5, r5\n\t"
13676        "rev	r6, r6\n\t"
13677        "rev	r7, r7\n\t"
13678#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
13679        "str	r4, [%[out]]\n\t"
13680        "str	r5, [%[out], #4]\n\t"
13681        "str	r6, [%[out], #8]\n\t"
13682        "str	r7, [%[out], #12]\n\t"
13683        "subs	%[len], %[len], #16\n\t"
13684        "add	lr, lr, #16\n\t"
13685        "add	%[out], %[out], #16\n\t"
13686        "bne	L_AES_CBC_encrypt_loop_block_192_%=\n\t"
13687        "b	L_AES_CBC_encrypt_end_%=\n\t"
13688        "\n"
13689    "L_AES_CBC_encrypt_start_block_128_%=:\n\t"
13690        "\n"
13691    "L_AES_CBC_encrypt_loop_block_128_%=:\n\t"
13692        "ldr	r8, [lr]\n\t"
13693        "ldr	r9, [lr, #4]\n\t"
13694        "ldr	r10, [lr, #8]\n\t"
13695        "ldr	r11, [lr, #12]\n\t"
13696        "eor	r4, r4, r8\n\t"
13697        "eor	r5, r5, r9\n\t"
13698        "eor	r6, r6, r10\n\t"
13699        "eor	r7, r7, r11\n\t"
13700        "push	{r1, %[len], lr}\n\t"
13701#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13702        "eor	r8, r4, r4, ror #16\n\t"
13703        "eor	r9, r5, r5, ror #16\n\t"
13704        "eor	r10, r6, r6, ror #16\n\t"
13705        "eor	r11, r7, r7, ror #16\n\t"
13706        "bic	r8, r8, #0xff0000\n\t"
13707        "bic	r9, r9, #0xff0000\n\t"
13708        "bic	r10, r10, #0xff0000\n\t"
13709        "bic	r11, r11, #0xff0000\n\t"
13710        "ror	r4, r4, #8\n\t"
13711        "ror	r5, r5, #8\n\t"
13712        "ror	r6, r6, #8\n\t"
13713        "ror	r7, r7, #8\n\t"
13714        "eor	r4, r4, r8, lsr #8\n\t"
13715        "eor	r5, r5, r9, lsr #8\n\t"
13716        "eor	r6, r6, r10, lsr #8\n\t"
13717        "eor	r7, r7, r11, lsr #8\n\t"
13718#else
13719        "rev	r4, r4\n\t"
13720        "rev	r5, r5\n\t"
13721        "rev	r6, r6\n\t"
13722        "rev	r7, r7\n\t"
13723#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
13724        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
13725        /* Round: 0 - XOR in key schedule */
13726        "eor	r4, r4, r8\n\t"
13727        "eor	r5, r5, r9\n\t"
13728        "eor	r6, r6, r10\n\t"
13729        "eor	r7, r7, r11\n\t"
13730        "mov	r1, #4\n\t"
13731#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
13732        "bl	AES_encrypt_block\n\t"
13733#else
13734        "\n"
13735    "L_AES_CBC_encrypt_block_nr_128_%=:\n\t"
13736#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13737#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13738        "lsl	r8, r5, #8\n\t"
13739        "lsr	r8, r8, #24\n\t"
13740#else
13741        "uxtb	r8, r5, ror #16\n\t"
13742#endif
13743#else
13744        "ubfx	r8, r5, #16, #8\n\t"
13745#endif
13746        "lsr	r11, r4, #24\n\t"
13747#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13748#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13749        "lsl	lr, r6, #16\n\t"
13750        "lsr	lr, lr, #24\n\t"
13751#else
13752        "uxtb	lr, r6, ror #8\n\t"
13753#endif
13754#else
13755        "ubfx	lr, r6, #8, #8\n\t"
13756#endif
13757#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13758#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13759        "lsl	r2, r7, #24\n\t"
13760        "lsr	r2, r2, #24\n\t"
13761#else
13762        "uxtb	r2, r7\n\t"
13763#endif
13764#else
13765        "ubfx	r2, r7, #0, #8\n\t"
13766#endif
13767        "ldr	r8, [r0, r8, lsl #2]\n\t"
13768        "ldr	r11, [r0, r11, lsl #2]\n\t"
13769        "ldr	lr, [r0, lr, lsl #2]\n\t"
13770        "ldr	r2, [r0, r2, lsl #2]\n\t"
13771#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13772#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13773        "lsl	r9, r6, #8\n\t"
13774        "lsr	r9, r9, #24\n\t"
13775#else
13776        "uxtb	r9, r6, ror #16\n\t"
13777#endif
13778#else
13779        "ubfx	r9, r6, #16, #8\n\t"
13780#endif
13781        "eor	r8, r8, r11, ror #24\n\t"
13782        "lsr	r11, r5, #24\n\t"
13783        "eor	r8, r8, lr, ror #8\n\t"
13784#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13785#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13786        "lsl	lr, r7, #16\n\t"
13787        "lsr	lr, lr, #24\n\t"
13788#else
13789        "uxtb	lr, r7, ror #8\n\t"
13790#endif
13791#else
13792        "ubfx	lr, r7, #8, #8\n\t"
13793#endif
13794        "eor	r8, r8, r2, ror #16\n\t"
13795#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13796#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13797        "lsl	r2, r4, #24\n\t"
13798        "lsr	r2, r2, #24\n\t"
13799#else
13800        "uxtb	r2, r4\n\t"
13801#endif
13802#else
13803        "ubfx	r2, r4, #0, #8\n\t"
13804#endif
13805        "ldr	r9, [r0, r9, lsl #2]\n\t"
13806        "ldr	r11, [r0, r11, lsl #2]\n\t"
13807        "ldr	lr, [r0, lr, lsl #2]\n\t"
13808        "ldr	r2, [r0, r2, lsl #2]\n\t"
13809#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13810#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13811        "lsl	r10, r7, #8\n\t"
13812        "lsr	r10, r10, #24\n\t"
13813#else
13814        "uxtb	r10, r7, ror #16\n\t"
13815#endif
13816#else
13817        "ubfx	r10, r7, #16, #8\n\t"
13818#endif
13819        "eor	r9, r9, r11, ror #24\n\t"
13820        "lsr	r11, r6, #24\n\t"
13821        "eor	r9, r9, lr, ror #8\n\t"
13822#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13823#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13824        "lsl	lr, r4, #16\n\t"
13825        "lsr	lr, lr, #24\n\t"
13826#else
13827        "uxtb	lr, r4, ror #8\n\t"
13828#endif
13829#else
13830        "ubfx	lr, r4, #8, #8\n\t"
13831#endif
13832        "eor	r9, r9, r2, ror #16\n\t"
13833#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13834#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13835        "lsl	r2, r5, #24\n\t"
13836        "lsr	r2, r2, #24\n\t"
13837#else
13838        "uxtb	r2, r5\n\t"
13839#endif
13840#else
13841        "ubfx	r2, r5, #0, #8\n\t"
13842#endif
13843        "ldr	r10, [r0, r10, lsl #2]\n\t"
13844        "ldr	r11, [r0, r11, lsl #2]\n\t"
13845        "ldr	lr, [r0, lr, lsl #2]\n\t"
13846        "ldr	r2, [r0, r2, lsl #2]\n\t"
13847#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13848#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13849        "lsl	r6, r6, #24\n\t"
13850        "lsr	r6, r6, #24\n\t"
13851#else
13852        "uxtb	r6, r6\n\t"
13853#endif
13854#else
13855        "ubfx	r6, r6, #0, #8\n\t"
13856#endif
13857        "eor	r10, r10, r11, ror #24\n\t"
13858#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13859#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13860        "lsl	r11, r4, #8\n\t"
13861        "lsr	r11, r11, #24\n\t"
13862#else
13863        "uxtb	r11, r4, ror #16\n\t"
13864#endif
13865#else
13866        "ubfx	r11, r4, #16, #8\n\t"
13867#endif
13868        "eor	r10, r10, lr, ror #8\n\t"
13869        "lsr	lr, r7, #24\n\t"
13870        "eor	r10, r10, r2, ror #16\n\t"
13871#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13872#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13873        "lsl	r2, r5, #16\n\t"
13874        "lsr	r2, r2, #24\n\t"
13875#else
13876        "uxtb	r2, r5, ror #8\n\t"
13877#endif
13878#else
13879        "ubfx	r2, r5, #8, #8\n\t"
13880#endif
13881        "ldr	r6, [r0, r6, lsl #2]\n\t"
13882        "ldr	lr, [r0, lr, lsl #2]\n\t"
13883        "ldr	r11, [r0, r11, lsl #2]\n\t"
13884        "ldr	r2, [r0, r2, lsl #2]\n\t"
13885        "eor	lr, lr, r6, ror #24\n\t"
13886        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
13887        "eor	r11, r11, lr, ror #24\n\t"
13888        "eor	r11, r11, r2, ror #8\n\t"
13889        /*   XOR in Key Schedule */
13890        "eor	r8, r8, r4\n\t"
13891        "eor	r9, r9, r5\n\t"
13892        "eor	r10, r10, r6\n\t"
13893        "eor	r11, r11, r7\n\t"
13894#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13895#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13896        "lsl	r4, r9, #8\n\t"
13897        "lsr	r4, r4, #24\n\t"
13898#else
13899        "uxtb	r4, r9, ror #16\n\t"
13900#endif
13901#else
13902        "ubfx	r4, r9, #16, #8\n\t"
13903#endif
13904        "lsr	r7, r8, #24\n\t"
13905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13906#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13907        "lsl	lr, r10, #16\n\t"
13908        "lsr	lr, lr, #24\n\t"
13909#else
13910        "uxtb	lr, r10, ror #8\n\t"
13911#endif
13912#else
13913        "ubfx	lr, r10, #8, #8\n\t"
13914#endif
13915#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13916#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13917        "lsl	r2, r11, #24\n\t"
13918        "lsr	r2, r2, #24\n\t"
13919#else
13920        "uxtb	r2, r11\n\t"
13921#endif
13922#else
13923        "ubfx	r2, r11, #0, #8\n\t"
13924#endif
13925        "ldr	r4, [r0, r4, lsl #2]\n\t"
13926        "ldr	r7, [r0, r7, lsl #2]\n\t"
13927        "ldr	lr, [r0, lr, lsl #2]\n\t"
13928        "ldr	r2, [r0, r2, lsl #2]\n\t"
13929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13930#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13931        "lsl	r5, r10, #8\n\t"
13932        "lsr	r5, r5, #24\n\t"
13933#else
13934        "uxtb	r5, r10, ror #16\n\t"
13935#endif
13936#else
13937        "ubfx	r5, r10, #16, #8\n\t"
13938#endif
13939        "eor	r4, r4, r7, ror #24\n\t"
13940        "lsr	r7, r9, #24\n\t"
13941        "eor	r4, r4, lr, ror #8\n\t"
13942#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13943#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13944        "lsl	lr, r11, #16\n\t"
13945        "lsr	lr, lr, #24\n\t"
13946#else
13947        "uxtb	lr, r11, ror #8\n\t"
13948#endif
13949#else
13950        "ubfx	lr, r11, #8, #8\n\t"
13951#endif
13952        "eor	r4, r4, r2, ror #16\n\t"
13953#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13954#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13955        "lsl	r2, r8, #24\n\t"
13956        "lsr	r2, r2, #24\n\t"
13957#else
13958        "uxtb	r2, r8\n\t"
13959#endif
13960#else
13961        "ubfx	r2, r8, #0, #8\n\t"
13962#endif
13963        "ldr	r5, [r0, r5, lsl #2]\n\t"
13964        "ldr	r7, [r0, r7, lsl #2]\n\t"
13965        "ldr	lr, [r0, lr, lsl #2]\n\t"
13966        "ldr	r2, [r0, r2, lsl #2]\n\t"
13967#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13968#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13969        "lsl	r6, r11, #8\n\t"
13970        "lsr	r6, r6, #24\n\t"
13971#else
13972        "uxtb	r6, r11, ror #16\n\t"
13973#endif
13974#else
13975        "ubfx	r6, r11, #16, #8\n\t"
13976#endif
13977        "eor	r5, r5, r7, ror #24\n\t"
13978        "lsr	r7, r10, #24\n\t"
13979        "eor	r5, r5, lr, ror #8\n\t"
13980#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13981#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13982        "lsl	lr, r8, #16\n\t"
13983        "lsr	lr, lr, #24\n\t"
13984#else
13985        "uxtb	lr, r8, ror #8\n\t"
13986#endif
13987#else
13988        "ubfx	lr, r8, #8, #8\n\t"
13989#endif
13990        "eor	r5, r5, r2, ror #16\n\t"
13991#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13993        "lsl	r2, r9, #24\n\t"
13994        "lsr	r2, r2, #24\n\t"
13995#else
13996        "uxtb	r2, r9\n\t"
13997#endif
13998#else
13999        "ubfx	r2, r9, #0, #8\n\t"
14000#endif
14001        "ldr	r6, [r0, r6, lsl #2]\n\t"
14002        "ldr	r7, [r0, r7, lsl #2]\n\t"
14003        "ldr	lr, [r0, lr, lsl #2]\n\t"
14004        "ldr	r2, [r0, r2, lsl #2]\n\t"
14005#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14006#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14007        "lsl	r10, r10, #24\n\t"
14008        "lsr	r10, r10, #24\n\t"
14009#else
14010        "uxtb	r10, r10\n\t"
14011#endif
14012#else
14013        "ubfx	r10, r10, #0, #8\n\t"
14014#endif
14015        "eor	r6, r6, r7, ror #24\n\t"
14016#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14017#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14018        "lsl	r7, r8, #8\n\t"
14019        "lsr	r7, r7, #24\n\t"
14020#else
14021        "uxtb	r7, r8, ror #16\n\t"
14022#endif
14023#else
14024        "ubfx	r7, r8, #16, #8\n\t"
14025#endif
14026        "eor	r6, r6, lr, ror #8\n\t"
14027        "lsr	lr, r11, #24\n\t"
14028        "eor	r6, r6, r2, ror #16\n\t"
14029#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14031        "lsl	r2, r9, #16\n\t"
14032        "lsr	r2, r2, #24\n\t"
14033#else
14034        "uxtb	r2, r9, ror #8\n\t"
14035#endif
14036#else
14037        "ubfx	r2, r9, #8, #8\n\t"
14038#endif
14039        "ldr	r10, [r0, r10, lsl #2]\n\t"
14040        "ldr	lr, [r0, lr, lsl #2]\n\t"
14041        "ldr	r7, [r0, r7, lsl #2]\n\t"
14042        "ldr	r2, [r0, r2, lsl #2]\n\t"
14043        "eor	lr, lr, r10, ror #24\n\t"
14044        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
14045        "eor	r7, r7, lr, ror #24\n\t"
14046        "eor	r7, r7, r2, ror #8\n\t"
14047        /*   XOR in Key Schedule */
14048        "eor	r4, r4, r8\n\t"
14049        "eor	r5, r5, r9\n\t"
14050        "eor	r6, r6, r10\n\t"
14051        "eor	r7, r7, r11\n\t"
14052        "subs	r1, r1, #1\n\t"
14053        "bne	L_AES_CBC_encrypt_block_nr_128_%=\n\t"
14054#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14055#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14056        "lsl	r8, r5, #8\n\t"
14057        "lsr	r8, r8, #24\n\t"
14058#else
14059        "uxtb	r8, r5, ror #16\n\t"
14060#endif
14061#else
14062        "ubfx	r8, r5, #16, #8\n\t"
14063#endif
14064        "lsr	r11, r4, #24\n\t"
14065#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14066#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14067        "lsl	lr, r6, #16\n\t"
14068        "lsr	lr, lr, #24\n\t"
14069#else
14070        "uxtb	lr, r6, ror #8\n\t"
14071#endif
14072#else
14073        "ubfx	lr, r6, #8, #8\n\t"
14074#endif
14075#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14077        "lsl	r2, r7, #24\n\t"
14078        "lsr	r2, r2, #24\n\t"
14079#else
14080        "uxtb	r2, r7\n\t"
14081#endif
14082#else
14083        "ubfx	r2, r7, #0, #8\n\t"
14084#endif
14085        "ldr	r8, [r0, r8, lsl #2]\n\t"
14086        "ldr	r11, [r0, r11, lsl #2]\n\t"
14087        "ldr	lr, [r0, lr, lsl #2]\n\t"
14088        "ldr	r2, [r0, r2, lsl #2]\n\t"
14089#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14090#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14091        "lsl	r9, r6, #8\n\t"
14092        "lsr	r9, r9, #24\n\t"
14093#else
14094        "uxtb	r9, r6, ror #16\n\t"
14095#endif
14096#else
14097        "ubfx	r9, r6, #16, #8\n\t"
14098#endif
14099        "eor	r8, r8, r11, ror #24\n\t"
14100        "lsr	r11, r5, #24\n\t"
14101        "eor	r8, r8, lr, ror #8\n\t"
14102#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14103#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14104        "lsl	lr, r7, #16\n\t"
14105        "lsr	lr, lr, #24\n\t"
14106#else
14107        "uxtb	lr, r7, ror #8\n\t"
14108#endif
14109#else
14110        "ubfx	lr, r7, #8, #8\n\t"
14111#endif
14112        "eor	r8, r8, r2, ror #16\n\t"
14113#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14114#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14115        "lsl	r2, r4, #24\n\t"
14116        "lsr	r2, r2, #24\n\t"
14117#else
14118        "uxtb	r2, r4\n\t"
14119#endif
14120#else
14121        "ubfx	r2, r4, #0, #8\n\t"
14122#endif
14123        "ldr	r9, [r0, r9, lsl #2]\n\t"
14124        "ldr	r11, [r0, r11, lsl #2]\n\t"
14125        "ldr	lr, [r0, lr, lsl #2]\n\t"
14126        "ldr	r2, [r0, r2, lsl #2]\n\t"
14127#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14128#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14129        "lsl	r10, r7, #8\n\t"
14130        "lsr	r10, r10, #24\n\t"
14131#else
14132        "uxtb	r10, r7, ror #16\n\t"
14133#endif
14134#else
14135        "ubfx	r10, r7, #16, #8\n\t"
14136#endif
14137        "eor	r9, r9, r11, ror #24\n\t"
14138        "lsr	r11, r6, #24\n\t"
14139        "eor	r9, r9, lr, ror #8\n\t"
14140#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14141#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14142        "lsl	lr, r4, #16\n\t"
14143        "lsr	lr, lr, #24\n\t"
14144#else
14145        "uxtb	lr, r4, ror #8\n\t"
14146#endif
14147#else
14148        "ubfx	lr, r4, #8, #8\n\t"
14149#endif
14150        "eor	r9, r9, r2, ror #16\n\t"
14151#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14152#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14153        "lsl	r2, r5, #24\n\t"
14154        "lsr	r2, r2, #24\n\t"
14155#else
14156        "uxtb	r2, r5\n\t"
14157#endif
14158#else
14159        "ubfx	r2, r5, #0, #8\n\t"
14160#endif
14161        "ldr	r10, [r0, r10, lsl #2]\n\t"
14162        "ldr	r11, [r0, r11, lsl #2]\n\t"
14163        "ldr	lr, [r0, lr, lsl #2]\n\t"
14164        "ldr	r2, [r0, r2, lsl #2]\n\t"
14165#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14166#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14167        "lsl	r6, r6, #24\n\t"
14168        "lsr	r6, r6, #24\n\t"
14169#else
14170        "uxtb	r6, r6\n\t"
14171#endif
14172#else
14173        "ubfx	r6, r6, #0, #8\n\t"
14174#endif
14175        "eor	r10, r10, r11, ror #24\n\t"
14176#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14177#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14178        "lsl	r11, r4, #8\n\t"
14179        "lsr	r11, r11, #24\n\t"
14180#else
14181        "uxtb	r11, r4, ror #16\n\t"
14182#endif
14183#else
14184        "ubfx	r11, r4, #16, #8\n\t"
14185#endif
14186        "eor	r10, r10, lr, ror #8\n\t"
14187        "lsr	lr, r7, #24\n\t"
14188        "eor	r10, r10, r2, ror #16\n\t"
14189#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14190#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14191        "lsl	r2, r5, #16\n\t"
14192        "lsr	r2, r2, #24\n\t"
14193#else
14194        "uxtb	r2, r5, ror #8\n\t"
14195#endif
14196#else
14197        "ubfx	r2, r5, #8, #8\n\t"
14198#endif
14199        "ldr	r6, [r0, r6, lsl #2]\n\t"
14200        "ldr	lr, [r0, lr, lsl #2]\n\t"
14201        "ldr	r11, [r0, r11, lsl #2]\n\t"
14202        "ldr	r2, [r0, r2, lsl #2]\n\t"
14203        "eor	lr, lr, r6, ror #24\n\t"
14204        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
14205        "eor	r11, r11, lr, ror #24\n\t"
14206        "eor	r11, r11, r2, ror #8\n\t"
14207        /*   XOR in Key Schedule */
14208        "eor	r8, r8, r4\n\t"
14209        "eor	r9, r9, r5\n\t"
14210        "eor	r10, r10, r6\n\t"
14211        "eor	r11, r11, r7\n\t"
14212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14213#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14214        "lsl	r4, r11, #24\n\t"
14215        "lsr	r4, r4, #24\n\t"
14216#else
14217        "uxtb	r4, r11\n\t"
14218#endif
14219#else
14220        "ubfx	r4, r11, #0, #8\n\t"
14221#endif
14222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14223#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14224        "lsl	r7, r10, #16\n\t"
14225        "lsr	r7, r7, #24\n\t"
14226#else
14227        "uxtb	r7, r10, ror #8\n\t"
14228#endif
14229#else
14230        "ubfx	r7, r10, #8, #8\n\t"
14231#endif
14232#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14233#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14234        "lsl	lr, r9, #8\n\t"
14235        "lsr	lr, lr, #24\n\t"
14236#else
14237        "uxtb	lr, r9, ror #16\n\t"
14238#endif
14239#else
14240        "ubfx	lr, r9, #16, #8\n\t"
14241#endif
14242        "lsr	r2, r8, #24\n\t"
14243        "ldrb	r4, [r0, r4, lsl #2]\n\t"
14244        "ldrb	r7, [r0, r7, lsl #2]\n\t"
14245        "ldrb	lr, [r0, lr, lsl #2]\n\t"
14246        "ldrb	r2, [r0, r2, lsl #2]\n\t"
14247#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14248#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14249        "lsl	r5, r8, #24\n\t"
14250        "lsr	r5, r5, #24\n\t"
14251#else
14252        "uxtb	r5, r8\n\t"
14253#endif
14254#else
14255        "ubfx	r5, r8, #0, #8\n\t"
14256#endif
14257        "eor	r4, r4, r7, lsl #8\n\t"
14258#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14259#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14260        "lsl	r7, r11, #16\n\t"
14261        "lsr	r7, r7, #24\n\t"
14262#else
14263        "uxtb	r7, r11, ror #8\n\t"
14264#endif
14265#else
14266        "ubfx	r7, r11, #8, #8\n\t"
14267#endif
14268        "eor	r4, r4, lr, lsl #16\n\t"
14269#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14270#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14271        "lsl	lr, r10, #8\n\t"
14272        "lsr	lr, lr, #24\n\t"
14273#else
14274        "uxtb	lr, r10, ror #16\n\t"
14275#endif
14276#else
14277        "ubfx	lr, r10, #16, #8\n\t"
14278#endif
14279        "eor	r4, r4, r2, lsl #24\n\t"
14280        "lsr	r2, r9, #24\n\t"
14281        "ldrb	r5, [r0, r5, lsl #2]\n\t"
14282        "ldrb	r7, [r0, r7, lsl #2]\n\t"
14283        "ldrb	lr, [r0, lr, lsl #2]\n\t"
14284        "ldrb	r2, [r0, r2, lsl #2]\n\t"
14285#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14286#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14287        "lsl	r6, r9, #24\n\t"
14288        "lsr	r6, r6, #24\n\t"
14289#else
14290        "uxtb	r6, r9\n\t"
14291#endif
14292#else
14293        "ubfx	r6, r9, #0, #8\n\t"
14294#endif
14295        "eor	r5, r5, r7, lsl #8\n\t"
14296#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14297#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14298        "lsl	r7, r8, #16\n\t"
14299        "lsr	r7, r7, #24\n\t"
14300#else
14301        "uxtb	r7, r8, ror #8\n\t"
14302#endif
14303#else
14304        "ubfx	r7, r8, #8, #8\n\t"
14305#endif
14306        "eor	r5, r5, lr, lsl #16\n\t"
14307#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14308#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14309        "lsl	lr, r11, #8\n\t"
14310        "lsr	lr, lr, #24\n\t"
14311#else
14312        "uxtb	lr, r11, ror #16\n\t"
14313#endif
14314#else
14315        "ubfx	lr, r11, #16, #8\n\t"
14316#endif
14317        "eor	r5, r5, r2, lsl #24\n\t"
14318        "lsr	r2, r10, #24\n\t"
14319        "ldrb	r6, [r0, r6, lsl #2]\n\t"
14320        "ldrb	r7, [r0, r7, lsl #2]\n\t"
14321        "ldrb	lr, [r0, lr, lsl #2]\n\t"
14322        "ldrb	r2, [r0, r2, lsl #2]\n\t"
14323        "lsr	r11, r11, #24\n\t"
14324        "eor	r6, r6, r7, lsl #8\n\t"
14325#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14326#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14327        "lsl	r7, r10, #24\n\t"
14328        "lsr	r7, r7, #24\n\t"
14329#else
14330        "uxtb	r7, r10\n\t"
14331#endif
14332#else
14333        "ubfx	r7, r10, #0, #8\n\t"
14334#endif
14335        "eor	r6, r6, lr, lsl #16\n\t"
14336#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14337#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14338        "lsl	lr, r9, #16\n\t"
14339        "lsr	lr, lr, #24\n\t"
14340#else
14341        "uxtb	lr, r9, ror #8\n\t"
14342#endif
14343#else
14344        "ubfx	lr, r9, #8, #8\n\t"
14345#endif
14346        "eor	r6, r6, r2, lsl #24\n\t"
14347#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14348#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14349        "lsl	r2, r8, #8\n\t"
14350        "lsr	r2, r2, #24\n\t"
14351#else
14352        "uxtb	r2, r8, ror #16\n\t"
14353#endif
14354#else
14355        "ubfx	r2, r8, #16, #8\n\t"
14356#endif
14357        "ldrb	r11, [r0, r11, lsl #2]\n\t"
14358        "ldrb	r7, [r0, r7, lsl #2]\n\t"
14359        "ldrb	lr, [r0, lr, lsl #2]\n\t"
14360        "ldrb	r2, [r0, r2, lsl #2]\n\t"
14361        "eor	lr, lr, r11, lsl #16\n\t"
14362        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
14363        "eor	r7, r7, lr, lsl #8\n\t"
14364        "eor	r7, r7, r2, lsl #16\n\t"
14365        /*   XOR in Key Schedule */
14366        "eor	r4, r4, r8\n\t"
14367        "eor	r5, r5, r9\n\t"
14368        "eor	r6, r6, r10\n\t"
14369        "eor	r7, r7, r11\n\t"
14370#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
14371        "pop	{r1, %[len], lr}\n\t"
14372        "ldr	%[ks], [sp]\n\t"
14373#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14374        "eor	r8, r4, r4, ror #16\n\t"
14375        "eor	r9, r5, r5, ror #16\n\t"
14376        "eor	r10, r6, r6, ror #16\n\t"
14377        "eor	r11, r7, r7, ror #16\n\t"
14378        "bic	r8, r8, #0xff0000\n\t"
14379        "bic	r9, r9, #0xff0000\n\t"
14380        "bic	r10, r10, #0xff0000\n\t"
14381        "bic	r11, r11, #0xff0000\n\t"
14382        "ror	r4, r4, #8\n\t"
14383        "ror	r5, r5, #8\n\t"
14384        "ror	r6, r6, #8\n\t"
14385        "ror	r7, r7, #8\n\t"
14386        "eor	r4, r4, r8, lsr #8\n\t"
14387        "eor	r5, r5, r9, lsr #8\n\t"
14388        "eor	r6, r6, r10, lsr #8\n\t"
14389        "eor	r7, r7, r11, lsr #8\n\t"
14390#else
14391        "rev	r4, r4\n\t"
14392        "rev	r5, r5\n\t"
14393        "rev	r6, r6\n\t"
14394        "rev	r7, r7\n\t"
14395#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
14396        "str	r4, [%[out]]\n\t"
14397        "str	r5, [%[out], #4]\n\t"
14398        "str	r6, [%[out], #8]\n\t"
14399        "str	r7, [%[out], #12]\n\t"
14400        "subs	%[len], %[len], #16\n\t"
14401        "add	lr, lr, #16\n\t"
14402        "add	%[out], %[out], #16\n\t"
14403        "bne	L_AES_CBC_encrypt_loop_block_128_%=\n\t"
14404        "\n"
14405    "L_AES_CBC_encrypt_end_%=:\n\t"
14406        "pop	{%[ks], r9}\n\t"
14407        "stm	r9, {r4, r5, r6, r7}\n\t"
14408        "pop	{%[nr], %[iv]}\n\t"
14409        "pop	{%[L_AES_ARM32_te_cbc]}\n\t"
14410#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
14411        : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
14412          [nr] "+r" (nr), [iv] "+r" (iv),
14413          [L_AES_ARM32_te_cbc] "+r" (L_AES_ARM32_te_cbc_c)
14414        :
14415#else
14416        :
14417        : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
14418          [nr] "r" (nr), [iv] "r" (iv),
14419          [L_AES_ARM32_te_cbc] "r" (L_AES_ARM32_te_cbc_c)
14420#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
14421        : "memory", "cc", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
14422    );
14423}
14424
14425#endif /* HAVE_AES_CBC */
14426#ifdef WOLFSSL_AES_COUNTER
14427static const word32* L_AES_ARM32_te_ctr = L_AES_ARM32_te_data;
14428void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
14429    unsigned long len_p, const unsigned char* ks_p, int nr_p,
14430    unsigned char* ctr_p);
14431#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
14432WC_OMIT_FRAME_POINTER void AES_CTR_encrypt(const unsigned char* in_p,
14433    unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
14434    int nr_p, unsigned char* ctr_p)
14435#else
14436WC_OMIT_FRAME_POINTER void AES_CTR_encrypt(const unsigned char* in,
14437    unsigned char* out, unsigned long len, const unsigned char* ks, int nr,
14438    unsigned char* ctr)
14439#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
14440{
14441#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
14442    register const unsigned char* in __asm__ ("r0") =
14443        (const unsigned char*)in_p;
14444    register unsigned char* out __asm__ ("r1") = (unsigned char*)out_p;
14445    register unsigned long len __asm__ ("r2") = (unsigned long)len_p;
14446    register const unsigned char* ks __asm__ ("r3") =
14447        (const unsigned char*)ks_p;
14448    register int nr __asm__ ("r12") = (int)nr_p;
14449    register unsigned char* ctr __asm__ ("lr") = (unsigned char*)ctr_p;
14450    register word32* L_AES_ARM32_te_ctr_c __asm__ ("r4") =
14451        (word32*)L_AES_ARM32_te_ctr;
14452#else
14453    register word32* L_AES_ARM32_te_ctr_c = (word32*)L_AES_ARM32_te_ctr;
14454#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
14455
14456    __asm__ __volatile__ (
14457        "push	{%[L_AES_ARM32_te_ctr]}\n\t"
14458        "push	{%[nr], %[ctr]}\n\t"
14459        "ldr	r12, [sp]\n\t"
14460        "ldr	r8, [sp, #4]\n\t"
14461        "mov	lr, %[in]\n\t"
14462        "ldr	r0, [sp, #8]\n\t"
14463        "ldm	r8, {r4, r5, r6, r7}\n\t"
14464#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14465        "eor	r10, r4, r4, ror #16\n\t"
14466        "eor	r11, r5, r5, ror #16\n\t"
14467        "bic	r10, r10, #0xff0000\n\t"
14468        "bic	r11, r11, #0xff0000\n\t"
14469        "ror	r4, r4, #8\n\t"
14470        "ror	r5, r5, #8\n\t"
14471        "eor	r4, r4, r10, lsr #8\n\t"
14472        "eor	r5, r5, r11, lsr #8\n\t"
14473        "eor	r10, r6, r6, ror #16\n\t"
14474        "eor	r11, r7, r7, ror #16\n\t"
14475        "bic	r10, r10, #0xff0000\n\t"
14476        "bic	r11, r11, #0xff0000\n\t"
14477        "ror	r6, r6, #8\n\t"
14478        "ror	r7, r7, #8\n\t"
14479        "eor	r6, r6, r10, lsr #8\n\t"
14480        "eor	r7, r7, r11, lsr #8\n\t"
14481#else
14482        "rev	r4, r4\n\t"
14483        "rev	r5, r5\n\t"
14484        "rev	r6, r6\n\t"
14485        "rev	r7, r7\n\t"
14486#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
14487        "stm	r8, {r4, r5, r6, r7}\n\t"
14488        "push	{%[ks], r8}\n\t"
14489        "cmp	r12, #10\n\t"
14490        "beq	L_AES_CTR_encrypt_start_block_128_%=\n\t"
14491        "cmp	r12, #12\n\t"
14492        "beq	L_AES_CTR_encrypt_start_block_192_%=\n\t"
14493        "\n"
14494    "L_AES_CTR_encrypt_loop_block_256_%=:\n\t"
14495        "push	{r1, %[len], lr}\n\t"
14496        "ldr	lr, [sp, #16]\n\t"
14497        "adds	r11, r7, #1\n\t"
14498        "adcs	r10, r6, #0\n\t"
14499        "adcs	r9, r5, #0\n\t"
14500        "adc	r8, r4, #0\n\t"
14501        "stm	lr, {r8, r9, r10, r11}\n\t"
14502        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
14503        /* Round: 0 - XOR in key schedule */
14504        "eor	r4, r4, r8\n\t"
14505        "eor	r5, r5, r9\n\t"
14506        "eor	r6, r6, r10\n\t"
14507        "eor	r7, r7, r11\n\t"
14508        "mov	r1, #6\n\t"
14509#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
14510        "bl	AES_encrypt_block\n\t"
14511#else
14512        "\n"
14513    "L_AES_CTR_encrypt_block_nr_256_%=:\n\t"
14514#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14515#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14516        "lsl	r8, r5, #8\n\t"
14517        "lsr	r8, r8, #24\n\t"
14518#else
14519        "uxtb	r8, r5, ror #16\n\t"
14520#endif
14521#else
14522        "ubfx	r8, r5, #16, #8\n\t"
14523#endif
14524        "lsr	r11, r4, #24\n\t"
14525#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14526#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14527        "lsl	lr, r6, #16\n\t"
14528        "lsr	lr, lr, #24\n\t"
14529#else
14530        "uxtb	lr, r6, ror #8\n\t"
14531#endif
14532#else
14533        "ubfx	lr, r6, #8, #8\n\t"
14534#endif
14535#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14536#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14537        "lsl	r2, r7, #24\n\t"
14538        "lsr	r2, r2, #24\n\t"
14539#else
14540        "uxtb	r2, r7\n\t"
14541#endif
14542#else
14543        "ubfx	r2, r7, #0, #8\n\t"
14544#endif
14545        "ldr	r8, [r0, r8, lsl #2]\n\t"
14546        "ldr	r11, [r0, r11, lsl #2]\n\t"
14547        "ldr	lr, [r0, lr, lsl #2]\n\t"
14548        "ldr	r2, [r0, r2, lsl #2]\n\t"
14549#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14550#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14551        "lsl	r9, r6, #8\n\t"
14552        "lsr	r9, r9, #24\n\t"
14553#else
14554        "uxtb	r9, r6, ror #16\n\t"
14555#endif
14556#else
14557        "ubfx	r9, r6, #16, #8\n\t"
14558#endif
14559        "eor	r8, r8, r11, ror #24\n\t"
14560        "lsr	r11, r5, #24\n\t"
14561        "eor	r8, r8, lr, ror #8\n\t"
14562#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14563#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14564        "lsl	lr, r7, #16\n\t"
14565        "lsr	lr, lr, #24\n\t"
14566#else
14567        "uxtb	lr, r7, ror #8\n\t"
14568#endif
14569#else
14570        "ubfx	lr, r7, #8, #8\n\t"
14571#endif
14572        "eor	r8, r8, r2, ror #16\n\t"
14573#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14574#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14575        "lsl	r2, r4, #24\n\t"
14576        "lsr	r2, r2, #24\n\t"
14577#else
14578        "uxtb	r2, r4\n\t"
14579#endif
14580#else
14581        "ubfx	r2, r4, #0, #8\n\t"
14582#endif
14583        "ldr	r9, [r0, r9, lsl #2]\n\t"
14584        "ldr	r11, [r0, r11, lsl #2]\n\t"
14585        "ldr	lr, [r0, lr, lsl #2]\n\t"
14586        "ldr	r2, [r0, r2, lsl #2]\n\t"
14587#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14588#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14589        "lsl	r10, r7, #8\n\t"
14590        "lsr	r10, r10, #24\n\t"
14591#else
14592        "uxtb	r10, r7, ror #16\n\t"
14593#endif
14594#else
14595        "ubfx	r10, r7, #16, #8\n\t"
14596#endif
14597        "eor	r9, r9, r11, ror #24\n\t"
14598        "lsr	r11, r6, #24\n\t"
14599        "eor	r9, r9, lr, ror #8\n\t"
14600#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14601#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14602        "lsl	lr, r4, #16\n\t"
14603        "lsr	lr, lr, #24\n\t"
14604#else
14605        "uxtb	lr, r4, ror #8\n\t"
14606#endif
14607#else
14608        "ubfx	lr, r4, #8, #8\n\t"
14609#endif
14610        "eor	r9, r9, r2, ror #16\n\t"
14611#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14612#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14613        "lsl	r2, r5, #24\n\t"
14614        "lsr	r2, r2, #24\n\t"
14615#else
14616        "uxtb	r2, r5\n\t"
14617#endif
14618#else
14619        "ubfx	r2, r5, #0, #8\n\t"
14620#endif
14621        "ldr	r10, [r0, r10, lsl #2]\n\t"
14622        "ldr	r11, [r0, r11, lsl #2]\n\t"
14623        "ldr	lr, [r0, lr, lsl #2]\n\t"
14624        "ldr	r2, [r0, r2, lsl #2]\n\t"
14625#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14626#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14627        "lsl	r6, r6, #24\n\t"
14628        "lsr	r6, r6, #24\n\t"
14629#else
14630        "uxtb	r6, r6\n\t"
14631#endif
14632#else
14633        "ubfx	r6, r6, #0, #8\n\t"
14634#endif
14635        "eor	r10, r10, r11, ror #24\n\t"
14636#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14637#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14638        "lsl	r11, r4, #8\n\t"
14639        "lsr	r11, r11, #24\n\t"
14640#else
14641        "uxtb	r11, r4, ror #16\n\t"
14642#endif
14643#else
14644        "ubfx	r11, r4, #16, #8\n\t"
14645#endif
14646        "eor	r10, r10, lr, ror #8\n\t"
14647        "lsr	lr, r7, #24\n\t"
14648        "eor	r10, r10, r2, ror #16\n\t"
14649#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14650#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14651        "lsl	r2, r5, #16\n\t"
14652        "lsr	r2, r2, #24\n\t"
14653#else
14654        "uxtb	r2, r5, ror #8\n\t"
14655#endif
14656#else
14657        "ubfx	r2, r5, #8, #8\n\t"
14658#endif
14659        "ldr	r6, [r0, r6, lsl #2]\n\t"
14660        "ldr	lr, [r0, lr, lsl #2]\n\t"
14661        "ldr	r11, [r0, r11, lsl #2]\n\t"
14662        "ldr	r2, [r0, r2, lsl #2]\n\t"
14663        "eor	lr, lr, r6, ror #24\n\t"
14664        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
14665        "eor	r11, r11, lr, ror #24\n\t"
14666        "eor	r11, r11, r2, ror #8\n\t"
14667        /*   XOR in Key Schedule */
14668        "eor	r8, r8, r4\n\t"
14669        "eor	r9, r9, r5\n\t"
14670        "eor	r10, r10, r6\n\t"
14671        "eor	r11, r11, r7\n\t"
14672#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14673#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14674        "lsl	r4, r9, #8\n\t"
14675        "lsr	r4, r4, #24\n\t"
14676#else
14677        "uxtb	r4, r9, ror #16\n\t"
14678#endif
14679#else
14680        "ubfx	r4, r9, #16, #8\n\t"
14681#endif
14682        "lsr	r7, r8, #24\n\t"
14683#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14684#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14685        "lsl	lr, r10, #16\n\t"
14686        "lsr	lr, lr, #24\n\t"
14687#else
14688        "uxtb	lr, r10, ror #8\n\t"
14689#endif
14690#else
14691        "ubfx	lr, r10, #8, #8\n\t"
14692#endif
14693#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14694#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14695        "lsl	r2, r11, #24\n\t"
14696        "lsr	r2, r2, #24\n\t"
14697#else
14698        "uxtb	r2, r11\n\t"
14699#endif
14700#else
14701        "ubfx	r2, r11, #0, #8\n\t"
14702#endif
14703        "ldr	r4, [r0, r4, lsl #2]\n\t"
14704        "ldr	r7, [r0, r7, lsl #2]\n\t"
14705        "ldr	lr, [r0, lr, lsl #2]\n\t"
14706        "ldr	r2, [r0, r2, lsl #2]\n\t"
14707#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14708#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14709        "lsl	r5, r10, #8\n\t"
14710        "lsr	r5, r5, #24\n\t"
14711#else
14712        "uxtb	r5, r10, ror #16\n\t"
14713#endif
14714#else
14715        "ubfx	r5, r10, #16, #8\n\t"
14716#endif
14717        "eor	r4, r4, r7, ror #24\n\t"
14718        "lsr	r7, r9, #24\n\t"
14719        "eor	r4, r4, lr, ror #8\n\t"
14720#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14721#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14722        "lsl	lr, r11, #16\n\t"
14723        "lsr	lr, lr, #24\n\t"
14724#else
14725        "uxtb	lr, r11, ror #8\n\t"
14726#endif
14727#else
14728        "ubfx	lr, r11, #8, #8\n\t"
14729#endif
14730        "eor	r4, r4, r2, ror #16\n\t"
14731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14733        "lsl	r2, r8, #24\n\t"
14734        "lsr	r2, r2, #24\n\t"
14735#else
14736        "uxtb	r2, r8\n\t"
14737#endif
14738#else
14739        "ubfx	r2, r8, #0, #8\n\t"
14740#endif
14741        "ldr	r5, [r0, r5, lsl #2]\n\t"
14742        "ldr	r7, [r0, r7, lsl #2]\n\t"
14743        "ldr	lr, [r0, lr, lsl #2]\n\t"
14744        "ldr	r2, [r0, r2, lsl #2]\n\t"
14745#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14746#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14747        "lsl	r6, r11, #8\n\t"
14748        "lsr	r6, r6, #24\n\t"
14749#else
14750        "uxtb	r6, r11, ror #16\n\t"
14751#endif
14752#else
14753        "ubfx	r6, r11, #16, #8\n\t"
14754#endif
14755        "eor	r5, r5, r7, ror #24\n\t"
14756        "lsr	r7, r10, #24\n\t"
14757        "eor	r5, r5, lr, ror #8\n\t"
14758#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14759#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14760        "lsl	lr, r8, #16\n\t"
14761        "lsr	lr, lr, #24\n\t"
14762#else
14763        "uxtb	lr, r8, ror #8\n\t"
14764#endif
14765#else
14766        "ubfx	lr, r8, #8, #8\n\t"
14767#endif
14768        "eor	r5, r5, r2, ror #16\n\t"
14769#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14770#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14771        "lsl	r2, r9, #24\n\t"
14772        "lsr	r2, r2, #24\n\t"
14773#else
14774        "uxtb	r2, r9\n\t"
14775#endif
14776#else
14777        "ubfx	r2, r9, #0, #8\n\t"
14778#endif
14779        "ldr	r6, [r0, r6, lsl #2]\n\t"
14780        "ldr	r7, [r0, r7, lsl #2]\n\t"
14781        "ldr	lr, [r0, lr, lsl #2]\n\t"
14782        "ldr	r2, [r0, r2, lsl #2]\n\t"
14783#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14784#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14785        "lsl	r10, r10, #24\n\t"
14786        "lsr	r10, r10, #24\n\t"
14787#else
14788        "uxtb	r10, r10\n\t"
14789#endif
14790#else
14791        "ubfx	r10, r10, #0, #8\n\t"
14792#endif
14793        "eor	r6, r6, r7, ror #24\n\t"
14794#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14795#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14796        "lsl	r7, r8, #8\n\t"
14797        "lsr	r7, r7, #24\n\t"
14798#else
14799        "uxtb	r7, r8, ror #16\n\t"
14800#endif
14801#else
14802        "ubfx	r7, r8, #16, #8\n\t"
14803#endif
14804        "eor	r6, r6, lr, ror #8\n\t"
14805        "lsr	lr, r11, #24\n\t"
14806        "eor	r6, r6, r2, ror #16\n\t"
14807#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14808#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14809        "lsl	r2, r9, #16\n\t"
14810        "lsr	r2, r2, #24\n\t"
14811#else
14812        "uxtb	r2, r9, ror #8\n\t"
14813#endif
14814#else
14815        "ubfx	r2, r9, #8, #8\n\t"
14816#endif
14817        "ldr	r10, [r0, r10, lsl #2]\n\t"
14818        "ldr	lr, [r0, lr, lsl #2]\n\t"
14819        "ldr	r7, [r0, r7, lsl #2]\n\t"
14820        "ldr	r2, [r0, r2, lsl #2]\n\t"
14821        "eor	lr, lr, r10, ror #24\n\t"
14822        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
14823        "eor	r7, r7, lr, ror #24\n\t"
14824        "eor	r7, r7, r2, ror #8\n\t"
14825        /*   XOR in Key Schedule */
14826        "eor	r4, r4, r8\n\t"
14827        "eor	r5, r5, r9\n\t"
14828        "eor	r6, r6, r10\n\t"
14829        "eor	r7, r7, r11\n\t"
14830        "subs	r1, r1, #1\n\t"
14831        "bne	L_AES_CTR_encrypt_block_nr_256_%=\n\t"
14832#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14833#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14834        "lsl	r8, r5, #8\n\t"
14835        "lsr	r8, r8, #24\n\t"
14836#else
14837        "uxtb	r8, r5, ror #16\n\t"
14838#endif
14839#else
14840        "ubfx	r8, r5, #16, #8\n\t"
14841#endif
14842        "lsr	r11, r4, #24\n\t"
14843#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14844#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14845        "lsl	lr, r6, #16\n\t"
14846        "lsr	lr, lr, #24\n\t"
14847#else
14848        "uxtb	lr, r6, ror #8\n\t"
14849#endif
14850#else
14851        "ubfx	lr, r6, #8, #8\n\t"
14852#endif
14853#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14854#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14855        "lsl	r2, r7, #24\n\t"
14856        "lsr	r2, r2, #24\n\t"
14857#else
14858        "uxtb	r2, r7\n\t"
14859#endif
14860#else
14861        "ubfx	r2, r7, #0, #8\n\t"
14862#endif
14863        "ldr	r8, [r0, r8, lsl #2]\n\t"
14864        "ldr	r11, [r0, r11, lsl #2]\n\t"
14865        "ldr	lr, [r0, lr, lsl #2]\n\t"
14866        "ldr	r2, [r0, r2, lsl #2]\n\t"
14867#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14868#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14869        "lsl	r9, r6, #8\n\t"
14870        "lsr	r9, r9, #24\n\t"
14871#else
14872        "uxtb	r9, r6, ror #16\n\t"
14873#endif
14874#else
14875        "ubfx	r9, r6, #16, #8\n\t"
14876#endif
14877        "eor	r8, r8, r11, ror #24\n\t"
14878        "lsr	r11, r5, #24\n\t"
14879        "eor	r8, r8, lr, ror #8\n\t"
14880#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14881#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14882        "lsl	lr, r7, #16\n\t"
14883        "lsr	lr, lr, #24\n\t"
14884#else
14885        "uxtb	lr, r7, ror #8\n\t"
14886#endif
14887#else
14888        "ubfx	lr, r7, #8, #8\n\t"
14889#endif
14890        "eor	r8, r8, r2, ror #16\n\t"
14891#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14892#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14893        "lsl	r2, r4, #24\n\t"
14894        "lsr	r2, r2, #24\n\t"
14895#else
14896        "uxtb	r2, r4\n\t"
14897#endif
14898#else
14899        "ubfx	r2, r4, #0, #8\n\t"
14900#endif
14901        "ldr	r9, [r0, r9, lsl #2]\n\t"
14902        "ldr	r11, [r0, r11, lsl #2]\n\t"
14903        "ldr	lr, [r0, lr, lsl #2]\n\t"
14904        "ldr	r2, [r0, r2, lsl #2]\n\t"
14905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14906#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14907        "lsl	r10, r7, #8\n\t"
14908        "lsr	r10, r10, #24\n\t"
14909#else
14910        "uxtb	r10, r7, ror #16\n\t"
14911#endif
14912#else
14913        "ubfx	r10, r7, #16, #8\n\t"
14914#endif
14915        "eor	r9, r9, r11, ror #24\n\t"
14916        "lsr	r11, r6, #24\n\t"
14917        "eor	r9, r9, lr, ror #8\n\t"
14918#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14919#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14920        "lsl	lr, r4, #16\n\t"
14921        "lsr	lr, lr, #24\n\t"
14922#else
14923        "uxtb	lr, r4, ror #8\n\t"
14924#endif
14925#else
14926        "ubfx	lr, r4, #8, #8\n\t"
14927#endif
14928        "eor	r9, r9, r2, ror #16\n\t"
14929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14930#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14931        "lsl	r2, r5, #24\n\t"
14932        "lsr	r2, r2, #24\n\t"
14933#else
14934        "uxtb	r2, r5\n\t"
14935#endif
14936#else
14937        "ubfx	r2, r5, #0, #8\n\t"
14938#endif
14939        "ldr	r10, [r0, r10, lsl #2]\n\t"
14940        "ldr	r11, [r0, r11, lsl #2]\n\t"
14941        "ldr	lr, [r0, lr, lsl #2]\n\t"
14942        "ldr	r2, [r0, r2, lsl #2]\n\t"
14943#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14944#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14945        "lsl	r6, r6, #24\n\t"
14946        "lsr	r6, r6, #24\n\t"
14947#else
14948        "uxtb	r6, r6\n\t"
14949#endif
14950#else
14951        "ubfx	r6, r6, #0, #8\n\t"
14952#endif
14953        "eor	r10, r10, r11, ror #24\n\t"
14954#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14955#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14956        "lsl	r11, r4, #8\n\t"
14957        "lsr	r11, r11, #24\n\t"
14958#else
14959        "uxtb	r11, r4, ror #16\n\t"
14960#endif
14961#else
14962        "ubfx	r11, r4, #16, #8\n\t"
14963#endif
14964        "eor	r10, r10, lr, ror #8\n\t"
14965        "lsr	lr, r7, #24\n\t"
14966        "eor	r10, r10, r2, ror #16\n\t"
14967#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14968#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14969        "lsl	r2, r5, #16\n\t"
14970        "lsr	r2, r2, #24\n\t"
14971#else
14972        "uxtb	r2, r5, ror #8\n\t"
14973#endif
14974#else
14975        "ubfx	r2, r5, #8, #8\n\t"
14976#endif
14977        "ldr	r6, [r0, r6, lsl #2]\n\t"
14978        "ldr	lr, [r0, lr, lsl #2]\n\t"
14979        "ldr	r11, [r0, r11, lsl #2]\n\t"
14980        "ldr	r2, [r0, r2, lsl #2]\n\t"
14981        "eor	lr, lr, r6, ror #24\n\t"
14982        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
14983        "eor	r11, r11, lr, ror #24\n\t"
14984        "eor	r11, r11, r2, ror #8\n\t"
14985        /*   XOR in Key Schedule */
14986        "eor	r8, r8, r4\n\t"
14987        "eor	r9, r9, r5\n\t"
14988        "eor	r10, r10, r6\n\t"
14989        "eor	r11, r11, r7\n\t"
14990#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14991#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14992        "lsl	r4, r11, #24\n\t"
14993        "lsr	r4, r4, #24\n\t"
14994#else
14995        "uxtb	r4, r11\n\t"
14996#endif
14997#else
14998        "ubfx	r4, r11, #0, #8\n\t"
14999#endif
15000#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15001#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15002        "lsl	r7, r10, #16\n\t"
15003        "lsr	r7, r7, #24\n\t"
15004#else
15005        "uxtb	r7, r10, ror #8\n\t"
15006#endif
15007#else
15008        "ubfx	r7, r10, #8, #8\n\t"
15009#endif
15010#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15011#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15012        "lsl	lr, r9, #8\n\t"
15013        "lsr	lr, lr, #24\n\t"
15014#else
15015        "uxtb	lr, r9, ror #16\n\t"
15016#endif
15017#else
15018        "ubfx	lr, r9, #16, #8\n\t"
15019#endif
15020        "lsr	r2, r8, #24\n\t"
15021        "ldrb	r4, [r0, r4, lsl #2]\n\t"
15022        "ldrb	r7, [r0, r7, lsl #2]\n\t"
15023        "ldrb	lr, [r0, lr, lsl #2]\n\t"
15024        "ldrb	r2, [r0, r2, lsl #2]\n\t"
15025#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15026#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15027        "lsl	r5, r8, #24\n\t"
15028        "lsr	r5, r5, #24\n\t"
15029#else
15030        "uxtb	r5, r8\n\t"
15031#endif
15032#else
15033        "ubfx	r5, r8, #0, #8\n\t"
15034#endif
15035        "eor	r4, r4, r7, lsl #8\n\t"
15036#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15037#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15038        "lsl	r7, r11, #16\n\t"
15039        "lsr	r7, r7, #24\n\t"
15040#else
15041        "uxtb	r7, r11, ror #8\n\t"
15042#endif
15043#else
15044        "ubfx	r7, r11, #8, #8\n\t"
15045#endif
15046        "eor	r4, r4, lr, lsl #16\n\t"
15047#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15048#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15049        "lsl	lr, r10, #8\n\t"
15050        "lsr	lr, lr, #24\n\t"
15051#else
15052        "uxtb	lr, r10, ror #16\n\t"
15053#endif
15054#else
15055        "ubfx	lr, r10, #16, #8\n\t"
15056#endif
15057        "eor	r4, r4, r2, lsl #24\n\t"
15058        "lsr	r2, r9, #24\n\t"
15059        "ldrb	r5, [r0, r5, lsl #2]\n\t"
15060        "ldrb	r7, [r0, r7, lsl #2]\n\t"
15061        "ldrb	lr, [r0, lr, lsl #2]\n\t"
15062        "ldrb	r2, [r0, r2, lsl #2]\n\t"
15063#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15064#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15065        "lsl	r6, r9, #24\n\t"
15066        "lsr	r6, r6, #24\n\t"
15067#else
15068        "uxtb	r6, r9\n\t"
15069#endif
15070#else
15071        "ubfx	r6, r9, #0, #8\n\t"
15072#endif
15073        "eor	r5, r5, r7, lsl #8\n\t"
15074#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15075#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15076        "lsl	r7, r8, #16\n\t"
15077        "lsr	r7, r7, #24\n\t"
15078#else
15079        "uxtb	r7, r8, ror #8\n\t"
15080#endif
15081#else
15082        "ubfx	r7, r8, #8, #8\n\t"
15083#endif
15084        "eor	r5, r5, lr, lsl #16\n\t"
15085#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15086#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15087        "lsl	lr, r11, #8\n\t"
15088        "lsr	lr, lr, #24\n\t"
15089#else
15090        "uxtb	lr, r11, ror #16\n\t"
15091#endif
15092#else
15093        "ubfx	lr, r11, #16, #8\n\t"
15094#endif
15095        "eor	r5, r5, r2, lsl #24\n\t"
15096        "lsr	r2, r10, #24\n\t"
15097        "ldrb	r6, [r0, r6, lsl #2]\n\t"
15098        "ldrb	r7, [r0, r7, lsl #2]\n\t"
15099        "ldrb	lr, [r0, lr, lsl #2]\n\t"
15100        "ldrb	r2, [r0, r2, lsl #2]\n\t"
15101        "lsr	r11, r11, #24\n\t"
15102        "eor	r6, r6, r7, lsl #8\n\t"
15103#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15104#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15105        "lsl	r7, r10, #24\n\t"
15106        "lsr	r7, r7, #24\n\t"
15107#else
15108        "uxtb	r7, r10\n\t"
15109#endif
15110#else
15111        "ubfx	r7, r10, #0, #8\n\t"
15112#endif
15113        "eor	r6, r6, lr, lsl #16\n\t"
15114#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15115#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15116        "lsl	lr, r9, #16\n\t"
15117        "lsr	lr, lr, #24\n\t"
15118#else
15119        "uxtb	lr, r9, ror #8\n\t"
15120#endif
15121#else
15122        "ubfx	lr, r9, #8, #8\n\t"
15123#endif
15124        "eor	r6, r6, r2, lsl #24\n\t"
15125#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15126#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15127        "lsl	r2, r8, #8\n\t"
15128        "lsr	r2, r2, #24\n\t"
15129#else
15130        "uxtb	r2, r8, ror #16\n\t"
15131#endif
15132#else
15133        "ubfx	r2, r8, #16, #8\n\t"
15134#endif
15135        "ldrb	r11, [r0, r11, lsl #2]\n\t"
15136        "ldrb	r7, [r0, r7, lsl #2]\n\t"
15137        "ldrb	lr, [r0, lr, lsl #2]\n\t"
15138        "ldrb	r2, [r0, r2, lsl #2]\n\t"
15139        "eor	lr, lr, r11, lsl #16\n\t"
15140        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
15141        "eor	r7, r7, lr, lsl #8\n\t"
15142        "eor	r7, r7, r2, lsl #16\n\t"
15143        /*   XOR in Key Schedule */
15144        "eor	r4, r4, r8\n\t"
15145        "eor	r5, r5, r9\n\t"
15146        "eor	r6, r6, r10\n\t"
15147        "eor	r7, r7, r11\n\t"
15148#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
15149        "pop	{r1, %[len], lr}\n\t"
15150        "ldr	%[ks], [sp]\n\t"
15151#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15152        "eor	r8, r4, r4, ror #16\n\t"
15153        "eor	r9, r5, r5, ror #16\n\t"
15154        "eor	r10, r6, r6, ror #16\n\t"
15155        "eor	r11, r7, r7, ror #16\n\t"
15156        "bic	r8, r8, #0xff0000\n\t"
15157        "bic	r9, r9, #0xff0000\n\t"
15158        "bic	r10, r10, #0xff0000\n\t"
15159        "bic	r11, r11, #0xff0000\n\t"
15160        "ror	r4, r4, #8\n\t"
15161        "ror	r5, r5, #8\n\t"
15162        "ror	r6, r6, #8\n\t"
15163        "ror	r7, r7, #8\n\t"
15164        "eor	r4, r4, r8, lsr #8\n\t"
15165        "eor	r5, r5, r9, lsr #8\n\t"
15166        "eor	r6, r6, r10, lsr #8\n\t"
15167        "eor	r7, r7, r11, lsr #8\n\t"
15168#else
15169        "rev	r4, r4\n\t"
15170        "rev	r5, r5\n\t"
15171        "rev	r6, r6\n\t"
15172        "rev	r7, r7\n\t"
15173#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
15174        "ldr	r8, [lr]\n\t"
15175        "ldr	r9, [lr, #4]\n\t"
15176        "ldr	r10, [lr, #8]\n\t"
15177        "ldr	r11, [lr, #12]\n\t"
15178        "eor	r4, r4, r8\n\t"
15179        "eor	r5, r5, r9\n\t"
15180        "eor	r6, r6, r10\n\t"
15181        "eor	r7, r7, r11\n\t"
15182        "ldr	r8, [sp, #4]\n\t"
15183        "str	r4, [%[out]]\n\t"
15184        "str	r5, [%[out], #4]\n\t"
15185        "str	r6, [%[out], #8]\n\t"
15186        "str	r7, [%[out], #12]\n\t"
15187        "ldm	r8, {r4, r5, r6, r7}\n\t"
15188        "subs	%[len], %[len], #16\n\t"
15189        "add	lr, lr, #16\n\t"
15190        "add	%[out], %[out], #16\n\t"
15191        "bne	L_AES_CTR_encrypt_loop_block_256_%=\n\t"
15192        "b	L_AES_CTR_encrypt_end_%=\n\t"
15193        "\n"
15194    "L_AES_CTR_encrypt_start_block_192_%=:\n\t"
15195        "\n"
15196    "L_AES_CTR_encrypt_loop_block_192_%=:\n\t"
15197        "push	{r1, %[len], lr}\n\t"
15198        "ldr	lr, [sp, #16]\n\t"
15199        "adds	r11, r7, #1\n\t"
15200        "adcs	r10, r6, #0\n\t"
15201        "adcs	r9, r5, #0\n\t"
15202        "adc	r8, r4, #0\n\t"
15203        "stm	lr, {r8, r9, r10, r11}\n\t"
15204        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
15205        /* Round: 0 - XOR in key schedule */
15206        "eor	r4, r4, r8\n\t"
15207        "eor	r5, r5, r9\n\t"
15208        "eor	r6, r6, r10\n\t"
15209        "eor	r7, r7, r11\n\t"
15210        "mov	r1, #5\n\t"
15211#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
15212        "bl	AES_encrypt_block\n\t"
15213#else
15214        "\n"
15215    "L_AES_CTR_encrypt_block_nr_192_%=:\n\t"
15216#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15217#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15218        "lsl	r8, r5, #8\n\t"
15219        "lsr	r8, r8, #24\n\t"
15220#else
15221        "uxtb	r8, r5, ror #16\n\t"
15222#endif
15223#else
15224        "ubfx	r8, r5, #16, #8\n\t"
15225#endif
15226        "lsr	r11, r4, #24\n\t"
15227#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15228#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15229        "lsl	lr, r6, #16\n\t"
15230        "lsr	lr, lr, #24\n\t"
15231#else
15232        "uxtb	lr, r6, ror #8\n\t"
15233#endif
15234#else
15235        "ubfx	lr, r6, #8, #8\n\t"
15236#endif
15237#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15238#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15239        "lsl	r2, r7, #24\n\t"
15240        "lsr	r2, r2, #24\n\t"
15241#else
15242        "uxtb	r2, r7\n\t"
15243#endif
15244#else
15245        "ubfx	r2, r7, #0, #8\n\t"
15246#endif
15247        "ldr	r8, [r0, r8, lsl #2]\n\t"
15248        "ldr	r11, [r0, r11, lsl #2]\n\t"
15249        "ldr	lr, [r0, lr, lsl #2]\n\t"
15250        "ldr	r2, [r0, r2, lsl #2]\n\t"
15251#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15252#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15253        "lsl	r9, r6, #8\n\t"
15254        "lsr	r9, r9, #24\n\t"
15255#else
15256        "uxtb	r9, r6, ror #16\n\t"
15257#endif
15258#else
15259        "ubfx	r9, r6, #16, #8\n\t"
15260#endif
15261        "eor	r8, r8, r11, ror #24\n\t"
15262        "lsr	r11, r5, #24\n\t"
15263        "eor	r8, r8, lr, ror #8\n\t"
15264#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15265#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15266        "lsl	lr, r7, #16\n\t"
15267        "lsr	lr, lr, #24\n\t"
15268#else
15269        "uxtb	lr, r7, ror #8\n\t"
15270#endif
15271#else
15272        "ubfx	lr, r7, #8, #8\n\t"
15273#endif
15274        "eor	r8, r8, r2, ror #16\n\t"
15275#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15276#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15277        "lsl	r2, r4, #24\n\t"
15278        "lsr	r2, r2, #24\n\t"
15279#else
15280        "uxtb	r2, r4\n\t"
15281#endif
15282#else
15283        "ubfx	r2, r4, #0, #8\n\t"
15284#endif
15285        "ldr	r9, [r0, r9, lsl #2]\n\t"
15286        "ldr	r11, [r0, r11, lsl #2]\n\t"
15287        "ldr	lr, [r0, lr, lsl #2]\n\t"
15288        "ldr	r2, [r0, r2, lsl #2]\n\t"
15289#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15290#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15291        "lsl	r10, r7, #8\n\t"
15292        "lsr	r10, r10, #24\n\t"
15293#else
15294        "uxtb	r10, r7, ror #16\n\t"
15295#endif
15296#else
15297        "ubfx	r10, r7, #16, #8\n\t"
15298#endif
15299        "eor	r9, r9, r11, ror #24\n\t"
15300        "lsr	r11, r6, #24\n\t"
15301        "eor	r9, r9, lr, ror #8\n\t"
15302#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15303#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15304        "lsl	lr, r4, #16\n\t"
15305        "lsr	lr, lr, #24\n\t"
15306#else
15307        "uxtb	lr, r4, ror #8\n\t"
15308#endif
15309#else
15310        "ubfx	lr, r4, #8, #8\n\t"
15311#endif
15312        "eor	r9, r9, r2, ror #16\n\t"
15313#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15314#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15315        "lsl	r2, r5, #24\n\t"
15316        "lsr	r2, r2, #24\n\t"
15317#else
15318        "uxtb	r2, r5\n\t"
15319#endif
15320#else
15321        "ubfx	r2, r5, #0, #8\n\t"
15322#endif
15323        "ldr	r10, [r0, r10, lsl #2]\n\t"
15324        "ldr	r11, [r0, r11, lsl #2]\n\t"
15325        "ldr	lr, [r0, lr, lsl #2]\n\t"
15326        "ldr	r2, [r0, r2, lsl #2]\n\t"
15327#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15328#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15329        "lsl	r6, r6, #24\n\t"
15330        "lsr	r6, r6, #24\n\t"
15331#else
15332        "uxtb	r6, r6\n\t"
15333#endif
15334#else
15335        "ubfx	r6, r6, #0, #8\n\t"
15336#endif
15337        "eor	r10, r10, r11, ror #24\n\t"
15338#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15339#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15340        "lsl	r11, r4, #8\n\t"
15341        "lsr	r11, r11, #24\n\t"
15342#else
15343        "uxtb	r11, r4, ror #16\n\t"
15344#endif
15345#else
15346        "ubfx	r11, r4, #16, #8\n\t"
15347#endif
15348        "eor	r10, r10, lr, ror #8\n\t"
15349        "lsr	lr, r7, #24\n\t"
15350        "eor	r10, r10, r2, ror #16\n\t"
15351#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15352#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15353        "lsl	r2, r5, #16\n\t"
15354        "lsr	r2, r2, #24\n\t"
15355#else
15356        "uxtb	r2, r5, ror #8\n\t"
15357#endif
15358#else
15359        "ubfx	r2, r5, #8, #8\n\t"
15360#endif
15361        "ldr	r6, [r0, r6, lsl #2]\n\t"
15362        "ldr	lr, [r0, lr, lsl #2]\n\t"
15363        "ldr	r11, [r0, r11, lsl #2]\n\t"
15364        "ldr	r2, [r0, r2, lsl #2]\n\t"
15365        "eor	lr, lr, r6, ror #24\n\t"
15366        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
15367        "eor	r11, r11, lr, ror #24\n\t"
15368        "eor	r11, r11, r2, ror #8\n\t"
15369        /*   XOR in Key Schedule */
15370        "eor	r8, r8, r4\n\t"
15371        "eor	r9, r9, r5\n\t"
15372        "eor	r10, r10, r6\n\t"
15373        "eor	r11, r11, r7\n\t"
15374#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15375#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15376        "lsl	r4, r9, #8\n\t"
15377        "lsr	r4, r4, #24\n\t"
15378#else
15379        "uxtb	r4, r9, ror #16\n\t"
15380#endif
15381#else
15382        "ubfx	r4, r9, #16, #8\n\t"
15383#endif
15384        "lsr	r7, r8, #24\n\t"
15385#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15386#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15387        "lsl	lr, r10, #16\n\t"
15388        "lsr	lr, lr, #24\n\t"
15389#else
15390        "uxtb	lr, r10, ror #8\n\t"
15391#endif
15392#else
15393        "ubfx	lr, r10, #8, #8\n\t"
15394#endif
15395#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15396#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15397        "lsl	r2, r11, #24\n\t"
15398        "lsr	r2, r2, #24\n\t"
15399#else
15400        "uxtb	r2, r11\n\t"
15401#endif
15402#else
15403        "ubfx	r2, r11, #0, #8\n\t"
15404#endif
15405        "ldr	r4, [r0, r4, lsl #2]\n\t"
15406        "ldr	r7, [r0, r7, lsl #2]\n\t"
15407        "ldr	lr, [r0, lr, lsl #2]\n\t"
15408        "ldr	r2, [r0, r2, lsl #2]\n\t"
15409#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15410#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15411        "lsl	r5, r10, #8\n\t"
15412        "lsr	r5, r5, #24\n\t"
15413#else
15414        "uxtb	r5, r10, ror #16\n\t"
15415#endif
15416#else
15417        "ubfx	r5, r10, #16, #8\n\t"
15418#endif
15419        "eor	r4, r4, r7, ror #24\n\t"
15420        "lsr	r7, r9, #24\n\t"
15421        "eor	r4, r4, lr, ror #8\n\t"
15422#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15423#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15424        "lsl	lr, r11, #16\n\t"
15425        "lsr	lr, lr, #24\n\t"
15426#else
15427        "uxtb	lr, r11, ror #8\n\t"
15428#endif
15429#else
15430        "ubfx	lr, r11, #8, #8\n\t"
15431#endif
15432        "eor	r4, r4, r2, ror #16\n\t"
15433#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15434#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15435        "lsl	r2, r8, #24\n\t"
15436        "lsr	r2, r2, #24\n\t"
15437#else
15438        "uxtb	r2, r8\n\t"
15439#endif
15440#else
15441        "ubfx	r2, r8, #0, #8\n\t"
15442#endif
15443        "ldr	r5, [r0, r5, lsl #2]\n\t"
15444        "ldr	r7, [r0, r7, lsl #2]\n\t"
15445        "ldr	lr, [r0, lr, lsl #2]\n\t"
15446        "ldr	r2, [r0, r2, lsl #2]\n\t"
15447#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15448#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15449        "lsl	r6, r11, #8\n\t"
15450        "lsr	r6, r6, #24\n\t"
15451#else
15452        "uxtb	r6, r11, ror #16\n\t"
15453#endif
15454#else
15455        "ubfx	r6, r11, #16, #8\n\t"
15456#endif
15457        "eor	r5, r5, r7, ror #24\n\t"
15458        "lsr	r7, r10, #24\n\t"
15459        "eor	r5, r5, lr, ror #8\n\t"
15460#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15461#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15462        "lsl	lr, r8, #16\n\t"
15463        "lsr	lr, lr, #24\n\t"
15464#else
15465        "uxtb	lr, r8, ror #8\n\t"
15466#endif
15467#else
15468        "ubfx	lr, r8, #8, #8\n\t"
15469#endif
15470        "eor	r5, r5, r2, ror #16\n\t"
15471#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15472#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15473        "lsl	r2, r9, #24\n\t"
15474        "lsr	r2, r2, #24\n\t"
15475#else
15476        "uxtb	r2, r9\n\t"
15477#endif
15478#else
15479        "ubfx	r2, r9, #0, #8\n\t"
15480#endif
15481        "ldr	r6, [r0, r6, lsl #2]\n\t"
15482        "ldr	r7, [r0, r7, lsl #2]\n\t"
15483        "ldr	lr, [r0, lr, lsl #2]\n\t"
15484        "ldr	r2, [r0, r2, lsl #2]\n\t"
15485#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15486#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15487        "lsl	r10, r10, #24\n\t"
15488        "lsr	r10, r10, #24\n\t"
15489#else
15490        "uxtb	r10, r10\n\t"
15491#endif
15492#else
15493        "ubfx	r10, r10, #0, #8\n\t"
15494#endif
15495        "eor	r6, r6, r7, ror #24\n\t"
15496#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15497#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15498        "lsl	r7, r8, #8\n\t"
15499        "lsr	r7, r7, #24\n\t"
15500#else
15501        "uxtb	r7, r8, ror #16\n\t"
15502#endif
15503#else
15504        "ubfx	r7, r8, #16, #8\n\t"
15505#endif
15506        "eor	r6, r6, lr, ror #8\n\t"
15507        "lsr	lr, r11, #24\n\t"
15508        "eor	r6, r6, r2, ror #16\n\t"
15509#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15510#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15511        "lsl	r2, r9, #16\n\t"
15512        "lsr	r2, r2, #24\n\t"
15513#else
15514        "uxtb	r2, r9, ror #8\n\t"
15515#endif
15516#else
15517        "ubfx	r2, r9, #8, #8\n\t"
15518#endif
15519        "ldr	r10, [r0, r10, lsl #2]\n\t"
15520        "ldr	lr, [r0, lr, lsl #2]\n\t"
15521        "ldr	r7, [r0, r7, lsl #2]\n\t"
15522        "ldr	r2, [r0, r2, lsl #2]\n\t"
15523        "eor	lr, lr, r10, ror #24\n\t"
15524        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
15525        "eor	r7, r7, lr, ror #24\n\t"
15526        "eor	r7, r7, r2, ror #8\n\t"
15527        /*   XOR in Key Schedule */
15528        "eor	r4, r4, r8\n\t"
15529        "eor	r5, r5, r9\n\t"
15530        "eor	r6, r6, r10\n\t"
15531        "eor	r7, r7, r11\n\t"
15532        "subs	r1, r1, #1\n\t"
15533        "bne	L_AES_CTR_encrypt_block_nr_192_%=\n\t"
15534#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15535#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15536        "lsl	r8, r5, #8\n\t"
15537        "lsr	r8, r8, #24\n\t"
15538#else
15539        "uxtb	r8, r5, ror #16\n\t"
15540#endif
15541#else
15542        "ubfx	r8, r5, #16, #8\n\t"
15543#endif
15544        "lsr	r11, r4, #24\n\t"
15545#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15546#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15547        "lsl	lr, r6, #16\n\t"
15548        "lsr	lr, lr, #24\n\t"
15549#else
15550        "uxtb	lr, r6, ror #8\n\t"
15551#endif
15552#else
15553        "ubfx	lr, r6, #8, #8\n\t"
15554#endif
15555#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15556#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15557        "lsl	r2, r7, #24\n\t"
15558        "lsr	r2, r2, #24\n\t"
15559#else
15560        "uxtb	r2, r7\n\t"
15561#endif
15562#else
15563        "ubfx	r2, r7, #0, #8\n\t"
15564#endif
15565        "ldr	r8, [r0, r8, lsl #2]\n\t"
15566        "ldr	r11, [r0, r11, lsl #2]\n\t"
15567        "ldr	lr, [r0, lr, lsl #2]\n\t"
15568        "ldr	r2, [r0, r2, lsl #2]\n\t"
15569#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15570#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15571        "lsl	r9, r6, #8\n\t"
15572        "lsr	r9, r9, #24\n\t"
15573#else
15574        "uxtb	r9, r6, ror #16\n\t"
15575#endif
15576#else
15577        "ubfx	r9, r6, #16, #8\n\t"
15578#endif
15579        "eor	r8, r8, r11, ror #24\n\t"
15580        "lsr	r11, r5, #24\n\t"
15581        "eor	r8, r8, lr, ror #8\n\t"
15582#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15583#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15584        "lsl	lr, r7, #16\n\t"
15585        "lsr	lr, lr, #24\n\t"
15586#else
15587        "uxtb	lr, r7, ror #8\n\t"
15588#endif
15589#else
15590        "ubfx	lr, r7, #8, #8\n\t"
15591#endif
15592        "eor	r8, r8, r2, ror #16\n\t"
15593#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15594#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15595        "lsl	r2, r4, #24\n\t"
15596        "lsr	r2, r2, #24\n\t"
15597#else
15598        "uxtb	r2, r4\n\t"
15599#endif
15600#else
15601        "ubfx	r2, r4, #0, #8\n\t"
15602#endif
15603        "ldr	r9, [r0, r9, lsl #2]\n\t"
15604        "ldr	r11, [r0, r11, lsl #2]\n\t"
15605        "ldr	lr, [r0, lr, lsl #2]\n\t"
15606        "ldr	r2, [r0, r2, lsl #2]\n\t"
15607#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15608#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15609        "lsl	r10, r7, #8\n\t"
15610        "lsr	r10, r10, #24\n\t"
15611#else
15612        "uxtb	r10, r7, ror #16\n\t"
15613#endif
15614#else
15615        "ubfx	r10, r7, #16, #8\n\t"
15616#endif
15617        "eor	r9, r9, r11, ror #24\n\t"
15618        "lsr	r11, r6, #24\n\t"
15619        "eor	r9, r9, lr, ror #8\n\t"
15620#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15621#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15622        "lsl	lr, r4, #16\n\t"
15623        "lsr	lr, lr, #24\n\t"
15624#else
15625        "uxtb	lr, r4, ror #8\n\t"
15626#endif
15627#else
15628        "ubfx	lr, r4, #8, #8\n\t"
15629#endif
15630        "eor	r9, r9, r2, ror #16\n\t"
15631#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15632#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15633        "lsl	r2, r5, #24\n\t"
15634        "lsr	r2, r2, #24\n\t"
15635#else
15636        "uxtb	r2, r5\n\t"
15637#endif
15638#else
15639        "ubfx	r2, r5, #0, #8\n\t"
15640#endif
15641        "ldr	r10, [r0, r10, lsl #2]\n\t"
15642        "ldr	r11, [r0, r11, lsl #2]\n\t"
15643        "ldr	lr, [r0, lr, lsl #2]\n\t"
15644        "ldr	r2, [r0, r2, lsl #2]\n\t"
15645#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15647        "lsl	r6, r6, #24\n\t"
15648        "lsr	r6, r6, #24\n\t"
15649#else
15650        "uxtb	r6, r6\n\t"
15651#endif
15652#else
15653        "ubfx	r6, r6, #0, #8\n\t"
15654#endif
15655        "eor	r10, r10, r11, ror #24\n\t"
15656#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15657#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15658        "lsl	r11, r4, #8\n\t"
15659        "lsr	r11, r11, #24\n\t"
15660#else
15661        "uxtb	r11, r4, ror #16\n\t"
15662#endif
15663#else
15664        "ubfx	r11, r4, #16, #8\n\t"
15665#endif
15666        "eor	r10, r10, lr, ror #8\n\t"
15667        "lsr	lr, r7, #24\n\t"
15668        "eor	r10, r10, r2, ror #16\n\t"
15669#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15670#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15671        "lsl	r2, r5, #16\n\t"
15672        "lsr	r2, r2, #24\n\t"
15673#else
15674        "uxtb	r2, r5, ror #8\n\t"
15675#endif
15676#else
15677        "ubfx	r2, r5, #8, #8\n\t"
15678#endif
15679        "ldr	r6, [r0, r6, lsl #2]\n\t"
15680        "ldr	lr, [r0, lr, lsl #2]\n\t"
15681        "ldr	r11, [r0, r11, lsl #2]\n\t"
15682        "ldr	r2, [r0, r2, lsl #2]\n\t"
15683        "eor	lr, lr, r6, ror #24\n\t"
15684        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
15685        "eor	r11, r11, lr, ror #24\n\t"
15686        "eor	r11, r11, r2, ror #8\n\t"
15687        /*   XOR in Key Schedule */
15688        "eor	r8, r8, r4\n\t"
15689        "eor	r9, r9, r5\n\t"
15690        "eor	r10, r10, r6\n\t"
15691        "eor	r11, r11, r7\n\t"
15692#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15693#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15694        "lsl	r4, r11, #24\n\t"
15695        "lsr	r4, r4, #24\n\t"
15696#else
15697        "uxtb	r4, r11\n\t"
15698#endif
15699#else
15700        "ubfx	r4, r11, #0, #8\n\t"
15701#endif
15702#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15703#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15704        "lsl	r7, r10, #16\n\t"
15705        "lsr	r7, r7, #24\n\t"
15706#else
15707        "uxtb	r7, r10, ror #8\n\t"
15708#endif
15709#else
15710        "ubfx	r7, r10, #8, #8\n\t"
15711#endif
15712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15713#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15714        "lsl	lr, r9, #8\n\t"
15715        "lsr	lr, lr, #24\n\t"
15716#else
15717        "uxtb	lr, r9, ror #16\n\t"
15718#endif
15719#else
15720        "ubfx	lr, r9, #16, #8\n\t"
15721#endif
15722        "lsr	r2, r8, #24\n\t"
15723        "ldrb	r4, [r0, r4, lsl #2]\n\t"
15724        "ldrb	r7, [r0, r7, lsl #2]\n\t"
15725        "ldrb	lr, [r0, lr, lsl #2]\n\t"
15726        "ldrb	r2, [r0, r2, lsl #2]\n\t"
15727#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15728#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15729        "lsl	r5, r8, #24\n\t"
15730        "lsr	r5, r5, #24\n\t"
15731#else
15732        "uxtb	r5, r8\n\t"
15733#endif
15734#else
15735        "ubfx	r5, r8, #0, #8\n\t"
15736#endif
15737        "eor	r4, r4, r7, lsl #8\n\t"
15738#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15739#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15740        "lsl	r7, r11, #16\n\t"
15741        "lsr	r7, r7, #24\n\t"
15742#else
15743        "uxtb	r7, r11, ror #8\n\t"
15744#endif
15745#else
15746        "ubfx	r7, r11, #8, #8\n\t"
15747#endif
15748        "eor	r4, r4, lr, lsl #16\n\t"
15749#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15750#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15751        "lsl	lr, r10, #8\n\t"
15752        "lsr	lr, lr, #24\n\t"
15753#else
15754        "uxtb	lr, r10, ror #16\n\t"
15755#endif
15756#else
15757        "ubfx	lr, r10, #16, #8\n\t"
15758#endif
15759        "eor	r4, r4, r2, lsl #24\n\t"
15760        "lsr	r2, r9, #24\n\t"
15761        "ldrb	r5, [r0, r5, lsl #2]\n\t"
15762        "ldrb	r7, [r0, r7, lsl #2]\n\t"
15763        "ldrb	lr, [r0, lr, lsl #2]\n\t"
15764        "ldrb	r2, [r0, r2, lsl #2]\n\t"
15765#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15766#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15767        "lsl	r6, r9, #24\n\t"
15768        "lsr	r6, r6, #24\n\t"
15769#else
15770        "uxtb	r6, r9\n\t"
15771#endif
15772#else
15773        "ubfx	r6, r9, #0, #8\n\t"
15774#endif
15775        "eor	r5, r5, r7, lsl #8\n\t"
15776#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15777#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15778        "lsl	r7, r8, #16\n\t"
15779        "lsr	r7, r7, #24\n\t"
15780#else
15781        "uxtb	r7, r8, ror #8\n\t"
15782#endif
15783#else
15784        "ubfx	r7, r8, #8, #8\n\t"
15785#endif
15786        "eor	r5, r5, lr, lsl #16\n\t"
15787#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15788#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15789        "lsl	lr, r11, #8\n\t"
15790        "lsr	lr, lr, #24\n\t"
15791#else
15792        "uxtb	lr, r11, ror #16\n\t"
15793#endif
15794#else
15795        "ubfx	lr, r11, #16, #8\n\t"
15796#endif
15797        "eor	r5, r5, r2, lsl #24\n\t"
15798        "lsr	r2, r10, #24\n\t"
15799        "ldrb	r6, [r0, r6, lsl #2]\n\t"
15800        "ldrb	r7, [r0, r7, lsl #2]\n\t"
15801        "ldrb	lr, [r0, lr, lsl #2]\n\t"
15802        "ldrb	r2, [r0, r2, lsl #2]\n\t"
15803        "lsr	r11, r11, #24\n\t"
15804        "eor	r6, r6, r7, lsl #8\n\t"
15805#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15806#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15807        "lsl	r7, r10, #24\n\t"
15808        "lsr	r7, r7, #24\n\t"
15809#else
15810        "uxtb	r7, r10\n\t"
15811#endif
15812#else
15813        "ubfx	r7, r10, #0, #8\n\t"
15814#endif
15815        "eor	r6, r6, lr, lsl #16\n\t"
15816#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15817#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15818        "lsl	lr, r9, #16\n\t"
15819        "lsr	lr, lr, #24\n\t"
15820#else
15821        "uxtb	lr, r9, ror #8\n\t"
15822#endif
15823#else
15824        "ubfx	lr, r9, #8, #8\n\t"
15825#endif
15826        "eor	r6, r6, r2, lsl #24\n\t"
15827#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15828#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15829        "lsl	r2, r8, #8\n\t"
15830        "lsr	r2, r2, #24\n\t"
15831#else
15832        "uxtb	r2, r8, ror #16\n\t"
15833#endif
15834#else
15835        "ubfx	r2, r8, #16, #8\n\t"
15836#endif
15837        "ldrb	r11, [r0, r11, lsl #2]\n\t"
15838        "ldrb	r7, [r0, r7, lsl #2]\n\t"
15839        "ldrb	lr, [r0, lr, lsl #2]\n\t"
15840        "ldrb	r2, [r0, r2, lsl #2]\n\t"
15841        "eor	lr, lr, r11, lsl #16\n\t"
15842        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
15843        "eor	r7, r7, lr, lsl #8\n\t"
15844        "eor	r7, r7, r2, lsl #16\n\t"
15845        /*   XOR in Key Schedule */
15846        "eor	r4, r4, r8\n\t"
15847        "eor	r5, r5, r9\n\t"
15848        "eor	r6, r6, r10\n\t"
15849        "eor	r7, r7, r11\n\t"
15850#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
15851        "pop	{r1, %[len], lr}\n\t"
15852        "ldr	%[ks], [sp]\n\t"
15853#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15854        "eor	r8, r4, r4, ror #16\n\t"
15855        "eor	r9, r5, r5, ror #16\n\t"
15856        "eor	r10, r6, r6, ror #16\n\t"
15857        "eor	r11, r7, r7, ror #16\n\t"
15858        "bic	r8, r8, #0xff0000\n\t"
15859        "bic	r9, r9, #0xff0000\n\t"
15860        "bic	r10, r10, #0xff0000\n\t"
15861        "bic	r11, r11, #0xff0000\n\t"
15862        "ror	r4, r4, #8\n\t"
15863        "ror	r5, r5, #8\n\t"
15864        "ror	r6, r6, #8\n\t"
15865        "ror	r7, r7, #8\n\t"
15866        "eor	r4, r4, r8, lsr #8\n\t"
15867        "eor	r5, r5, r9, lsr #8\n\t"
15868        "eor	r6, r6, r10, lsr #8\n\t"
15869        "eor	r7, r7, r11, lsr #8\n\t"
15870#else
15871        "rev	r4, r4\n\t"
15872        "rev	r5, r5\n\t"
15873        "rev	r6, r6\n\t"
15874        "rev	r7, r7\n\t"
15875#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
15876        "ldr	r8, [lr]\n\t"
15877        "ldr	r9, [lr, #4]\n\t"
15878        "ldr	r10, [lr, #8]\n\t"
15879        "ldr	r11, [lr, #12]\n\t"
15880        "eor	r4, r4, r8\n\t"
15881        "eor	r5, r5, r9\n\t"
15882        "eor	r6, r6, r10\n\t"
15883        "eor	r7, r7, r11\n\t"
15884        "ldr	r8, [sp, #4]\n\t"
15885        "str	r4, [%[out]]\n\t"
15886        "str	r5, [%[out], #4]\n\t"
15887        "str	r6, [%[out], #8]\n\t"
15888        "str	r7, [%[out], #12]\n\t"
15889        "ldm	r8, {r4, r5, r6, r7}\n\t"
15890        "subs	%[len], %[len], #16\n\t"
15891        "add	lr, lr, #16\n\t"
15892        "add	%[out], %[out], #16\n\t"
15893        "bne	L_AES_CTR_encrypt_loop_block_192_%=\n\t"
15894        "b	L_AES_CTR_encrypt_end_%=\n\t"
15895        "\n"
15896    "L_AES_CTR_encrypt_start_block_128_%=:\n\t"
15897        "\n"
15898    "L_AES_CTR_encrypt_loop_block_128_%=:\n\t"
15899        "push	{r1, %[len], lr}\n\t"
15900        "ldr	lr, [sp, #16]\n\t"
15901        "adds	r11, r7, #1\n\t"
15902        "adcs	r10, r6, #0\n\t"
15903        "adcs	r9, r5, #0\n\t"
15904        "adc	r8, r4, #0\n\t"
15905        "stm	lr, {r8, r9, r10, r11}\n\t"
15906        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
15907        /* Round: 0 - XOR in key schedule */
15908        "eor	r4, r4, r8\n\t"
15909        "eor	r5, r5, r9\n\t"
15910        "eor	r6, r6, r10\n\t"
15911        "eor	r7, r7, r11\n\t"
15912        "mov	r1, #4\n\t"
15913#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
15914        "bl	AES_encrypt_block\n\t"
15915#else
15916        "\n"
15917    "L_AES_CTR_encrypt_block_nr_128_%=:\n\t"
15918#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15919#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15920        "lsl	r8, r5, #8\n\t"
15921        "lsr	r8, r8, #24\n\t"
15922#else
15923        "uxtb	r8, r5, ror #16\n\t"
15924#endif
15925#else
15926        "ubfx	r8, r5, #16, #8\n\t"
15927#endif
15928        "lsr	r11, r4, #24\n\t"
15929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15930#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15931        "lsl	lr, r6, #16\n\t"
15932        "lsr	lr, lr, #24\n\t"
15933#else
15934        "uxtb	lr, r6, ror #8\n\t"
15935#endif
15936#else
15937        "ubfx	lr, r6, #8, #8\n\t"
15938#endif
15939#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15940#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15941        "lsl	r2, r7, #24\n\t"
15942        "lsr	r2, r2, #24\n\t"
15943#else
15944        "uxtb	r2, r7\n\t"
15945#endif
15946#else
15947        "ubfx	r2, r7, #0, #8\n\t"
15948#endif
15949        "ldr	r8, [r0, r8, lsl #2]\n\t"
15950        "ldr	r11, [r0, r11, lsl #2]\n\t"
15951        "ldr	lr, [r0, lr, lsl #2]\n\t"
15952        "ldr	r2, [r0, r2, lsl #2]\n\t"
15953#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15954#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15955        "lsl	r9, r6, #8\n\t"
15956        "lsr	r9, r9, #24\n\t"
15957#else
15958        "uxtb	r9, r6, ror #16\n\t"
15959#endif
15960#else
15961        "ubfx	r9, r6, #16, #8\n\t"
15962#endif
15963        "eor	r8, r8, r11, ror #24\n\t"
15964        "lsr	r11, r5, #24\n\t"
15965        "eor	r8, r8, lr, ror #8\n\t"
15966#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15967#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15968        "lsl	lr, r7, #16\n\t"
15969        "lsr	lr, lr, #24\n\t"
15970#else
15971        "uxtb	lr, r7, ror #8\n\t"
15972#endif
15973#else
15974        "ubfx	lr, r7, #8, #8\n\t"
15975#endif
15976        "eor	r8, r8, r2, ror #16\n\t"
15977#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15978#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15979        "lsl	r2, r4, #24\n\t"
15980        "lsr	r2, r2, #24\n\t"
15981#else
15982        "uxtb	r2, r4\n\t"
15983#endif
15984#else
15985        "ubfx	r2, r4, #0, #8\n\t"
15986#endif
15987        "ldr	r9, [r0, r9, lsl #2]\n\t"
15988        "ldr	r11, [r0, r11, lsl #2]\n\t"
15989        "ldr	lr, [r0, lr, lsl #2]\n\t"
15990        "ldr	r2, [r0, r2, lsl #2]\n\t"
15991#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15993        "lsl	r10, r7, #8\n\t"
15994        "lsr	r10, r10, #24\n\t"
15995#else
15996        "uxtb	r10, r7, ror #16\n\t"
15997#endif
15998#else
15999        "ubfx	r10, r7, #16, #8\n\t"
16000#endif
16001        "eor	r9, r9, r11, ror #24\n\t"
16002        "lsr	r11, r6, #24\n\t"
16003        "eor	r9, r9, lr, ror #8\n\t"
16004#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16005#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16006        "lsl	lr, r4, #16\n\t"
16007        "lsr	lr, lr, #24\n\t"
16008#else
16009        "uxtb	lr, r4, ror #8\n\t"
16010#endif
16011#else
16012        "ubfx	lr, r4, #8, #8\n\t"
16013#endif
16014        "eor	r9, r9, r2, ror #16\n\t"
16015#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16016#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16017        "lsl	r2, r5, #24\n\t"
16018        "lsr	r2, r2, #24\n\t"
16019#else
16020        "uxtb	r2, r5\n\t"
16021#endif
16022#else
16023        "ubfx	r2, r5, #0, #8\n\t"
16024#endif
16025        "ldr	r10, [r0, r10, lsl #2]\n\t"
16026        "ldr	r11, [r0, r11, lsl #2]\n\t"
16027        "ldr	lr, [r0, lr, lsl #2]\n\t"
16028        "ldr	r2, [r0, r2, lsl #2]\n\t"
16029#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16031        "lsl	r6, r6, #24\n\t"
16032        "lsr	r6, r6, #24\n\t"
16033#else
16034        "uxtb	r6, r6\n\t"
16035#endif
16036#else
16037        "ubfx	r6, r6, #0, #8\n\t"
16038#endif
16039        "eor	r10, r10, r11, ror #24\n\t"
16040#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16041#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16042        "lsl	r11, r4, #8\n\t"
16043        "lsr	r11, r11, #24\n\t"
16044#else
16045        "uxtb	r11, r4, ror #16\n\t"
16046#endif
16047#else
16048        "ubfx	r11, r4, #16, #8\n\t"
16049#endif
16050        "eor	r10, r10, lr, ror #8\n\t"
16051        "lsr	lr, r7, #24\n\t"
16052        "eor	r10, r10, r2, ror #16\n\t"
16053#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16054#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16055        "lsl	r2, r5, #16\n\t"
16056        "lsr	r2, r2, #24\n\t"
16057#else
16058        "uxtb	r2, r5, ror #8\n\t"
16059#endif
16060#else
16061        "ubfx	r2, r5, #8, #8\n\t"
16062#endif
16063        "ldr	r6, [r0, r6, lsl #2]\n\t"
16064        "ldr	lr, [r0, lr, lsl #2]\n\t"
16065        "ldr	r11, [r0, r11, lsl #2]\n\t"
16066        "ldr	r2, [r0, r2, lsl #2]\n\t"
16067        "eor	lr, lr, r6, ror #24\n\t"
16068        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
16069        "eor	r11, r11, lr, ror #24\n\t"
16070        "eor	r11, r11, r2, ror #8\n\t"
16071        /*   XOR in Key Schedule */
16072        "eor	r8, r8, r4\n\t"
16073        "eor	r9, r9, r5\n\t"
16074        "eor	r10, r10, r6\n\t"
16075        "eor	r11, r11, r7\n\t"
16076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16077#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16078        "lsl	r4, r9, #8\n\t"
16079        "lsr	r4, r4, #24\n\t"
16080#else
16081        "uxtb	r4, r9, ror #16\n\t"
16082#endif
16083#else
16084        "ubfx	r4, r9, #16, #8\n\t"
16085#endif
16086        "lsr	r7, r8, #24\n\t"
16087#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16088#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16089        "lsl	lr, r10, #16\n\t"
16090        "lsr	lr, lr, #24\n\t"
16091#else
16092        "uxtb	lr, r10, ror #8\n\t"
16093#endif
16094#else
16095        "ubfx	lr, r10, #8, #8\n\t"
16096#endif
16097#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16098#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16099        "lsl	r2, r11, #24\n\t"
16100        "lsr	r2, r2, #24\n\t"
16101#else
16102        "uxtb	r2, r11\n\t"
16103#endif
16104#else
16105        "ubfx	r2, r11, #0, #8\n\t"
16106#endif
16107        "ldr	r4, [r0, r4, lsl #2]\n\t"
16108        "ldr	r7, [r0, r7, lsl #2]\n\t"
16109        "ldr	lr, [r0, lr, lsl #2]\n\t"
16110        "ldr	r2, [r0, r2, lsl #2]\n\t"
16111#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16112#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16113        "lsl	r5, r10, #8\n\t"
16114        "lsr	r5, r5, #24\n\t"
16115#else
16116        "uxtb	r5, r10, ror #16\n\t"
16117#endif
16118#else
16119        "ubfx	r5, r10, #16, #8\n\t"
16120#endif
16121        "eor	r4, r4, r7, ror #24\n\t"
16122        "lsr	r7, r9, #24\n\t"
16123        "eor	r4, r4, lr, ror #8\n\t"
16124#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16125#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16126        "lsl	lr, r11, #16\n\t"
16127        "lsr	lr, lr, #24\n\t"
16128#else
16129        "uxtb	lr, r11, ror #8\n\t"
16130#endif
16131#else
16132        "ubfx	lr, r11, #8, #8\n\t"
16133#endif
16134        "eor	r4, r4, r2, ror #16\n\t"
16135#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16136#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16137        "lsl	r2, r8, #24\n\t"
16138        "lsr	r2, r2, #24\n\t"
16139#else
16140        "uxtb	r2, r8\n\t"
16141#endif
16142#else
16143        "ubfx	r2, r8, #0, #8\n\t"
16144#endif
16145        "ldr	r5, [r0, r5, lsl #2]\n\t"
16146        "ldr	r7, [r0, r7, lsl #2]\n\t"
16147        "ldr	lr, [r0, lr, lsl #2]\n\t"
16148        "ldr	r2, [r0, r2, lsl #2]\n\t"
16149#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16150#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16151        "lsl	r6, r11, #8\n\t"
16152        "lsr	r6, r6, #24\n\t"
16153#else
16154        "uxtb	r6, r11, ror #16\n\t"
16155#endif
16156#else
16157        "ubfx	r6, r11, #16, #8\n\t"
16158#endif
16159        "eor	r5, r5, r7, ror #24\n\t"
16160        "lsr	r7, r10, #24\n\t"
16161        "eor	r5, r5, lr, ror #8\n\t"
16162#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16164        "lsl	lr, r8, #16\n\t"
16165        "lsr	lr, lr, #24\n\t"
16166#else
16167        "uxtb	lr, r8, ror #8\n\t"
16168#endif
16169#else
16170        "ubfx	lr, r8, #8, #8\n\t"
16171#endif
16172        "eor	r5, r5, r2, ror #16\n\t"
16173#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16174#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16175        "lsl	r2, r9, #24\n\t"
16176        "lsr	r2, r2, #24\n\t"
16177#else
16178        "uxtb	r2, r9\n\t"
16179#endif
16180#else
16181        "ubfx	r2, r9, #0, #8\n\t"
16182#endif
16183        "ldr	r6, [r0, r6, lsl #2]\n\t"
16184        "ldr	r7, [r0, r7, lsl #2]\n\t"
16185        "ldr	lr, [r0, lr, lsl #2]\n\t"
16186        "ldr	r2, [r0, r2, lsl #2]\n\t"
16187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16188#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16189        "lsl	r10, r10, #24\n\t"
16190        "lsr	r10, r10, #24\n\t"
16191#else
16192        "uxtb	r10, r10\n\t"
16193#endif
16194#else
16195        "ubfx	r10, r10, #0, #8\n\t"
16196#endif
16197        "eor	r6, r6, r7, ror #24\n\t"
16198#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16200        "lsl	r7, r8, #8\n\t"
16201        "lsr	r7, r7, #24\n\t"
16202#else
16203        "uxtb	r7, r8, ror #16\n\t"
16204#endif
16205#else
16206        "ubfx	r7, r8, #16, #8\n\t"
16207#endif
16208        "eor	r6, r6, lr, ror #8\n\t"
16209        "lsr	lr, r11, #24\n\t"
16210        "eor	r6, r6, r2, ror #16\n\t"
16211#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16213        "lsl	r2, r9, #16\n\t"
16214        "lsr	r2, r2, #24\n\t"
16215#else
16216        "uxtb	r2, r9, ror #8\n\t"
16217#endif
16218#else
16219        "ubfx	r2, r9, #8, #8\n\t"
16220#endif
16221        "ldr	r10, [r0, r10, lsl #2]\n\t"
16222        "ldr	lr, [r0, lr, lsl #2]\n\t"
16223        "ldr	r7, [r0, r7, lsl #2]\n\t"
16224        "ldr	r2, [r0, r2, lsl #2]\n\t"
16225        "eor	lr, lr, r10, ror #24\n\t"
16226        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
16227        "eor	r7, r7, lr, ror #24\n\t"
16228        "eor	r7, r7, r2, ror #8\n\t"
16229        /*   XOR in Key Schedule */
16230        "eor	r4, r4, r8\n\t"
16231        "eor	r5, r5, r9\n\t"
16232        "eor	r6, r6, r10\n\t"
16233        "eor	r7, r7, r11\n\t"
16234        "subs	r1, r1, #1\n\t"
16235        "bne	L_AES_CTR_encrypt_block_nr_128_%=\n\t"
16236#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16237#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16238        "lsl	r8, r5, #8\n\t"
16239        "lsr	r8, r8, #24\n\t"
16240#else
16241        "uxtb	r8, r5, ror #16\n\t"
16242#endif
16243#else
16244        "ubfx	r8, r5, #16, #8\n\t"
16245#endif
16246        "lsr	r11, r4, #24\n\t"
16247#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16248#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16249        "lsl	lr, r6, #16\n\t"
16250        "lsr	lr, lr, #24\n\t"
16251#else
16252        "uxtb	lr, r6, ror #8\n\t"
16253#endif
16254#else
16255        "ubfx	lr, r6, #8, #8\n\t"
16256#endif
16257#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16258#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16259        "lsl	r2, r7, #24\n\t"
16260        "lsr	r2, r2, #24\n\t"
16261#else
16262        "uxtb	r2, r7\n\t"
16263#endif
16264#else
16265        "ubfx	r2, r7, #0, #8\n\t"
16266#endif
16267        "ldr	r8, [r0, r8, lsl #2]\n\t"
16268        "ldr	r11, [r0, r11, lsl #2]\n\t"
16269        "ldr	lr, [r0, lr, lsl #2]\n\t"
16270        "ldr	r2, [r0, r2, lsl #2]\n\t"
16271#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16272#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16273        "lsl	r9, r6, #8\n\t"
16274        "lsr	r9, r9, #24\n\t"
16275#else
16276        "uxtb	r9, r6, ror #16\n\t"
16277#endif
16278#else
16279        "ubfx	r9, r6, #16, #8\n\t"
16280#endif
16281        "eor	r8, r8, r11, ror #24\n\t"
16282        "lsr	r11, r5, #24\n\t"
16283        "eor	r8, r8, lr, ror #8\n\t"
16284#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16285#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16286        "lsl	lr, r7, #16\n\t"
16287        "lsr	lr, lr, #24\n\t"
16288#else
16289        "uxtb	lr, r7, ror #8\n\t"
16290#endif
16291#else
16292        "ubfx	lr, r7, #8, #8\n\t"
16293#endif
16294        "eor	r8, r8, r2, ror #16\n\t"
16295#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16296#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16297        "lsl	r2, r4, #24\n\t"
16298        "lsr	r2, r2, #24\n\t"
16299#else
16300        "uxtb	r2, r4\n\t"
16301#endif
16302#else
16303        "ubfx	r2, r4, #0, #8\n\t"
16304#endif
16305        "ldr	r9, [r0, r9, lsl #2]\n\t"
16306        "ldr	r11, [r0, r11, lsl #2]\n\t"
16307        "ldr	lr, [r0, lr, lsl #2]\n\t"
16308        "ldr	r2, [r0, r2, lsl #2]\n\t"
16309#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16310#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16311        "lsl	r10, r7, #8\n\t"
16312        "lsr	r10, r10, #24\n\t"
16313#else
16314        "uxtb	r10, r7, ror #16\n\t"
16315#endif
16316#else
16317        "ubfx	r10, r7, #16, #8\n\t"
16318#endif
16319        "eor	r9, r9, r11, ror #24\n\t"
16320        "lsr	r11, r6, #24\n\t"
16321        "eor	r9, r9, lr, ror #8\n\t"
16322#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16323#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16324        "lsl	lr, r4, #16\n\t"
16325        "lsr	lr, lr, #24\n\t"
16326#else
16327        "uxtb	lr, r4, ror #8\n\t"
16328#endif
16329#else
16330        "ubfx	lr, r4, #8, #8\n\t"
16331#endif
16332        "eor	r9, r9, r2, ror #16\n\t"
16333#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16334#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16335        "lsl	r2, r5, #24\n\t"
16336        "lsr	r2, r2, #24\n\t"
16337#else
16338        "uxtb	r2, r5\n\t"
16339#endif
16340#else
16341        "ubfx	r2, r5, #0, #8\n\t"
16342#endif
16343        "ldr	r10, [r0, r10, lsl #2]\n\t"
16344        "ldr	r11, [r0, r11, lsl #2]\n\t"
16345        "ldr	lr, [r0, lr, lsl #2]\n\t"
16346        "ldr	r2, [r0, r2, lsl #2]\n\t"
16347#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16348#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16349        "lsl	r6, r6, #24\n\t"
16350        "lsr	r6, r6, #24\n\t"
16351#else
16352        "uxtb	r6, r6\n\t"
16353#endif
16354#else
16355        "ubfx	r6, r6, #0, #8\n\t"
16356#endif
16357        "eor	r10, r10, r11, ror #24\n\t"
16358#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16359#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16360        "lsl	r11, r4, #8\n\t"
16361        "lsr	r11, r11, #24\n\t"
16362#else
16363        "uxtb	r11, r4, ror #16\n\t"
16364#endif
16365#else
16366        "ubfx	r11, r4, #16, #8\n\t"
16367#endif
16368        "eor	r10, r10, lr, ror #8\n\t"
16369        "lsr	lr, r7, #24\n\t"
16370        "eor	r10, r10, r2, ror #16\n\t"
16371#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16372#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16373        "lsl	r2, r5, #16\n\t"
16374        "lsr	r2, r2, #24\n\t"
16375#else
16376        "uxtb	r2, r5, ror #8\n\t"
16377#endif
16378#else
16379        "ubfx	r2, r5, #8, #8\n\t"
16380#endif
16381        "ldr	r6, [r0, r6, lsl #2]\n\t"
16382        "ldr	lr, [r0, lr, lsl #2]\n\t"
16383        "ldr	r11, [r0, r11, lsl #2]\n\t"
16384        "ldr	r2, [r0, r2, lsl #2]\n\t"
16385        "eor	lr, lr, r6, ror #24\n\t"
16386        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
16387        "eor	r11, r11, lr, ror #24\n\t"
16388        "eor	r11, r11, r2, ror #8\n\t"
16389        /*   XOR in Key Schedule */
16390        "eor	r8, r8, r4\n\t"
16391        "eor	r9, r9, r5\n\t"
16392        "eor	r10, r10, r6\n\t"
16393        "eor	r11, r11, r7\n\t"
16394#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16395#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16396        "lsl	r4, r11, #24\n\t"
16397        "lsr	r4, r4, #24\n\t"
16398#else
16399        "uxtb	r4, r11\n\t"
16400#endif
16401#else
16402        "ubfx	r4, r11, #0, #8\n\t"
16403#endif
16404#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16405#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16406        "lsl	r7, r10, #16\n\t"
16407        "lsr	r7, r7, #24\n\t"
16408#else
16409        "uxtb	r7, r10, ror #8\n\t"
16410#endif
16411#else
16412        "ubfx	r7, r10, #8, #8\n\t"
16413#endif
16414#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16415#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16416        "lsl	lr, r9, #8\n\t"
16417        "lsr	lr, lr, #24\n\t"
16418#else
16419        "uxtb	lr, r9, ror #16\n\t"
16420#endif
16421#else
16422        "ubfx	lr, r9, #16, #8\n\t"
16423#endif
16424        "lsr	r2, r8, #24\n\t"
16425        "ldrb	r4, [r0, r4, lsl #2]\n\t"
16426        "ldrb	r7, [r0, r7, lsl #2]\n\t"
16427        "ldrb	lr, [r0, lr, lsl #2]\n\t"
16428        "ldrb	r2, [r0, r2, lsl #2]\n\t"
16429#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16430#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16431        "lsl	r5, r8, #24\n\t"
16432        "lsr	r5, r5, #24\n\t"
16433#else
16434        "uxtb	r5, r8\n\t"
16435#endif
16436#else
16437        "ubfx	r5, r8, #0, #8\n\t"
16438#endif
16439        "eor	r4, r4, r7, lsl #8\n\t"
16440#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16441#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16442        "lsl	r7, r11, #16\n\t"
16443        "lsr	r7, r7, #24\n\t"
16444#else
16445        "uxtb	r7, r11, ror #8\n\t"
16446#endif
16447#else
16448        "ubfx	r7, r11, #8, #8\n\t"
16449#endif
16450        "eor	r4, r4, lr, lsl #16\n\t"
16451#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16452#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16453        "lsl	lr, r10, #8\n\t"
16454        "lsr	lr, lr, #24\n\t"
16455#else
16456        "uxtb	lr, r10, ror #16\n\t"
16457#endif
16458#else
16459        "ubfx	lr, r10, #16, #8\n\t"
16460#endif
16461        "eor	r4, r4, r2, lsl #24\n\t"
16462        "lsr	r2, r9, #24\n\t"
16463        "ldrb	r5, [r0, r5, lsl #2]\n\t"
16464        "ldrb	r7, [r0, r7, lsl #2]\n\t"
16465        "ldrb	lr, [r0, lr, lsl #2]\n\t"
16466        "ldrb	r2, [r0, r2, lsl #2]\n\t"
16467#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16468#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16469        "lsl	r6, r9, #24\n\t"
16470        "lsr	r6, r6, #24\n\t"
16471#else
16472        "uxtb	r6, r9\n\t"
16473#endif
16474#else
16475        "ubfx	r6, r9, #0, #8\n\t"
16476#endif
16477        "eor	r5, r5, r7, lsl #8\n\t"
16478#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16479#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16480        "lsl	r7, r8, #16\n\t"
16481        "lsr	r7, r7, #24\n\t"
16482#else
16483        "uxtb	r7, r8, ror #8\n\t"
16484#endif
16485#else
16486        "ubfx	r7, r8, #8, #8\n\t"
16487#endif
16488        "eor	r5, r5, lr, lsl #16\n\t"
16489#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16490#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16491        "lsl	lr, r11, #8\n\t"
16492        "lsr	lr, lr, #24\n\t"
16493#else
16494        "uxtb	lr, r11, ror #16\n\t"
16495#endif
16496#else
16497        "ubfx	lr, r11, #16, #8\n\t"
16498#endif
16499        "eor	r5, r5, r2, lsl #24\n\t"
16500        "lsr	r2, r10, #24\n\t"
16501        "ldrb	r6, [r0, r6, lsl #2]\n\t"
16502        "ldrb	r7, [r0, r7, lsl #2]\n\t"
16503        "ldrb	lr, [r0, lr, lsl #2]\n\t"
16504        "ldrb	r2, [r0, r2, lsl #2]\n\t"
16505        "lsr	r11, r11, #24\n\t"
16506        "eor	r6, r6, r7, lsl #8\n\t"
16507#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16508#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16509        "lsl	r7, r10, #24\n\t"
16510        "lsr	r7, r7, #24\n\t"
16511#else
16512        "uxtb	r7, r10\n\t"
16513#endif
16514#else
16515        "ubfx	r7, r10, #0, #8\n\t"
16516#endif
16517        "eor	r6, r6, lr, lsl #16\n\t"
16518#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16519#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16520        "lsl	lr, r9, #16\n\t"
16521        "lsr	lr, lr, #24\n\t"
16522#else
16523        "uxtb	lr, r9, ror #8\n\t"
16524#endif
16525#else
16526        "ubfx	lr, r9, #8, #8\n\t"
16527#endif
16528        "eor	r6, r6, r2, lsl #24\n\t"
16529#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16530#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16531        "lsl	r2, r8, #8\n\t"
16532        "lsr	r2, r2, #24\n\t"
16533#else
16534        "uxtb	r2, r8, ror #16\n\t"
16535#endif
16536#else
16537        "ubfx	r2, r8, #16, #8\n\t"
16538#endif
16539        "ldrb	r11, [r0, r11, lsl #2]\n\t"
16540        "ldrb	r7, [r0, r7, lsl #2]\n\t"
16541        "ldrb	lr, [r0, lr, lsl #2]\n\t"
16542        "ldrb	r2, [r0, r2, lsl #2]\n\t"
16543        "eor	lr, lr, r11, lsl #16\n\t"
16544        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
16545        "eor	r7, r7, lr, lsl #8\n\t"
16546        "eor	r7, r7, r2, lsl #16\n\t"
16547        /*   XOR in Key Schedule */
16548        "eor	r4, r4, r8\n\t"
16549        "eor	r5, r5, r9\n\t"
16550        "eor	r6, r6, r10\n\t"
16551        "eor	r7, r7, r11\n\t"
16552#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
16553        "pop	{r1, %[len], lr}\n\t"
16554        "ldr	%[ks], [sp]\n\t"
16555#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16556        "eor	r8, r4, r4, ror #16\n\t"
16557        "eor	r9, r5, r5, ror #16\n\t"
16558        "eor	r10, r6, r6, ror #16\n\t"
16559        "eor	r11, r7, r7, ror #16\n\t"
16560        "bic	r8, r8, #0xff0000\n\t"
16561        "bic	r9, r9, #0xff0000\n\t"
16562        "bic	r10, r10, #0xff0000\n\t"
16563        "bic	r11, r11, #0xff0000\n\t"
16564        "ror	r4, r4, #8\n\t"
16565        "ror	r5, r5, #8\n\t"
16566        "ror	r6, r6, #8\n\t"
16567        "ror	r7, r7, #8\n\t"
16568        "eor	r4, r4, r8, lsr #8\n\t"
16569        "eor	r5, r5, r9, lsr #8\n\t"
16570        "eor	r6, r6, r10, lsr #8\n\t"
16571        "eor	r7, r7, r11, lsr #8\n\t"
16572#else
16573        "rev	r4, r4\n\t"
16574        "rev	r5, r5\n\t"
16575        "rev	r6, r6\n\t"
16576        "rev	r7, r7\n\t"
16577#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
16578        "ldr	r8, [lr]\n\t"
16579        "ldr	r9, [lr, #4]\n\t"
16580        "ldr	r10, [lr, #8]\n\t"
16581        "ldr	r11, [lr, #12]\n\t"
16582        "eor	r4, r4, r8\n\t"
16583        "eor	r5, r5, r9\n\t"
16584        "eor	r6, r6, r10\n\t"
16585        "eor	r7, r7, r11\n\t"
16586        "ldr	r8, [sp, #4]\n\t"
16587        "str	r4, [%[out]]\n\t"
16588        "str	r5, [%[out], #4]\n\t"
16589        "str	r6, [%[out], #8]\n\t"
16590        "str	r7, [%[out], #12]\n\t"
16591        "ldm	r8, {r4, r5, r6, r7}\n\t"
16592        "subs	%[len], %[len], #16\n\t"
16593        "add	lr, lr, #16\n\t"
16594        "add	%[out], %[out], #16\n\t"
16595        "bne	L_AES_CTR_encrypt_loop_block_128_%=\n\t"
16596        "\n"
16597    "L_AES_CTR_encrypt_end_%=:\n\t"
16598        "pop	{%[ks], r8}\n\t"
16599#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16600        "eor	r10, r4, r4, ror #16\n\t"
16601        "eor	r11, r5, r5, ror #16\n\t"
16602        "bic	r10, r10, #0xff0000\n\t"
16603        "bic	r11, r11, #0xff0000\n\t"
16604        "ror	r4, r4, #8\n\t"
16605        "ror	r5, r5, #8\n\t"
16606        "eor	r4, r4, r10, lsr #8\n\t"
16607        "eor	r5, r5, r11, lsr #8\n\t"
16608        "eor	r10, r6, r6, ror #16\n\t"
16609        "eor	r11, r7, r7, ror #16\n\t"
16610        "bic	r10, r10, #0xff0000\n\t"
16611        "bic	r11, r11, #0xff0000\n\t"
16612        "ror	r6, r6, #8\n\t"
16613        "ror	r7, r7, #8\n\t"
16614        "eor	r6, r6, r10, lsr #8\n\t"
16615        "eor	r7, r7, r11, lsr #8\n\t"
16616#else
16617        "rev	r4, r4\n\t"
16618        "rev	r5, r5\n\t"
16619        "rev	r6, r6\n\t"
16620        "rev	r7, r7\n\t"
16621#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
16622        "stm	r8, {r4, r5, r6, r7}\n\t"
16623        "pop	{%[nr], %[ctr]}\n\t"
16624        "pop	{%[L_AES_ARM32_te_ctr]}\n\t"
16625#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
16626        : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
16627          [nr] "+r" (nr), [ctr] "+r" (ctr),
16628          [L_AES_ARM32_te_ctr] "+r" (L_AES_ARM32_te_ctr_c)
16629        :
16630#else
16631        :
16632        : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
16633          [nr] "r" (nr), [ctr] "r" (ctr),
16634          [L_AES_ARM32_te_ctr] "r" (L_AES_ARM32_te_ctr_c)
16635#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
16636        : "memory", "cc", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
16637    );
16638}
16639
16640#endif /* WOLFSSL_AES_COUNTER */
16641#ifdef HAVE_AES_DECRYPT
16642#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
16643    defined(HAVE_AES_CBC) || defined(HAVE_AES_ECB)
16644#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
16645void AES_decrypt_block(const word32* td_p, int nr_p, const byte* td4_p);
16646#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
16647WC_OMIT_FRAME_POINTER void AES_decrypt_block(const word32* td_p, int nr_p,
16648    const byte* td4_p)
16649#else
16650WC_OMIT_FRAME_POINTER void AES_decrypt_block(const word32* td, int nr,
16651    const byte* td4)
16652#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
16653{
16654#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
16655    register const word32* td __asm__ ("r0") = (const word32*)td_p;
16656    register int nr __asm__ ("r1") = (int)nr_p;
16657    register const byte* td4 __asm__ ("r2") = (const byte*)td4_p;
16658#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
16659
16660    __asm__ __volatile__ (
16661        "\n"
16662    "L_AES_decrypt_block_nr_%=:\n\t"
16663#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16664#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16665        "lsl	r8, r7, #8\n\t"
16666        "lsr	r8, r8, #24\n\t"
16667#else
16668        "uxtb	r8, r7, ror #16\n\t"
16669#endif
16670#else
16671        "ubfx	r8, r7, #16, #8\n\t"
16672#endif
16673        "lsr	r11, r4, #24\n\t"
16674#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16675#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16676        "lsl	r12, r6, #16\n\t"
16677        "lsr	r12, r12, #24\n\t"
16678#else
16679        "uxtb	r12, r6, ror #8\n\t"
16680#endif
16681#else
16682        "ubfx	r12, r6, #8, #8\n\t"
16683#endif
16684#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16685#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16686        "lsl	lr, r5, #24\n\t"
16687        "lsr	lr, lr, #24\n\t"
16688#else
16689        "uxtb	lr, r5\n\t"
16690#endif
16691#else
16692        "ubfx	lr, r5, #0, #8\n\t"
16693#endif
16694        "ldr	r8, [%[td], r8, lsl #2]\n\t"
16695        "ldr	r11, [%[td], r11, lsl #2]\n\t"
16696        "ldr	r12, [%[td], r12, lsl #2]\n\t"
16697        "ldr	lr, [%[td], lr, lsl #2]\n\t"
16698#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16699#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16700        "lsl	r9, r4, #8\n\t"
16701        "lsr	r9, r9, #24\n\t"
16702#else
16703        "uxtb	r9, r4, ror #16\n\t"
16704#endif
16705#else
16706        "ubfx	r9, r4, #16, #8\n\t"
16707#endif
16708        "eor	r8, r8, r11, ror #24\n\t"
16709        "lsr	r11, r5, #24\n\t"
16710        "eor	r8, r8, r12, ror #8\n\t"
16711#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16713        "lsl	r12, r7, #16\n\t"
16714        "lsr	r12, r12, #24\n\t"
16715#else
16716        "uxtb	r12, r7, ror #8\n\t"
16717#endif
16718#else
16719        "ubfx	r12, r7, #8, #8\n\t"
16720#endif
16721        "eor	r8, r8, lr, ror #16\n\t"
16722#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16723#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16724        "lsl	lr, r6, #24\n\t"
16725        "lsr	lr, lr, #24\n\t"
16726#else
16727        "uxtb	lr, r6\n\t"
16728#endif
16729#else
16730        "ubfx	lr, r6, #0, #8\n\t"
16731#endif
16732        "ldr	r9, [%[td], r9, lsl #2]\n\t"
16733        "ldr	r11, [%[td], r11, lsl #2]\n\t"
16734        "ldr	r12, [%[td], r12, lsl #2]\n\t"
16735        "ldr	lr, [%[td], lr, lsl #2]\n\t"
16736#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16737#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16738        "lsl	r10, r5, #8\n\t"
16739        "lsr	r10, r10, #24\n\t"
16740#else
16741        "uxtb	r10, r5, ror #16\n\t"
16742#endif
16743#else
16744        "ubfx	r10, r5, #16, #8\n\t"
16745#endif
16746        "eor	r9, r9, r11, ror #24\n\t"
16747        "lsr	r11, r6, #24\n\t"
16748        "eor	r9, r9, r12, ror #8\n\t"
16749#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16750#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16751        "lsl	r12, r4, #16\n\t"
16752        "lsr	r12, r12, #24\n\t"
16753#else
16754        "uxtb	r12, r4, ror #8\n\t"
16755#endif
16756#else
16757        "ubfx	r12, r4, #8, #8\n\t"
16758#endif
16759        "eor	r9, r9, lr, ror #16\n\t"
16760#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16761#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16762        "lsl	lr, r7, #24\n\t"
16763        "lsr	lr, lr, #24\n\t"
16764#else
16765        "uxtb	lr, r7\n\t"
16766#endif
16767#else
16768        "ubfx	lr, r7, #0, #8\n\t"
16769#endif
16770        "ldr	r10, [%[td], r10, lsl #2]\n\t"
16771        "ldr	r11, [%[td], r11, lsl #2]\n\t"
16772        "ldr	r12, [%[td], r12, lsl #2]\n\t"
16773        "ldr	lr, [%[td], lr, lsl #2]\n\t"
16774#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16775#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16776        "lsl	r4, r4, #24\n\t"
16777        "lsr	r4, r4, #24\n\t"
16778#else
16779        "uxtb	r4, r4\n\t"
16780#endif
16781#else
16782        "ubfx	r4, r4, #0, #8\n\t"
16783#endif
16784        "eor	r10, r10, r11, ror #24\n\t"
16785#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16786#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16787        "lsl	r11, r6, #8\n\t"
16788        "lsr	r11, r11, #24\n\t"
16789#else
16790        "uxtb	r11, r6, ror #16\n\t"
16791#endif
16792#else
16793        "ubfx	r11, r6, #16, #8\n\t"
16794#endif
16795        "eor	r10, r10, r12, ror #8\n\t"
16796        "lsr	r12, r7, #24\n\t"
16797        "eor	r10, r10, lr, ror #16\n\t"
16798#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16799#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16800        "lsl	lr, r5, #16\n\t"
16801        "lsr	lr, lr, #24\n\t"
16802#else
16803        "uxtb	lr, r5, ror #8\n\t"
16804#endif
16805#else
16806        "ubfx	lr, r5, #8, #8\n\t"
16807#endif
16808        "ldr	r4, [%[td], r4, lsl #2]\n\t"
16809        "ldr	r12, [%[td], r12, lsl #2]\n\t"
16810        "ldr	r11, [%[td], r11, lsl #2]\n\t"
16811        "ldr	lr, [%[td], lr, lsl #2]\n\t"
16812        "eor	r12, r12, r4, ror #24\n\t"
16813        "ldm	r3!, {r4, r5, r6, r7}\n\t"
16814        "eor	r11, r11, lr, ror #8\n\t"
16815        "eor	r11, r11, r12, ror #24\n\t"
16816        /*   XOR in Key Schedule */
16817        "eor	r8, r8, r4\n\t"
16818        "eor	r9, r9, r5\n\t"
16819        "eor	r10, r10, r6\n\t"
16820        "eor	r11, r11, r7\n\t"
16821#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16822#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16823        "lsl	r4, r11, #8\n\t"
16824        "lsr	r4, r4, #24\n\t"
16825#else
16826        "uxtb	r4, r11, ror #16\n\t"
16827#endif
16828#else
16829        "ubfx	r4, r11, #16, #8\n\t"
16830#endif
16831        "lsr	r7, r8, #24\n\t"
16832#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16833#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16834        "lsl	r12, r10, #16\n\t"
16835        "lsr	r12, r12, #24\n\t"
16836#else
16837        "uxtb	r12, r10, ror #8\n\t"
16838#endif
16839#else
16840        "ubfx	r12, r10, #8, #8\n\t"
16841#endif
16842#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16843#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16844        "lsl	lr, r9, #24\n\t"
16845        "lsr	lr, lr, #24\n\t"
16846#else
16847        "uxtb	lr, r9\n\t"
16848#endif
16849#else
16850        "ubfx	lr, r9, #0, #8\n\t"
16851#endif
16852        "ldr	r4, [%[td], r4, lsl #2]\n\t"
16853        "ldr	r7, [%[td], r7, lsl #2]\n\t"
16854        "ldr	r12, [%[td], r12, lsl #2]\n\t"
16855        "ldr	lr, [%[td], lr, lsl #2]\n\t"
16856#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16857#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16858        "lsl	r5, r8, #8\n\t"
16859        "lsr	r5, r5, #24\n\t"
16860#else
16861        "uxtb	r5, r8, ror #16\n\t"
16862#endif
16863#else
16864        "ubfx	r5, r8, #16, #8\n\t"
16865#endif
16866        "eor	r4, r4, r7, ror #24\n\t"
16867        "lsr	r7, r9, #24\n\t"
16868        "eor	r4, r4, r12, ror #8\n\t"
16869#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16871        "lsl	r12, r11, #16\n\t"
16872        "lsr	r12, r12, #24\n\t"
16873#else
16874        "uxtb	r12, r11, ror #8\n\t"
16875#endif
16876#else
16877        "ubfx	r12, r11, #8, #8\n\t"
16878#endif
16879        "eor	r4, r4, lr, ror #16\n\t"
16880#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16881#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16882        "lsl	lr, r10, #24\n\t"
16883        "lsr	lr, lr, #24\n\t"
16884#else
16885        "uxtb	lr, r10\n\t"
16886#endif
16887#else
16888        "ubfx	lr, r10, #0, #8\n\t"
16889#endif
16890        "ldr	r5, [%[td], r5, lsl #2]\n\t"
16891        "ldr	r7, [%[td], r7, lsl #2]\n\t"
16892        "ldr	r12, [%[td], r12, lsl #2]\n\t"
16893        "ldr	lr, [%[td], lr, lsl #2]\n\t"
16894#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16895#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16896        "lsl	r6, r9, #8\n\t"
16897        "lsr	r6, r6, #24\n\t"
16898#else
16899        "uxtb	r6, r9, ror #16\n\t"
16900#endif
16901#else
16902        "ubfx	r6, r9, #16, #8\n\t"
16903#endif
16904        "eor	r5, r5, r7, ror #24\n\t"
16905        "lsr	r7, r10, #24\n\t"
16906        "eor	r5, r5, r12, ror #8\n\t"
16907#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16908#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16909        "lsl	r12, r8, #16\n\t"
16910        "lsr	r12, r12, #24\n\t"
16911#else
16912        "uxtb	r12, r8, ror #8\n\t"
16913#endif
16914#else
16915        "ubfx	r12, r8, #8, #8\n\t"
16916#endif
16917        "eor	r5, r5, lr, ror #16\n\t"
16918#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16919#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16920        "lsl	lr, r11, #24\n\t"
16921        "lsr	lr, lr, #24\n\t"
16922#else
16923        "uxtb	lr, r11\n\t"
16924#endif
16925#else
16926        "ubfx	lr, r11, #0, #8\n\t"
16927#endif
16928        "ldr	r6, [%[td], r6, lsl #2]\n\t"
16929        "ldr	r7, [%[td], r7, lsl #2]\n\t"
16930        "ldr	r12, [%[td], r12, lsl #2]\n\t"
16931        "ldr	lr, [%[td], lr, lsl #2]\n\t"
16932#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16933#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16934        "lsl	r8, r8, #24\n\t"
16935        "lsr	r8, r8, #24\n\t"
16936#else
16937        "uxtb	r8, r8\n\t"
16938#endif
16939#else
16940        "ubfx	r8, r8, #0, #8\n\t"
16941#endif
16942        "eor	r6, r6, r7, ror #24\n\t"
16943#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16944#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16945        "lsl	r7, r10, #8\n\t"
16946        "lsr	r7, r7, #24\n\t"
16947#else
16948        "uxtb	r7, r10, ror #16\n\t"
16949#endif
16950#else
16951        "ubfx	r7, r10, #16, #8\n\t"
16952#endif
16953        "eor	r6, r6, r12, ror #8\n\t"
16954        "lsr	r12, r11, #24\n\t"
16955        "eor	r6, r6, lr, ror #16\n\t"
16956#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16957#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16958        "lsl	lr, r9, #16\n\t"
16959        "lsr	lr, lr, #24\n\t"
16960#else
16961        "uxtb	lr, r9, ror #8\n\t"
16962#endif
16963#else
16964        "ubfx	lr, r9, #8, #8\n\t"
16965#endif
16966        "ldr	r8, [%[td], r8, lsl #2]\n\t"
16967        "ldr	r12, [%[td], r12, lsl #2]\n\t"
16968        "ldr	r7, [%[td], r7, lsl #2]\n\t"
16969        "ldr	lr, [%[td], lr, lsl #2]\n\t"
16970        "eor	r12, r12, r8, ror #24\n\t"
16971        "ldm	r3!, {r8, r9, r10, r11}\n\t"
16972        "eor	r7, r7, lr, ror #8\n\t"
16973        "eor	r7, r7, r12, ror #24\n\t"
16974        /*   XOR in Key Schedule */
16975        "eor	r4, r4, r8\n\t"
16976        "eor	r5, r5, r9\n\t"
16977        "eor	r6, r6, r10\n\t"
16978        "eor	r7, r7, r11\n\t"
16979        "subs	%[nr], %[nr], #1\n\t"
16980        "bne	L_AES_decrypt_block_nr_%=\n\t"
16981#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16982#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16983        "lsl	r8, r7, #8\n\t"
16984        "lsr	r8, r8, #24\n\t"
16985#else
16986        "uxtb	r8, r7, ror #16\n\t"
16987#endif
16988#else
16989        "ubfx	r8, r7, #16, #8\n\t"
16990#endif
16991        "lsr	r11, r4, #24\n\t"
16992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16993#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16994        "lsl	r12, r6, #16\n\t"
16995        "lsr	r12, r12, #24\n\t"
16996#else
16997        "uxtb	r12, r6, ror #8\n\t"
16998#endif
16999#else
17000        "ubfx	r12, r6, #8, #8\n\t"
17001#endif
17002#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17003#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17004        "lsl	lr, r5, #24\n\t"
17005        "lsr	lr, lr, #24\n\t"
17006#else
17007        "uxtb	lr, r5\n\t"
17008#endif
17009#else
17010        "ubfx	lr, r5, #0, #8\n\t"
17011#endif
17012        "ldr	r8, [%[td], r8, lsl #2]\n\t"
17013        "ldr	r11, [%[td], r11, lsl #2]\n\t"
17014        "ldr	r12, [%[td], r12, lsl #2]\n\t"
17015        "ldr	lr, [%[td], lr, lsl #2]\n\t"
17016#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17017#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17018        "lsl	r9, r4, #8\n\t"
17019        "lsr	r9, r9, #24\n\t"
17020#else
17021        "uxtb	r9, r4, ror #16\n\t"
17022#endif
17023#else
17024        "ubfx	r9, r4, #16, #8\n\t"
17025#endif
17026        "eor	r8, r8, r11, ror #24\n\t"
17027        "lsr	r11, r5, #24\n\t"
17028        "eor	r8, r8, r12, ror #8\n\t"
17029#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17031        "lsl	r12, r7, #16\n\t"
17032        "lsr	r12, r12, #24\n\t"
17033#else
17034        "uxtb	r12, r7, ror #8\n\t"
17035#endif
17036#else
17037        "ubfx	r12, r7, #8, #8\n\t"
17038#endif
17039        "eor	r8, r8, lr, ror #16\n\t"
17040#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17041#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17042        "lsl	lr, r6, #24\n\t"
17043        "lsr	lr, lr, #24\n\t"
17044#else
17045        "uxtb	lr, r6\n\t"
17046#endif
17047#else
17048        "ubfx	lr, r6, #0, #8\n\t"
17049#endif
17050        "ldr	r9, [%[td], r9, lsl #2]\n\t"
17051        "ldr	r11, [%[td], r11, lsl #2]\n\t"
17052        "ldr	r12, [%[td], r12, lsl #2]\n\t"
17053        "ldr	lr, [%[td], lr, lsl #2]\n\t"
17054#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17055#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17056        "lsl	r10, r5, #8\n\t"
17057        "lsr	r10, r10, #24\n\t"
17058#else
17059        "uxtb	r10, r5, ror #16\n\t"
17060#endif
17061#else
17062        "ubfx	r10, r5, #16, #8\n\t"
17063#endif
17064        "eor	r9, r9, r11, ror #24\n\t"
17065        "lsr	r11, r6, #24\n\t"
17066        "eor	r9, r9, r12, ror #8\n\t"
17067#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17068#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17069        "lsl	r12, r4, #16\n\t"
17070        "lsr	r12, r12, #24\n\t"
17071#else
17072        "uxtb	r12, r4, ror #8\n\t"
17073#endif
17074#else
17075        "ubfx	r12, r4, #8, #8\n\t"
17076#endif
17077        "eor	r9, r9, lr, ror #16\n\t"
17078#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17079#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17080        "lsl	lr, r7, #24\n\t"
17081        "lsr	lr, lr, #24\n\t"
17082#else
17083        "uxtb	lr, r7\n\t"
17084#endif
17085#else
17086        "ubfx	lr, r7, #0, #8\n\t"
17087#endif
17088        "ldr	r10, [%[td], r10, lsl #2]\n\t"
17089        "ldr	r11, [%[td], r11, lsl #2]\n\t"
17090        "ldr	r12, [%[td], r12, lsl #2]\n\t"
17091        "ldr	lr, [%[td], lr, lsl #2]\n\t"
17092#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17093#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17094        "lsl	r4, r4, #24\n\t"
17095        "lsr	r4, r4, #24\n\t"
17096#else
17097        "uxtb	r4, r4\n\t"
17098#endif
17099#else
17100        "ubfx	r4, r4, #0, #8\n\t"
17101#endif
17102        "eor	r10, r10, r11, ror #24\n\t"
17103#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17104#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17105        "lsl	r11, r6, #8\n\t"
17106        "lsr	r11, r11, #24\n\t"
17107#else
17108        "uxtb	r11, r6, ror #16\n\t"
17109#endif
17110#else
17111        "ubfx	r11, r6, #16, #8\n\t"
17112#endif
17113        "eor	r10, r10, r12, ror #8\n\t"
17114        "lsr	r12, r7, #24\n\t"
17115        "eor	r10, r10, lr, ror #16\n\t"
17116#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17117#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17118        "lsl	lr, r5, #16\n\t"
17119        "lsr	lr, lr, #24\n\t"
17120#else
17121        "uxtb	lr, r5, ror #8\n\t"
17122#endif
17123#else
17124        "ubfx	lr, r5, #8, #8\n\t"
17125#endif
17126        "ldr	r4, [%[td], r4, lsl #2]\n\t"
17127        "ldr	r12, [%[td], r12, lsl #2]\n\t"
17128        "ldr	r11, [%[td], r11, lsl #2]\n\t"
17129        "ldr	lr, [%[td], lr, lsl #2]\n\t"
17130        "eor	r12, r12, r4, ror #24\n\t"
17131        "ldm	r3!, {r4, r5, r6, r7}\n\t"
17132        "eor	r11, r11, lr, ror #8\n\t"
17133        "eor	r11, r11, r12, ror #24\n\t"
17134        /*   XOR in Key Schedule */
17135        "eor	r8, r8, r4\n\t"
17136        "eor	r9, r9, r5\n\t"
17137        "eor	r10, r10, r6\n\t"
17138        "eor	r11, r11, r7\n\t"
17139#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17140#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17141        "lsl	r4, r9, #24\n\t"
17142        "lsr	r4, r4, #24\n\t"
17143#else
17144        "uxtb	r4, r9\n\t"
17145#endif
17146#else
17147        "ubfx	r4, r9, #0, #8\n\t"
17148#endif
17149#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17150#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17151        "lsl	r7, r10, #16\n\t"
17152        "lsr	r7, r7, #24\n\t"
17153#else
17154        "uxtb	r7, r10, ror #8\n\t"
17155#endif
17156#else
17157        "ubfx	r7, r10, #8, #8\n\t"
17158#endif
17159#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17160#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17161        "lsl	r12, r11, #8\n\t"
17162        "lsr	r12, r12, #24\n\t"
17163#else
17164        "uxtb	r12, r11, ror #16\n\t"
17165#endif
17166#else
17167        "ubfx	r12, r11, #16, #8\n\t"
17168#endif
17169        "lsr	lr, r8, #24\n\t"
17170        "ldrb	r4, [%[td4], r4]\n\t"
17171        "ldrb	r7, [%[td4], r7]\n\t"
17172        "ldrb	r12, [%[td4], r12]\n\t"
17173        "ldrb	lr, [%[td4], lr]\n\t"
17174#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17175#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17176        "lsl	r5, r10, #24\n\t"
17177        "lsr	r5, r5, #24\n\t"
17178#else
17179        "uxtb	r5, r10\n\t"
17180#endif
17181#else
17182        "ubfx	r5, r10, #0, #8\n\t"
17183#endif
17184        "eor	r4, r4, r7, lsl #8\n\t"
17185#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17186#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17187        "lsl	r7, r11, #16\n\t"
17188        "lsr	r7, r7, #24\n\t"
17189#else
17190        "uxtb	r7, r11, ror #8\n\t"
17191#endif
17192#else
17193        "ubfx	r7, r11, #8, #8\n\t"
17194#endif
17195        "eor	r4, r4, r12, lsl #16\n\t"
17196#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17197#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17198        "lsl	r12, r8, #8\n\t"
17199        "lsr	r12, r12, #24\n\t"
17200#else
17201        "uxtb	r12, r8, ror #16\n\t"
17202#endif
17203#else
17204        "ubfx	r12, r8, #16, #8\n\t"
17205#endif
17206        "eor	r4, r4, lr, lsl #24\n\t"
17207        "lsr	lr, r9, #24\n\t"
17208        "ldrb	r7, [%[td4], r7]\n\t"
17209        "ldrb	lr, [%[td4], lr]\n\t"
17210        "ldrb	r5, [%[td4], r5]\n\t"
17211        "ldrb	r12, [%[td4], r12]\n\t"
17212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17213#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17214        "lsl	r6, r11, #24\n\t"
17215        "lsr	r6, r6, #24\n\t"
17216#else
17217        "uxtb	r6, r11\n\t"
17218#endif
17219#else
17220        "ubfx	r6, r11, #0, #8\n\t"
17221#endif
17222        "eor	r5, r5, r7, lsl #8\n\t"
17223#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17224#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17225        "lsl	r7, r8, #16\n\t"
17226        "lsr	r7, r7, #24\n\t"
17227#else
17228        "uxtb	r7, r8, ror #8\n\t"
17229#endif
17230#else
17231        "ubfx	r7, r8, #8, #8\n\t"
17232#endif
17233        "eor	r5, r5, r12, lsl #16\n\t"
17234#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17235#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17236        "lsl	r12, r9, #8\n\t"
17237        "lsr	r12, r12, #24\n\t"
17238#else
17239        "uxtb	r12, r9, ror #16\n\t"
17240#endif
17241#else
17242        "ubfx	r12, r9, #16, #8\n\t"
17243#endif
17244        "eor	r5, r5, lr, lsl #24\n\t"
17245        "lsr	lr, r10, #24\n\t"
17246        "ldrb	r7, [%[td4], r7]\n\t"
17247        "ldrb	lr, [%[td4], lr]\n\t"
17248        "ldrb	r6, [%[td4], r6]\n\t"
17249        "ldrb	r12, [%[td4], r12]\n\t"
17250        "lsr	r11, r11, #24\n\t"
17251        "eor	r6, r6, r7, lsl #8\n\t"
17252#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17253#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17254        "lsl	r7, r8, #24\n\t"
17255        "lsr	r7, r7, #24\n\t"
17256#else
17257        "uxtb	r7, r8\n\t"
17258#endif
17259#else
17260        "ubfx	r7, r8, #0, #8\n\t"
17261#endif
17262        "eor	r6, r6, r12, lsl #16\n\t"
17263#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17264#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17265        "lsl	r12, r9, #16\n\t"
17266        "lsr	r12, r12, #24\n\t"
17267#else
17268        "uxtb	r12, r9, ror #8\n\t"
17269#endif
17270#else
17271        "ubfx	r12, r9, #8, #8\n\t"
17272#endif
17273        "eor	r6, r6, lr, lsl #24\n\t"
17274#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17275#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17276        "lsl	lr, r10, #8\n\t"
17277        "lsr	lr, lr, #24\n\t"
17278#else
17279        "uxtb	lr, r10, ror #16\n\t"
17280#endif
17281#else
17282        "ubfx	lr, r10, #16, #8\n\t"
17283#endif
17284        "ldrb	r11, [%[td4], r11]\n\t"
17285        "ldrb	r12, [%[td4], r12]\n\t"
17286        "ldrb	r7, [%[td4], r7]\n\t"
17287        "ldrb	lr, [%[td4], lr]\n\t"
17288        "eor	r12, r12, r11, lsl #16\n\t"
17289        "ldm	r3, {r8, r9, r10, r11}\n\t"
17290        "eor	r7, r7, r12, lsl #8\n\t"
17291        "eor	r7, r7, lr, lsl #16\n\t"
17292        /*   XOR in Key Schedule */
17293        "eor	r4, r4, r8\n\t"
17294        "eor	r5, r5, r9\n\t"
17295        "eor	r6, r6, r10\n\t"
17296        "eor	r7, r7, r11\n\t"
17297#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
17298        : [td] "+r" (td), [nr] "+r" (nr), [td4] "+r" (td4)
17299        :
17300#else
17301        :
17302        : [td] "r" (td), [nr] "r" (nr), [td4] "r" (td4)
17303#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
17304        : "memory", "cc", "lr"
17305    );
17306}
17307
17308#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
17309static const word32* L_AES_ARM32_td_ecb = L_AES_ARM32_td_data;
17310#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
17311        defined(HAVE_AES_ECB)
17312XALIGNED(4) static const word8 L_AES_ARM32_ecb_td4[] = {
17313    0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38,
17314    0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
17315    0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
17316    0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
17317    0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d,
17318    0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
17319    0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2,
17320    0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
17321    0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
17322    0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
17323    0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda,
17324    0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
17325    0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a,
17326    0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
17327    0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
17328    0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
17329    0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea,
17330    0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
17331    0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85,
17332    0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
17333    0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
17334    0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
17335    0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20,
17336    0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
17337    0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31,
17338    0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
17339    0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
17340    0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
17341    0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0,
17342    0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
17343    0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26,
17344    0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d,
17345};
17346
17347void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
17348    unsigned long len_p, const unsigned char* ks_p, int nr_p);
17349#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
17350WC_OMIT_FRAME_POINTER void AES_ECB_decrypt(const unsigned char* in_p,
17351    unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
17352    int nr_p)
17353#else
17354WC_OMIT_FRAME_POINTER void AES_ECB_decrypt(const unsigned char* in,
17355    unsigned char* out, unsigned long len, const unsigned char* ks, int nr)
17356#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
17357{
17358#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
17359    register const unsigned char* in __asm__ ("r0") =
17360        (const unsigned char*)in_p;
17361    register unsigned char* out __asm__ ("r1") = (unsigned char*)out_p;
17362    register unsigned long len __asm__ ("r2") = (unsigned long)len_p;
17363    register const unsigned char* ks __asm__ ("r3") =
17364        (const unsigned char*)ks_p;
17365    register int nr __asm__ ("r12") = (int)nr_p;
17366    register word32* L_AES_ARM32_td_ecb_c __asm__ ("lr") =
17367        (word32*)L_AES_ARM32_td_ecb;
17368    register word8* L_AES_ARM32_ecb_td4_c __asm__ ("r4") =
17369        (word8*)&L_AES_ARM32_ecb_td4;
17370#else
17371    register word32* L_AES_ARM32_td_ecb_c = (word32*)L_AES_ARM32_td_ecb;
17372    register word8* L_AES_ARM32_ecb_td4_c = (word8*)&L_AES_ARM32_ecb_td4;
17373#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
17374
17375    __asm__ __volatile__ (
17376        "push	{%[L_AES_ARM32_ecb_td4]}\n\t"
17377        "push	{%[nr], %[L_AES_ARM32_td_ecb]}\n\t"
17378        "ldr	r8, [sp]\n\t"
17379        "mov	lr, %[in]\n\t"
17380        "ldr	r0, [sp, #4]\n\t"
17381        "mov	r12, %[len]\n\t"
17382        "mov	r2, %[L_AES_ARM32_ecb_td4]\n\t"
17383        "cmp	r8, #10\n\t"
17384        "beq	L_AES_ECB_decrypt_start_block_128_%=\n\t"
17385        "cmp	r8, #12\n\t"
17386        "beq	L_AES_ECB_decrypt_start_block_192_%=\n\t"
17387        "\n"
17388    "L_AES_ECB_decrypt_loop_block_256_%=:\n\t"
17389        "ldr	r4, [lr]\n\t"
17390        "ldr	r5, [lr, #4]\n\t"
17391        "ldr	r6, [lr, #8]\n\t"
17392        "ldr	r7, [lr, #12]\n\t"
17393#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17394        "eor	r8, r4, r4, ror #16\n\t"
17395        "eor	r9, r5, r5, ror #16\n\t"
17396        "eor	r10, r6, r6, ror #16\n\t"
17397        "eor	r11, r7, r7, ror #16\n\t"
17398        "bic	r8, r8, #0xff0000\n\t"
17399        "bic	r9, r9, #0xff0000\n\t"
17400        "bic	r10, r10, #0xff0000\n\t"
17401        "bic	r11, r11, #0xff0000\n\t"
17402        "ror	r4, r4, #8\n\t"
17403        "ror	r5, r5, #8\n\t"
17404        "ror	r6, r6, #8\n\t"
17405        "ror	r7, r7, #8\n\t"
17406        "eor	r4, r4, r8, lsr #8\n\t"
17407        "eor	r5, r5, r9, lsr #8\n\t"
17408        "eor	r6, r6, r10, lsr #8\n\t"
17409        "eor	r7, r7, r11, lsr #8\n\t"
17410#else
17411        "rev	r4, r4\n\t"
17412        "rev	r5, r5\n\t"
17413        "rev	r6, r6\n\t"
17414        "rev	r7, r7\n\t"
17415#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
17416        "push	{r1, %[ks], r12, lr}\n\t"
17417        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
17418        /* Round: 0 - XOR in key schedule */
17419        "eor	r4, r4, r8\n\t"
17420        "eor	r5, r5, r9\n\t"
17421        "eor	r6, r6, r10\n\t"
17422        "eor	r7, r7, r11\n\t"
17423        "mov	r1, #6\n\t"
17424#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
17425        "bl	AES_decrypt_block\n\t"
17426#else
17427        "\n"
17428    "L_AES_ECB_decrypt_block_nr_256_%=:\n\t"
17429#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17430#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17431        "lsl	r8, r7, #8\n\t"
17432        "lsr	r8, r8, #24\n\t"
17433#else
17434        "uxtb	r8, r7, ror #16\n\t"
17435#endif
17436#else
17437        "ubfx	r8, r7, #16, #8\n\t"
17438#endif
17439        "lsr	r11, r4, #24\n\t"
17440#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17441#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17442        "lsl	r12, r6, #16\n\t"
17443        "lsr	r12, r12, #24\n\t"
17444#else
17445        "uxtb	r12, r6, ror #8\n\t"
17446#endif
17447#else
17448        "ubfx	r12, r6, #8, #8\n\t"
17449#endif
17450#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17451#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17452        "lsl	lr, r5, #24\n\t"
17453        "lsr	lr, lr, #24\n\t"
17454#else
17455        "uxtb	lr, r5\n\t"
17456#endif
17457#else
17458        "ubfx	lr, r5, #0, #8\n\t"
17459#endif
17460        "ldr	r8, [r0, r8, lsl #2]\n\t"
17461        "ldr	r11, [r0, r11, lsl #2]\n\t"
17462        "ldr	r12, [r0, r12, lsl #2]\n\t"
17463        "ldr	lr, [r0, lr, lsl #2]\n\t"
17464#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17465#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17466        "lsl	r9, r4, #8\n\t"
17467        "lsr	r9, r9, #24\n\t"
17468#else
17469        "uxtb	r9, r4, ror #16\n\t"
17470#endif
17471#else
17472        "ubfx	r9, r4, #16, #8\n\t"
17473#endif
17474        "eor	r8, r8, r11, ror #24\n\t"
17475        "lsr	r11, r5, #24\n\t"
17476        "eor	r8, r8, r12, ror #8\n\t"
17477#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17478#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17479        "lsl	r12, r7, #16\n\t"
17480        "lsr	r12, r12, #24\n\t"
17481#else
17482        "uxtb	r12, r7, ror #8\n\t"
17483#endif
17484#else
17485        "ubfx	r12, r7, #8, #8\n\t"
17486#endif
17487        "eor	r8, r8, lr, ror #16\n\t"
17488#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17489#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17490        "lsl	lr, r6, #24\n\t"
17491        "lsr	lr, lr, #24\n\t"
17492#else
17493        "uxtb	lr, r6\n\t"
17494#endif
17495#else
17496        "ubfx	lr, r6, #0, #8\n\t"
17497#endif
17498        "ldr	r9, [r0, r9, lsl #2]\n\t"
17499        "ldr	r11, [r0, r11, lsl #2]\n\t"
17500        "ldr	r12, [r0, r12, lsl #2]\n\t"
17501        "ldr	lr, [r0, lr, lsl #2]\n\t"
17502#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17503#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17504        "lsl	r10, r5, #8\n\t"
17505        "lsr	r10, r10, #24\n\t"
17506#else
17507        "uxtb	r10, r5, ror #16\n\t"
17508#endif
17509#else
17510        "ubfx	r10, r5, #16, #8\n\t"
17511#endif
17512        "eor	r9, r9, r11, ror #24\n\t"
17513        "lsr	r11, r6, #24\n\t"
17514        "eor	r9, r9, r12, ror #8\n\t"
17515#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17516#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17517        "lsl	r12, r4, #16\n\t"
17518        "lsr	r12, r12, #24\n\t"
17519#else
17520        "uxtb	r12, r4, ror #8\n\t"
17521#endif
17522#else
17523        "ubfx	r12, r4, #8, #8\n\t"
17524#endif
17525        "eor	r9, r9, lr, ror #16\n\t"
17526#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17527#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17528        "lsl	lr, r7, #24\n\t"
17529        "lsr	lr, lr, #24\n\t"
17530#else
17531        "uxtb	lr, r7\n\t"
17532#endif
17533#else
17534        "ubfx	lr, r7, #0, #8\n\t"
17535#endif
17536        "ldr	r10, [r0, r10, lsl #2]\n\t"
17537        "ldr	r11, [r0, r11, lsl #2]\n\t"
17538        "ldr	r12, [r0, r12, lsl #2]\n\t"
17539        "ldr	lr, [r0, lr, lsl #2]\n\t"
17540#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17541#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17542        "lsl	r4, r4, #24\n\t"
17543        "lsr	r4, r4, #24\n\t"
17544#else
17545        "uxtb	r4, r4\n\t"
17546#endif
17547#else
17548        "ubfx	r4, r4, #0, #8\n\t"
17549#endif
17550        "eor	r10, r10, r11, ror #24\n\t"
17551#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17552#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17553        "lsl	r11, r6, #8\n\t"
17554        "lsr	r11, r11, #24\n\t"
17555#else
17556        "uxtb	r11, r6, ror #16\n\t"
17557#endif
17558#else
17559        "ubfx	r11, r6, #16, #8\n\t"
17560#endif
17561        "eor	r10, r10, r12, ror #8\n\t"
17562        "lsr	r12, r7, #24\n\t"
17563        "eor	r10, r10, lr, ror #16\n\t"
17564#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17565#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17566        "lsl	lr, r5, #16\n\t"
17567        "lsr	lr, lr, #24\n\t"
17568#else
17569        "uxtb	lr, r5, ror #8\n\t"
17570#endif
17571#else
17572        "ubfx	lr, r5, #8, #8\n\t"
17573#endif
17574        "ldr	r4, [r0, r4, lsl #2]\n\t"
17575        "ldr	r12, [r0, r12, lsl #2]\n\t"
17576        "ldr	r11, [r0, r11, lsl #2]\n\t"
17577        "ldr	lr, [r0, lr, lsl #2]\n\t"
17578        "eor	r12, r12, r4, ror #24\n\t"
17579        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
17580        "eor	r11, r11, lr, ror #8\n\t"
17581        "eor	r11, r11, r12, ror #24\n\t"
17582        /*   XOR in Key Schedule */
17583        "eor	r8, r8, r4\n\t"
17584        "eor	r9, r9, r5\n\t"
17585        "eor	r10, r10, r6\n\t"
17586        "eor	r11, r11, r7\n\t"
17587#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17588#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17589        "lsl	r4, r11, #8\n\t"
17590        "lsr	r4, r4, #24\n\t"
17591#else
17592        "uxtb	r4, r11, ror #16\n\t"
17593#endif
17594#else
17595        "ubfx	r4, r11, #16, #8\n\t"
17596#endif
17597        "lsr	r7, r8, #24\n\t"
17598#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17599#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17600        "lsl	r12, r10, #16\n\t"
17601        "lsr	r12, r12, #24\n\t"
17602#else
17603        "uxtb	r12, r10, ror #8\n\t"
17604#endif
17605#else
17606        "ubfx	r12, r10, #8, #8\n\t"
17607#endif
17608#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17609#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17610        "lsl	lr, r9, #24\n\t"
17611        "lsr	lr, lr, #24\n\t"
17612#else
17613        "uxtb	lr, r9\n\t"
17614#endif
17615#else
17616        "ubfx	lr, r9, #0, #8\n\t"
17617#endif
17618        "ldr	r4, [r0, r4, lsl #2]\n\t"
17619        "ldr	r7, [r0, r7, lsl #2]\n\t"
17620        "ldr	r12, [r0, r12, lsl #2]\n\t"
17621        "ldr	lr, [r0, lr, lsl #2]\n\t"
17622#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17623#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17624        "lsl	r5, r8, #8\n\t"
17625        "lsr	r5, r5, #24\n\t"
17626#else
17627        "uxtb	r5, r8, ror #16\n\t"
17628#endif
17629#else
17630        "ubfx	r5, r8, #16, #8\n\t"
17631#endif
17632        "eor	r4, r4, r7, ror #24\n\t"
17633        "lsr	r7, r9, #24\n\t"
17634        "eor	r4, r4, r12, ror #8\n\t"
17635#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17636#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17637        "lsl	r12, r11, #16\n\t"
17638        "lsr	r12, r12, #24\n\t"
17639#else
17640        "uxtb	r12, r11, ror #8\n\t"
17641#endif
17642#else
17643        "ubfx	r12, r11, #8, #8\n\t"
17644#endif
17645        "eor	r4, r4, lr, ror #16\n\t"
17646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17647#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17648        "lsl	lr, r10, #24\n\t"
17649        "lsr	lr, lr, #24\n\t"
17650#else
17651        "uxtb	lr, r10\n\t"
17652#endif
17653#else
17654        "ubfx	lr, r10, #0, #8\n\t"
17655#endif
17656        "ldr	r5, [r0, r5, lsl #2]\n\t"
17657        "ldr	r7, [r0, r7, lsl #2]\n\t"
17658        "ldr	r12, [r0, r12, lsl #2]\n\t"
17659        "ldr	lr, [r0, lr, lsl #2]\n\t"
17660#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17661#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17662        "lsl	r6, r9, #8\n\t"
17663        "lsr	r6, r6, #24\n\t"
17664#else
17665        "uxtb	r6, r9, ror #16\n\t"
17666#endif
17667#else
17668        "ubfx	r6, r9, #16, #8\n\t"
17669#endif
17670        "eor	r5, r5, r7, ror #24\n\t"
17671        "lsr	r7, r10, #24\n\t"
17672        "eor	r5, r5, r12, ror #8\n\t"
17673#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17674#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17675        "lsl	r12, r8, #16\n\t"
17676        "lsr	r12, r12, #24\n\t"
17677#else
17678        "uxtb	r12, r8, ror #8\n\t"
17679#endif
17680#else
17681        "ubfx	r12, r8, #8, #8\n\t"
17682#endif
17683        "eor	r5, r5, lr, ror #16\n\t"
17684#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17685#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17686        "lsl	lr, r11, #24\n\t"
17687        "lsr	lr, lr, #24\n\t"
17688#else
17689        "uxtb	lr, r11\n\t"
17690#endif
17691#else
17692        "ubfx	lr, r11, #0, #8\n\t"
17693#endif
17694        "ldr	r6, [r0, r6, lsl #2]\n\t"
17695        "ldr	r7, [r0, r7, lsl #2]\n\t"
17696        "ldr	r12, [r0, r12, lsl #2]\n\t"
17697        "ldr	lr, [r0, lr, lsl #2]\n\t"
17698#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17699#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17700        "lsl	r8, r8, #24\n\t"
17701        "lsr	r8, r8, #24\n\t"
17702#else
17703        "uxtb	r8, r8\n\t"
17704#endif
17705#else
17706        "ubfx	r8, r8, #0, #8\n\t"
17707#endif
17708        "eor	r6, r6, r7, ror #24\n\t"
17709#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17710#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17711        "lsl	r7, r10, #8\n\t"
17712        "lsr	r7, r7, #24\n\t"
17713#else
17714        "uxtb	r7, r10, ror #16\n\t"
17715#endif
17716#else
17717        "ubfx	r7, r10, #16, #8\n\t"
17718#endif
17719        "eor	r6, r6, r12, ror #8\n\t"
17720        "lsr	r12, r11, #24\n\t"
17721        "eor	r6, r6, lr, ror #16\n\t"
17722#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17723#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17724        "lsl	lr, r9, #16\n\t"
17725        "lsr	lr, lr, #24\n\t"
17726#else
17727        "uxtb	lr, r9, ror #8\n\t"
17728#endif
17729#else
17730        "ubfx	lr, r9, #8, #8\n\t"
17731#endif
17732        "ldr	r8, [r0, r8, lsl #2]\n\t"
17733        "ldr	r12, [r0, r12, lsl #2]\n\t"
17734        "ldr	r7, [r0, r7, lsl #2]\n\t"
17735        "ldr	lr, [r0, lr, lsl #2]\n\t"
17736        "eor	r12, r12, r8, ror #24\n\t"
17737        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
17738        "eor	r7, r7, lr, ror #8\n\t"
17739        "eor	r7, r7, r12, ror #24\n\t"
17740        /*   XOR in Key Schedule */
17741        "eor	r4, r4, r8\n\t"
17742        "eor	r5, r5, r9\n\t"
17743        "eor	r6, r6, r10\n\t"
17744        "eor	r7, r7, r11\n\t"
17745        "subs	r1, r1, #1\n\t"
17746        "bne	L_AES_ECB_decrypt_block_nr_256_%=\n\t"
17747#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17748#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17749        "lsl	r8, r7, #8\n\t"
17750        "lsr	r8, r8, #24\n\t"
17751#else
17752        "uxtb	r8, r7, ror #16\n\t"
17753#endif
17754#else
17755        "ubfx	r8, r7, #16, #8\n\t"
17756#endif
17757        "lsr	r11, r4, #24\n\t"
17758#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17759#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17760        "lsl	r12, r6, #16\n\t"
17761        "lsr	r12, r12, #24\n\t"
17762#else
17763        "uxtb	r12, r6, ror #8\n\t"
17764#endif
17765#else
17766        "ubfx	r12, r6, #8, #8\n\t"
17767#endif
17768#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17769#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17770        "lsl	lr, r5, #24\n\t"
17771        "lsr	lr, lr, #24\n\t"
17772#else
17773        "uxtb	lr, r5\n\t"
17774#endif
17775#else
17776        "ubfx	lr, r5, #0, #8\n\t"
17777#endif
17778        "ldr	r8, [r0, r8, lsl #2]\n\t"
17779        "ldr	r11, [r0, r11, lsl #2]\n\t"
17780        "ldr	r12, [r0, r12, lsl #2]\n\t"
17781        "ldr	lr, [r0, lr, lsl #2]\n\t"
17782#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17783#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17784        "lsl	r9, r4, #8\n\t"
17785        "lsr	r9, r9, #24\n\t"
17786#else
17787        "uxtb	r9, r4, ror #16\n\t"
17788#endif
17789#else
17790        "ubfx	r9, r4, #16, #8\n\t"
17791#endif
17792        "eor	r8, r8, r11, ror #24\n\t"
17793        "lsr	r11, r5, #24\n\t"
17794        "eor	r8, r8, r12, ror #8\n\t"
17795#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17796#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17797        "lsl	r12, r7, #16\n\t"
17798        "lsr	r12, r12, #24\n\t"
17799#else
17800        "uxtb	r12, r7, ror #8\n\t"
17801#endif
17802#else
17803        "ubfx	r12, r7, #8, #8\n\t"
17804#endif
17805        "eor	r8, r8, lr, ror #16\n\t"
17806#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17807#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17808        "lsl	lr, r6, #24\n\t"
17809        "lsr	lr, lr, #24\n\t"
17810#else
17811        "uxtb	lr, r6\n\t"
17812#endif
17813#else
17814        "ubfx	lr, r6, #0, #8\n\t"
17815#endif
17816        "ldr	r9, [r0, r9, lsl #2]\n\t"
17817        "ldr	r11, [r0, r11, lsl #2]\n\t"
17818        "ldr	r12, [r0, r12, lsl #2]\n\t"
17819        "ldr	lr, [r0, lr, lsl #2]\n\t"
17820#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17821#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17822        "lsl	r10, r5, #8\n\t"
17823        "lsr	r10, r10, #24\n\t"
17824#else
17825        "uxtb	r10, r5, ror #16\n\t"
17826#endif
17827#else
17828        "ubfx	r10, r5, #16, #8\n\t"
17829#endif
17830        "eor	r9, r9, r11, ror #24\n\t"
17831        "lsr	r11, r6, #24\n\t"
17832        "eor	r9, r9, r12, ror #8\n\t"
17833#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17834#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17835        "lsl	r12, r4, #16\n\t"
17836        "lsr	r12, r12, #24\n\t"
17837#else
17838        "uxtb	r12, r4, ror #8\n\t"
17839#endif
17840#else
17841        "ubfx	r12, r4, #8, #8\n\t"
17842#endif
17843        "eor	r9, r9, lr, ror #16\n\t"
17844#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17845#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17846        "lsl	lr, r7, #24\n\t"
17847        "lsr	lr, lr, #24\n\t"
17848#else
17849        "uxtb	lr, r7\n\t"
17850#endif
17851#else
17852        "ubfx	lr, r7, #0, #8\n\t"
17853#endif
17854        "ldr	r10, [r0, r10, lsl #2]\n\t"
17855        "ldr	r11, [r0, r11, lsl #2]\n\t"
17856        "ldr	r12, [r0, r12, lsl #2]\n\t"
17857        "ldr	lr, [r0, lr, lsl #2]\n\t"
17858#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17859#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17860        "lsl	r4, r4, #24\n\t"
17861        "lsr	r4, r4, #24\n\t"
17862#else
17863        "uxtb	r4, r4\n\t"
17864#endif
17865#else
17866        "ubfx	r4, r4, #0, #8\n\t"
17867#endif
17868        "eor	r10, r10, r11, ror #24\n\t"
17869#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17871        "lsl	r11, r6, #8\n\t"
17872        "lsr	r11, r11, #24\n\t"
17873#else
17874        "uxtb	r11, r6, ror #16\n\t"
17875#endif
17876#else
17877        "ubfx	r11, r6, #16, #8\n\t"
17878#endif
17879        "eor	r10, r10, r12, ror #8\n\t"
17880        "lsr	r12, r7, #24\n\t"
17881        "eor	r10, r10, lr, ror #16\n\t"
17882#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17883#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17884        "lsl	lr, r5, #16\n\t"
17885        "lsr	lr, lr, #24\n\t"
17886#else
17887        "uxtb	lr, r5, ror #8\n\t"
17888#endif
17889#else
17890        "ubfx	lr, r5, #8, #8\n\t"
17891#endif
17892        "ldr	r4, [r0, r4, lsl #2]\n\t"
17893        "ldr	r12, [r0, r12, lsl #2]\n\t"
17894        "ldr	r11, [r0, r11, lsl #2]\n\t"
17895        "ldr	lr, [r0, lr, lsl #2]\n\t"
17896        "eor	r12, r12, r4, ror #24\n\t"
17897        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
17898        "eor	r11, r11, lr, ror #8\n\t"
17899        "eor	r11, r11, r12, ror #24\n\t"
17900        /*   XOR in Key Schedule */
17901        "eor	r8, r8, r4\n\t"
17902        "eor	r9, r9, r5\n\t"
17903        "eor	r10, r10, r6\n\t"
17904        "eor	r11, r11, r7\n\t"
17905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17906#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17907        "lsl	r4, r9, #24\n\t"
17908        "lsr	r4, r4, #24\n\t"
17909#else
17910        "uxtb	r4, r9\n\t"
17911#endif
17912#else
17913        "ubfx	r4, r9, #0, #8\n\t"
17914#endif
17915#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17916#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17917        "lsl	r7, r10, #16\n\t"
17918        "lsr	r7, r7, #24\n\t"
17919#else
17920        "uxtb	r7, r10, ror #8\n\t"
17921#endif
17922#else
17923        "ubfx	r7, r10, #8, #8\n\t"
17924#endif
17925#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17926#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17927        "lsl	r12, r11, #8\n\t"
17928        "lsr	r12, r12, #24\n\t"
17929#else
17930        "uxtb	r12, r11, ror #16\n\t"
17931#endif
17932#else
17933        "ubfx	r12, r11, #16, #8\n\t"
17934#endif
17935        "lsr	lr, r8, #24\n\t"
17936        "ldrb	r4, [r2, r4]\n\t"
17937        "ldrb	r7, [r2, r7]\n\t"
17938        "ldrb	r12, [r2, r12]\n\t"
17939        "ldrb	lr, [r2, lr]\n\t"
17940#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17941#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17942        "lsl	r5, r10, #24\n\t"
17943        "lsr	r5, r5, #24\n\t"
17944#else
17945        "uxtb	r5, r10\n\t"
17946#endif
17947#else
17948        "ubfx	r5, r10, #0, #8\n\t"
17949#endif
17950        "eor	r4, r4, r7, lsl #8\n\t"
17951#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17952#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17953        "lsl	r7, r11, #16\n\t"
17954        "lsr	r7, r7, #24\n\t"
17955#else
17956        "uxtb	r7, r11, ror #8\n\t"
17957#endif
17958#else
17959        "ubfx	r7, r11, #8, #8\n\t"
17960#endif
17961        "eor	r4, r4, r12, lsl #16\n\t"
17962#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17964        "lsl	r12, r8, #8\n\t"
17965        "lsr	r12, r12, #24\n\t"
17966#else
17967        "uxtb	r12, r8, ror #16\n\t"
17968#endif
17969#else
17970        "ubfx	r12, r8, #16, #8\n\t"
17971#endif
17972        "eor	r4, r4, lr, lsl #24\n\t"
17973        "lsr	lr, r9, #24\n\t"
17974        "ldrb	r7, [r2, r7]\n\t"
17975        "ldrb	lr, [r2, lr]\n\t"
17976        "ldrb	r5, [r2, r5]\n\t"
17977        "ldrb	r12, [r2, r12]\n\t"
17978#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17979#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17980        "lsl	r6, r11, #24\n\t"
17981        "lsr	r6, r6, #24\n\t"
17982#else
17983        "uxtb	r6, r11\n\t"
17984#endif
17985#else
17986        "ubfx	r6, r11, #0, #8\n\t"
17987#endif
17988        "eor	r5, r5, r7, lsl #8\n\t"
17989#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17990#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17991        "lsl	r7, r8, #16\n\t"
17992        "lsr	r7, r7, #24\n\t"
17993#else
17994        "uxtb	r7, r8, ror #8\n\t"
17995#endif
17996#else
17997        "ubfx	r7, r8, #8, #8\n\t"
17998#endif
17999        "eor	r5, r5, r12, lsl #16\n\t"
18000#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18001#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18002        "lsl	r12, r9, #8\n\t"
18003        "lsr	r12, r12, #24\n\t"
18004#else
18005        "uxtb	r12, r9, ror #16\n\t"
18006#endif
18007#else
18008        "ubfx	r12, r9, #16, #8\n\t"
18009#endif
18010        "eor	r5, r5, lr, lsl #24\n\t"
18011        "lsr	lr, r10, #24\n\t"
18012        "ldrb	r7, [r2, r7]\n\t"
18013        "ldrb	lr, [r2, lr]\n\t"
18014        "ldrb	r6, [r2, r6]\n\t"
18015        "ldrb	r12, [r2, r12]\n\t"
18016        "lsr	r11, r11, #24\n\t"
18017        "eor	r6, r6, r7, lsl #8\n\t"
18018#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18019#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18020        "lsl	r7, r8, #24\n\t"
18021        "lsr	r7, r7, #24\n\t"
18022#else
18023        "uxtb	r7, r8\n\t"
18024#endif
18025#else
18026        "ubfx	r7, r8, #0, #8\n\t"
18027#endif
18028        "eor	r6, r6, r12, lsl #16\n\t"
18029#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18031        "lsl	r12, r9, #16\n\t"
18032        "lsr	r12, r12, #24\n\t"
18033#else
18034        "uxtb	r12, r9, ror #8\n\t"
18035#endif
18036#else
18037        "ubfx	r12, r9, #8, #8\n\t"
18038#endif
18039        "eor	r6, r6, lr, lsl #24\n\t"
18040#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18041#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18042        "lsl	lr, r10, #8\n\t"
18043        "lsr	lr, lr, #24\n\t"
18044#else
18045        "uxtb	lr, r10, ror #16\n\t"
18046#endif
18047#else
18048        "ubfx	lr, r10, #16, #8\n\t"
18049#endif
18050        "ldrb	r11, [r2, r11]\n\t"
18051        "ldrb	r12, [r2, r12]\n\t"
18052        "ldrb	r7, [r2, r7]\n\t"
18053        "ldrb	lr, [r2, lr]\n\t"
18054        "eor	r12, r12, r11, lsl #16\n\t"
18055        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
18056        "eor	r7, r7, r12, lsl #8\n\t"
18057        "eor	r7, r7, lr, lsl #16\n\t"
18058        /*   XOR in Key Schedule */
18059        "eor	r4, r4, r8\n\t"
18060        "eor	r5, r5, r9\n\t"
18061        "eor	r6, r6, r10\n\t"
18062        "eor	r7, r7, r11\n\t"
18063#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
18064        "pop	{r1, %[ks], r12, lr}\n\t"
18065#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18066        "eor	r8, r4, r4, ror #16\n\t"
18067        "eor	r9, r5, r5, ror #16\n\t"
18068        "eor	r10, r6, r6, ror #16\n\t"
18069        "eor	r11, r7, r7, ror #16\n\t"
18070        "bic	r8, r8, #0xff0000\n\t"
18071        "bic	r9, r9, #0xff0000\n\t"
18072        "bic	r10, r10, #0xff0000\n\t"
18073        "bic	r11, r11, #0xff0000\n\t"
18074        "ror	r4, r4, #8\n\t"
18075        "ror	r5, r5, #8\n\t"
18076        "ror	r6, r6, #8\n\t"
18077        "ror	r7, r7, #8\n\t"
18078        "eor	r4, r4, r8, lsr #8\n\t"
18079        "eor	r5, r5, r9, lsr #8\n\t"
18080        "eor	r6, r6, r10, lsr #8\n\t"
18081        "eor	r7, r7, r11, lsr #8\n\t"
18082#else
18083        "rev	r4, r4\n\t"
18084        "rev	r5, r5\n\t"
18085        "rev	r6, r6\n\t"
18086        "rev	r7, r7\n\t"
18087#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
18088        "str	r4, [%[out]]\n\t"
18089        "str	r5, [%[out], #4]\n\t"
18090        "str	r6, [%[out], #8]\n\t"
18091        "str	r7, [%[out], #12]\n\t"
18092        "subs	r12, r12, #16\n\t"
18093        "add	lr, lr, #16\n\t"
18094        "add	%[out], %[out], #16\n\t"
18095        "bne	L_AES_ECB_decrypt_loop_block_256_%=\n\t"
18096        "b	L_AES_ECB_decrypt_end_%=\n\t"
18097        "\n"
18098    "L_AES_ECB_decrypt_start_block_192_%=:\n\t"
18099        "\n"
18100    "L_AES_ECB_decrypt_loop_block_192_%=:\n\t"
18101        "ldr	r4, [lr]\n\t"
18102        "ldr	r5, [lr, #4]\n\t"
18103        "ldr	r6, [lr, #8]\n\t"
18104        "ldr	r7, [lr, #12]\n\t"
18105#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18106        "eor	r8, r4, r4, ror #16\n\t"
18107        "eor	r9, r5, r5, ror #16\n\t"
18108        "eor	r10, r6, r6, ror #16\n\t"
18109        "eor	r11, r7, r7, ror #16\n\t"
18110        "bic	r8, r8, #0xff0000\n\t"
18111        "bic	r9, r9, #0xff0000\n\t"
18112        "bic	r10, r10, #0xff0000\n\t"
18113        "bic	r11, r11, #0xff0000\n\t"
18114        "ror	r4, r4, #8\n\t"
18115        "ror	r5, r5, #8\n\t"
18116        "ror	r6, r6, #8\n\t"
18117        "ror	r7, r7, #8\n\t"
18118        "eor	r4, r4, r8, lsr #8\n\t"
18119        "eor	r5, r5, r9, lsr #8\n\t"
18120        "eor	r6, r6, r10, lsr #8\n\t"
18121        "eor	r7, r7, r11, lsr #8\n\t"
18122#else
18123        "rev	r4, r4\n\t"
18124        "rev	r5, r5\n\t"
18125        "rev	r6, r6\n\t"
18126        "rev	r7, r7\n\t"
18127#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
18128        "push	{r1, %[ks], r12, lr}\n\t"
18129        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
18130        /* Round: 0 - XOR in key schedule */
18131        "eor	r4, r4, r8\n\t"
18132        "eor	r5, r5, r9\n\t"
18133        "eor	r6, r6, r10\n\t"
18134        "eor	r7, r7, r11\n\t"
18135        "mov	r1, #5\n\t"
18136#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
18137        "bl	AES_decrypt_block\n\t"
18138#else
18139        "\n"
18140    "L_AES_ECB_decrypt_block_nr_192_%=:\n\t"
18141#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18142#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18143        "lsl	r8, r7, #8\n\t"
18144        "lsr	r8, r8, #24\n\t"
18145#else
18146        "uxtb	r8, r7, ror #16\n\t"
18147#endif
18148#else
18149        "ubfx	r8, r7, #16, #8\n\t"
18150#endif
18151        "lsr	r11, r4, #24\n\t"
18152#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18153#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18154        "lsl	r12, r6, #16\n\t"
18155        "lsr	r12, r12, #24\n\t"
18156#else
18157        "uxtb	r12, r6, ror #8\n\t"
18158#endif
18159#else
18160        "ubfx	r12, r6, #8, #8\n\t"
18161#endif
18162#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18164        "lsl	lr, r5, #24\n\t"
18165        "lsr	lr, lr, #24\n\t"
18166#else
18167        "uxtb	lr, r5\n\t"
18168#endif
18169#else
18170        "ubfx	lr, r5, #0, #8\n\t"
18171#endif
18172        "ldr	r8, [r0, r8, lsl #2]\n\t"
18173        "ldr	r11, [r0, r11, lsl #2]\n\t"
18174        "ldr	r12, [r0, r12, lsl #2]\n\t"
18175        "ldr	lr, [r0, lr, lsl #2]\n\t"
18176#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18177#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18178        "lsl	r9, r4, #8\n\t"
18179        "lsr	r9, r9, #24\n\t"
18180#else
18181        "uxtb	r9, r4, ror #16\n\t"
18182#endif
18183#else
18184        "ubfx	r9, r4, #16, #8\n\t"
18185#endif
18186        "eor	r8, r8, r11, ror #24\n\t"
18187        "lsr	r11, r5, #24\n\t"
18188        "eor	r8, r8, r12, ror #8\n\t"
18189#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18190#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18191        "lsl	r12, r7, #16\n\t"
18192        "lsr	r12, r12, #24\n\t"
18193#else
18194        "uxtb	r12, r7, ror #8\n\t"
18195#endif
18196#else
18197        "ubfx	r12, r7, #8, #8\n\t"
18198#endif
18199        "eor	r8, r8, lr, ror #16\n\t"
18200#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18201#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18202        "lsl	lr, r6, #24\n\t"
18203        "lsr	lr, lr, #24\n\t"
18204#else
18205        "uxtb	lr, r6\n\t"
18206#endif
18207#else
18208        "ubfx	lr, r6, #0, #8\n\t"
18209#endif
18210        "ldr	r9, [r0, r9, lsl #2]\n\t"
18211        "ldr	r11, [r0, r11, lsl #2]\n\t"
18212        "ldr	r12, [r0, r12, lsl #2]\n\t"
18213        "ldr	lr, [r0, lr, lsl #2]\n\t"
18214#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18215#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18216        "lsl	r10, r5, #8\n\t"
18217        "lsr	r10, r10, #24\n\t"
18218#else
18219        "uxtb	r10, r5, ror #16\n\t"
18220#endif
18221#else
18222        "ubfx	r10, r5, #16, #8\n\t"
18223#endif
18224        "eor	r9, r9, r11, ror #24\n\t"
18225        "lsr	r11, r6, #24\n\t"
18226        "eor	r9, r9, r12, ror #8\n\t"
18227#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18228#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18229        "lsl	r12, r4, #16\n\t"
18230        "lsr	r12, r12, #24\n\t"
18231#else
18232        "uxtb	r12, r4, ror #8\n\t"
18233#endif
18234#else
18235        "ubfx	r12, r4, #8, #8\n\t"
18236#endif
18237        "eor	r9, r9, lr, ror #16\n\t"
18238#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18239#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18240        "lsl	lr, r7, #24\n\t"
18241        "lsr	lr, lr, #24\n\t"
18242#else
18243        "uxtb	lr, r7\n\t"
18244#endif
18245#else
18246        "ubfx	lr, r7, #0, #8\n\t"
18247#endif
18248        "ldr	r10, [r0, r10, lsl #2]\n\t"
18249        "ldr	r11, [r0, r11, lsl #2]\n\t"
18250        "ldr	r12, [r0, r12, lsl #2]\n\t"
18251        "ldr	lr, [r0, lr, lsl #2]\n\t"
18252#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18253#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18254        "lsl	r4, r4, #24\n\t"
18255        "lsr	r4, r4, #24\n\t"
18256#else
18257        "uxtb	r4, r4\n\t"
18258#endif
18259#else
18260        "ubfx	r4, r4, #0, #8\n\t"
18261#endif
18262        "eor	r10, r10, r11, ror #24\n\t"
18263#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18264#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18265        "lsl	r11, r6, #8\n\t"
18266        "lsr	r11, r11, #24\n\t"
18267#else
18268        "uxtb	r11, r6, ror #16\n\t"
18269#endif
18270#else
18271        "ubfx	r11, r6, #16, #8\n\t"
18272#endif
18273        "eor	r10, r10, r12, ror #8\n\t"
18274        "lsr	r12, r7, #24\n\t"
18275        "eor	r10, r10, lr, ror #16\n\t"
18276#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18277#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18278        "lsl	lr, r5, #16\n\t"
18279        "lsr	lr, lr, #24\n\t"
18280#else
18281        "uxtb	lr, r5, ror #8\n\t"
18282#endif
18283#else
18284        "ubfx	lr, r5, #8, #8\n\t"
18285#endif
18286        "ldr	r4, [r0, r4, lsl #2]\n\t"
18287        "ldr	r12, [r0, r12, lsl #2]\n\t"
18288        "ldr	r11, [r0, r11, lsl #2]\n\t"
18289        "ldr	lr, [r0, lr, lsl #2]\n\t"
18290        "eor	r12, r12, r4, ror #24\n\t"
18291        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
18292        "eor	r11, r11, lr, ror #8\n\t"
18293        "eor	r11, r11, r12, ror #24\n\t"
18294        /*   XOR in Key Schedule */
18295        "eor	r8, r8, r4\n\t"
18296        "eor	r9, r9, r5\n\t"
18297        "eor	r10, r10, r6\n\t"
18298        "eor	r11, r11, r7\n\t"
18299#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18300#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18301        "lsl	r4, r11, #8\n\t"
18302        "lsr	r4, r4, #24\n\t"
18303#else
18304        "uxtb	r4, r11, ror #16\n\t"
18305#endif
18306#else
18307        "ubfx	r4, r11, #16, #8\n\t"
18308#endif
18309        "lsr	r7, r8, #24\n\t"
18310#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18311#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18312        "lsl	r12, r10, #16\n\t"
18313        "lsr	r12, r12, #24\n\t"
18314#else
18315        "uxtb	r12, r10, ror #8\n\t"
18316#endif
18317#else
18318        "ubfx	r12, r10, #8, #8\n\t"
18319#endif
18320#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18321#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18322        "lsl	lr, r9, #24\n\t"
18323        "lsr	lr, lr, #24\n\t"
18324#else
18325        "uxtb	lr, r9\n\t"
18326#endif
18327#else
18328        "ubfx	lr, r9, #0, #8\n\t"
18329#endif
18330        "ldr	r4, [r0, r4, lsl #2]\n\t"
18331        "ldr	r7, [r0, r7, lsl #2]\n\t"
18332        "ldr	r12, [r0, r12, lsl #2]\n\t"
18333        "ldr	lr, [r0, lr, lsl #2]\n\t"
18334#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18335#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18336        "lsl	r5, r8, #8\n\t"
18337        "lsr	r5, r5, #24\n\t"
18338#else
18339        "uxtb	r5, r8, ror #16\n\t"
18340#endif
18341#else
18342        "ubfx	r5, r8, #16, #8\n\t"
18343#endif
18344        "eor	r4, r4, r7, ror #24\n\t"
18345        "lsr	r7, r9, #24\n\t"
18346        "eor	r4, r4, r12, ror #8\n\t"
18347#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18348#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18349        "lsl	r12, r11, #16\n\t"
18350        "lsr	r12, r12, #24\n\t"
18351#else
18352        "uxtb	r12, r11, ror #8\n\t"
18353#endif
18354#else
18355        "ubfx	r12, r11, #8, #8\n\t"
18356#endif
18357        "eor	r4, r4, lr, ror #16\n\t"
18358#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18359#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18360        "lsl	lr, r10, #24\n\t"
18361        "lsr	lr, lr, #24\n\t"
18362#else
18363        "uxtb	lr, r10\n\t"
18364#endif
18365#else
18366        "ubfx	lr, r10, #0, #8\n\t"
18367#endif
18368        "ldr	r5, [r0, r5, lsl #2]\n\t"
18369        "ldr	r7, [r0, r7, lsl #2]\n\t"
18370        "ldr	r12, [r0, r12, lsl #2]\n\t"
18371        "ldr	lr, [r0, lr, lsl #2]\n\t"
18372#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18373#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18374        "lsl	r6, r9, #8\n\t"
18375        "lsr	r6, r6, #24\n\t"
18376#else
18377        "uxtb	r6, r9, ror #16\n\t"
18378#endif
18379#else
18380        "ubfx	r6, r9, #16, #8\n\t"
18381#endif
18382        "eor	r5, r5, r7, ror #24\n\t"
18383        "lsr	r7, r10, #24\n\t"
18384        "eor	r5, r5, r12, ror #8\n\t"
18385#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18386#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18387        "lsl	r12, r8, #16\n\t"
18388        "lsr	r12, r12, #24\n\t"
18389#else
18390        "uxtb	r12, r8, ror #8\n\t"
18391#endif
18392#else
18393        "ubfx	r12, r8, #8, #8\n\t"
18394#endif
18395        "eor	r5, r5, lr, ror #16\n\t"
18396#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18397#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18398        "lsl	lr, r11, #24\n\t"
18399        "lsr	lr, lr, #24\n\t"
18400#else
18401        "uxtb	lr, r11\n\t"
18402#endif
18403#else
18404        "ubfx	lr, r11, #0, #8\n\t"
18405#endif
18406        "ldr	r6, [r0, r6, lsl #2]\n\t"
18407        "ldr	r7, [r0, r7, lsl #2]\n\t"
18408        "ldr	r12, [r0, r12, lsl #2]\n\t"
18409        "ldr	lr, [r0, lr, lsl #2]\n\t"
18410#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18411#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18412        "lsl	r8, r8, #24\n\t"
18413        "lsr	r8, r8, #24\n\t"
18414#else
18415        "uxtb	r8, r8\n\t"
18416#endif
18417#else
18418        "ubfx	r8, r8, #0, #8\n\t"
18419#endif
18420        "eor	r6, r6, r7, ror #24\n\t"
18421#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18422#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18423        "lsl	r7, r10, #8\n\t"
18424        "lsr	r7, r7, #24\n\t"
18425#else
18426        "uxtb	r7, r10, ror #16\n\t"
18427#endif
18428#else
18429        "ubfx	r7, r10, #16, #8\n\t"
18430#endif
18431        "eor	r6, r6, r12, ror #8\n\t"
18432        "lsr	r12, r11, #24\n\t"
18433        "eor	r6, r6, lr, ror #16\n\t"
18434#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18435#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18436        "lsl	lr, r9, #16\n\t"
18437        "lsr	lr, lr, #24\n\t"
18438#else
18439        "uxtb	lr, r9, ror #8\n\t"
18440#endif
18441#else
18442        "ubfx	lr, r9, #8, #8\n\t"
18443#endif
18444        "ldr	r8, [r0, r8, lsl #2]\n\t"
18445        "ldr	r12, [r0, r12, lsl #2]\n\t"
18446        "ldr	r7, [r0, r7, lsl #2]\n\t"
18447        "ldr	lr, [r0, lr, lsl #2]\n\t"
18448        "eor	r12, r12, r8, ror #24\n\t"
18449        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
18450        "eor	r7, r7, lr, ror #8\n\t"
18451        "eor	r7, r7, r12, ror #24\n\t"
18452        /*   XOR in Key Schedule */
18453        "eor	r4, r4, r8\n\t"
18454        "eor	r5, r5, r9\n\t"
18455        "eor	r6, r6, r10\n\t"
18456        "eor	r7, r7, r11\n\t"
18457        "subs	r1, r1, #1\n\t"
18458        "bne	L_AES_ECB_decrypt_block_nr_192_%=\n\t"
18459#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18460#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18461        "lsl	r8, r7, #8\n\t"
18462        "lsr	r8, r8, #24\n\t"
18463#else
18464        "uxtb	r8, r7, ror #16\n\t"
18465#endif
18466#else
18467        "ubfx	r8, r7, #16, #8\n\t"
18468#endif
18469        "lsr	r11, r4, #24\n\t"
18470#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18471#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18472        "lsl	r12, r6, #16\n\t"
18473        "lsr	r12, r12, #24\n\t"
18474#else
18475        "uxtb	r12, r6, ror #8\n\t"
18476#endif
18477#else
18478        "ubfx	r12, r6, #8, #8\n\t"
18479#endif
18480#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18481#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18482        "lsl	lr, r5, #24\n\t"
18483        "lsr	lr, lr, #24\n\t"
18484#else
18485        "uxtb	lr, r5\n\t"
18486#endif
18487#else
18488        "ubfx	lr, r5, #0, #8\n\t"
18489#endif
18490        "ldr	r8, [r0, r8, lsl #2]\n\t"
18491        "ldr	r11, [r0, r11, lsl #2]\n\t"
18492        "ldr	r12, [r0, r12, lsl #2]\n\t"
18493        "ldr	lr, [r0, lr, lsl #2]\n\t"
18494#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18496        "lsl	r9, r4, #8\n\t"
18497        "lsr	r9, r9, #24\n\t"
18498#else
18499        "uxtb	r9, r4, ror #16\n\t"
18500#endif
18501#else
18502        "ubfx	r9, r4, #16, #8\n\t"
18503#endif
18504        "eor	r8, r8, r11, ror #24\n\t"
18505        "lsr	r11, r5, #24\n\t"
18506        "eor	r8, r8, r12, ror #8\n\t"
18507#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18508#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18509        "lsl	r12, r7, #16\n\t"
18510        "lsr	r12, r12, #24\n\t"
18511#else
18512        "uxtb	r12, r7, ror #8\n\t"
18513#endif
18514#else
18515        "ubfx	r12, r7, #8, #8\n\t"
18516#endif
18517        "eor	r8, r8, lr, ror #16\n\t"
18518#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18519#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18520        "lsl	lr, r6, #24\n\t"
18521        "lsr	lr, lr, #24\n\t"
18522#else
18523        "uxtb	lr, r6\n\t"
18524#endif
18525#else
18526        "ubfx	lr, r6, #0, #8\n\t"
18527#endif
18528        "ldr	r9, [r0, r9, lsl #2]\n\t"
18529        "ldr	r11, [r0, r11, lsl #2]\n\t"
18530        "ldr	r12, [r0, r12, lsl #2]\n\t"
18531        "ldr	lr, [r0, lr, lsl #2]\n\t"
18532#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18533#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18534        "lsl	r10, r5, #8\n\t"
18535        "lsr	r10, r10, #24\n\t"
18536#else
18537        "uxtb	r10, r5, ror #16\n\t"
18538#endif
18539#else
18540        "ubfx	r10, r5, #16, #8\n\t"
18541#endif
18542        "eor	r9, r9, r11, ror #24\n\t"
18543        "lsr	r11, r6, #24\n\t"
18544        "eor	r9, r9, r12, ror #8\n\t"
18545#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18546#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18547        "lsl	r12, r4, #16\n\t"
18548        "lsr	r12, r12, #24\n\t"
18549#else
18550        "uxtb	r12, r4, ror #8\n\t"
18551#endif
18552#else
18553        "ubfx	r12, r4, #8, #8\n\t"
18554#endif
18555        "eor	r9, r9, lr, ror #16\n\t"
18556#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18557#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18558        "lsl	lr, r7, #24\n\t"
18559        "lsr	lr, lr, #24\n\t"
18560#else
18561        "uxtb	lr, r7\n\t"
18562#endif
18563#else
18564        "ubfx	lr, r7, #0, #8\n\t"
18565#endif
18566        "ldr	r10, [r0, r10, lsl #2]\n\t"
18567        "ldr	r11, [r0, r11, lsl #2]\n\t"
18568        "ldr	r12, [r0, r12, lsl #2]\n\t"
18569        "ldr	lr, [r0, lr, lsl #2]\n\t"
18570#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18571#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18572        "lsl	r4, r4, #24\n\t"
18573        "lsr	r4, r4, #24\n\t"
18574#else
18575        "uxtb	r4, r4\n\t"
18576#endif
18577#else
18578        "ubfx	r4, r4, #0, #8\n\t"
18579#endif
18580        "eor	r10, r10, r11, ror #24\n\t"
18581#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18582#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18583        "lsl	r11, r6, #8\n\t"
18584        "lsr	r11, r11, #24\n\t"
18585#else
18586        "uxtb	r11, r6, ror #16\n\t"
18587#endif
18588#else
18589        "ubfx	r11, r6, #16, #8\n\t"
18590#endif
18591        "eor	r10, r10, r12, ror #8\n\t"
18592        "lsr	r12, r7, #24\n\t"
18593        "eor	r10, r10, lr, ror #16\n\t"
18594#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18595#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18596        "lsl	lr, r5, #16\n\t"
18597        "lsr	lr, lr, #24\n\t"
18598#else
18599        "uxtb	lr, r5, ror #8\n\t"
18600#endif
18601#else
18602        "ubfx	lr, r5, #8, #8\n\t"
18603#endif
18604        "ldr	r4, [r0, r4, lsl #2]\n\t"
18605        "ldr	r12, [r0, r12, lsl #2]\n\t"
18606        "ldr	r11, [r0, r11, lsl #2]\n\t"
18607        "ldr	lr, [r0, lr, lsl #2]\n\t"
18608        "eor	r12, r12, r4, ror #24\n\t"
18609        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
18610        "eor	r11, r11, lr, ror #8\n\t"
18611        "eor	r11, r11, r12, ror #24\n\t"
18612        /*   XOR in Key Schedule */
18613        "eor	r8, r8, r4\n\t"
18614        "eor	r9, r9, r5\n\t"
18615        "eor	r10, r10, r6\n\t"
18616        "eor	r11, r11, r7\n\t"
18617#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18618#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18619        "lsl	r4, r9, #24\n\t"
18620        "lsr	r4, r4, #24\n\t"
18621#else
18622        "uxtb	r4, r9\n\t"
18623#endif
18624#else
18625        "ubfx	r4, r9, #0, #8\n\t"
18626#endif
18627#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18628#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18629        "lsl	r7, r10, #16\n\t"
18630        "lsr	r7, r7, #24\n\t"
18631#else
18632        "uxtb	r7, r10, ror #8\n\t"
18633#endif
18634#else
18635        "ubfx	r7, r10, #8, #8\n\t"
18636#endif
18637#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18638#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18639        "lsl	r12, r11, #8\n\t"
18640        "lsr	r12, r12, #24\n\t"
18641#else
18642        "uxtb	r12, r11, ror #16\n\t"
18643#endif
18644#else
18645        "ubfx	r12, r11, #16, #8\n\t"
18646#endif
18647        "lsr	lr, r8, #24\n\t"
18648        "ldrb	r4, [r2, r4]\n\t"
18649        "ldrb	r7, [r2, r7]\n\t"
18650        "ldrb	r12, [r2, r12]\n\t"
18651        "ldrb	lr, [r2, lr]\n\t"
18652#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18653#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18654        "lsl	r5, r10, #24\n\t"
18655        "lsr	r5, r5, #24\n\t"
18656#else
18657        "uxtb	r5, r10\n\t"
18658#endif
18659#else
18660        "ubfx	r5, r10, #0, #8\n\t"
18661#endif
18662        "eor	r4, r4, r7, lsl #8\n\t"
18663#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18664#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18665        "lsl	r7, r11, #16\n\t"
18666        "lsr	r7, r7, #24\n\t"
18667#else
18668        "uxtb	r7, r11, ror #8\n\t"
18669#endif
18670#else
18671        "ubfx	r7, r11, #8, #8\n\t"
18672#endif
18673        "eor	r4, r4, r12, lsl #16\n\t"
18674#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18675#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18676        "lsl	r12, r8, #8\n\t"
18677        "lsr	r12, r12, #24\n\t"
18678#else
18679        "uxtb	r12, r8, ror #16\n\t"
18680#endif
18681#else
18682        "ubfx	r12, r8, #16, #8\n\t"
18683#endif
18684        "eor	r4, r4, lr, lsl #24\n\t"
18685        "lsr	lr, r9, #24\n\t"
18686        "ldrb	r7, [r2, r7]\n\t"
18687        "ldrb	lr, [r2, lr]\n\t"
18688        "ldrb	r5, [r2, r5]\n\t"
18689        "ldrb	r12, [r2, r12]\n\t"
18690#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18691#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18692        "lsl	r6, r11, #24\n\t"
18693        "lsr	r6, r6, #24\n\t"
18694#else
18695        "uxtb	r6, r11\n\t"
18696#endif
18697#else
18698        "ubfx	r6, r11, #0, #8\n\t"
18699#endif
18700        "eor	r5, r5, r7, lsl #8\n\t"
18701#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18702#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18703        "lsl	r7, r8, #16\n\t"
18704        "lsr	r7, r7, #24\n\t"
18705#else
18706        "uxtb	r7, r8, ror #8\n\t"
18707#endif
18708#else
18709        "ubfx	r7, r8, #8, #8\n\t"
18710#endif
18711        "eor	r5, r5, r12, lsl #16\n\t"
18712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18713#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18714        "lsl	r12, r9, #8\n\t"
18715        "lsr	r12, r12, #24\n\t"
18716#else
18717        "uxtb	r12, r9, ror #16\n\t"
18718#endif
18719#else
18720        "ubfx	r12, r9, #16, #8\n\t"
18721#endif
18722        "eor	r5, r5, lr, lsl #24\n\t"
18723        "lsr	lr, r10, #24\n\t"
18724        "ldrb	r7, [r2, r7]\n\t"
18725        "ldrb	lr, [r2, lr]\n\t"
18726        "ldrb	r6, [r2, r6]\n\t"
18727        "ldrb	r12, [r2, r12]\n\t"
18728        "lsr	r11, r11, #24\n\t"
18729        "eor	r6, r6, r7, lsl #8\n\t"
18730#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18732        "lsl	r7, r8, #24\n\t"
18733        "lsr	r7, r7, #24\n\t"
18734#else
18735        "uxtb	r7, r8\n\t"
18736#endif
18737#else
18738        "ubfx	r7, r8, #0, #8\n\t"
18739#endif
18740        "eor	r6, r6, r12, lsl #16\n\t"
18741#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18742#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18743        "lsl	r12, r9, #16\n\t"
18744        "lsr	r12, r12, #24\n\t"
18745#else
18746        "uxtb	r12, r9, ror #8\n\t"
18747#endif
18748#else
18749        "ubfx	r12, r9, #8, #8\n\t"
18750#endif
18751        "eor	r6, r6, lr, lsl #24\n\t"
18752#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18753#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18754        "lsl	lr, r10, #8\n\t"
18755        "lsr	lr, lr, #24\n\t"
18756#else
18757        "uxtb	lr, r10, ror #16\n\t"
18758#endif
18759#else
18760        "ubfx	lr, r10, #16, #8\n\t"
18761#endif
18762        "ldrb	r11, [r2, r11]\n\t"
18763        "ldrb	r12, [r2, r12]\n\t"
18764        "ldrb	r7, [r2, r7]\n\t"
18765        "ldrb	lr, [r2, lr]\n\t"
18766        "eor	r12, r12, r11, lsl #16\n\t"
18767        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
18768        "eor	r7, r7, r12, lsl #8\n\t"
18769        "eor	r7, r7, lr, lsl #16\n\t"
18770        /*   XOR in Key Schedule */
18771        "eor	r4, r4, r8\n\t"
18772        "eor	r5, r5, r9\n\t"
18773        "eor	r6, r6, r10\n\t"
18774        "eor	r7, r7, r11\n\t"
18775#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
18776        "pop	{r1, %[ks], r12, lr}\n\t"
18777#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18778        "eor	r8, r4, r4, ror #16\n\t"
18779        "eor	r9, r5, r5, ror #16\n\t"
18780        "eor	r10, r6, r6, ror #16\n\t"
18781        "eor	r11, r7, r7, ror #16\n\t"
18782        "bic	r8, r8, #0xff0000\n\t"
18783        "bic	r9, r9, #0xff0000\n\t"
18784        "bic	r10, r10, #0xff0000\n\t"
18785        "bic	r11, r11, #0xff0000\n\t"
18786        "ror	r4, r4, #8\n\t"
18787        "ror	r5, r5, #8\n\t"
18788        "ror	r6, r6, #8\n\t"
18789        "ror	r7, r7, #8\n\t"
18790        "eor	r4, r4, r8, lsr #8\n\t"
18791        "eor	r5, r5, r9, lsr #8\n\t"
18792        "eor	r6, r6, r10, lsr #8\n\t"
18793        "eor	r7, r7, r11, lsr #8\n\t"
18794#else
18795        "rev	r4, r4\n\t"
18796        "rev	r5, r5\n\t"
18797        "rev	r6, r6\n\t"
18798        "rev	r7, r7\n\t"
18799#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
18800        "str	r4, [%[out]]\n\t"
18801        "str	r5, [%[out], #4]\n\t"
18802        "str	r6, [%[out], #8]\n\t"
18803        "str	r7, [%[out], #12]\n\t"
18804        "subs	r12, r12, #16\n\t"
18805        "add	lr, lr, #16\n\t"
18806        "add	%[out], %[out], #16\n\t"
18807        "bne	L_AES_ECB_decrypt_loop_block_192_%=\n\t"
18808        "b	L_AES_ECB_decrypt_end_%=\n\t"
18809        "\n"
18810    "L_AES_ECB_decrypt_start_block_128_%=:\n\t"
18811        "\n"
18812    "L_AES_ECB_decrypt_loop_block_128_%=:\n\t"
18813        "ldr	r4, [lr]\n\t"
18814        "ldr	r5, [lr, #4]\n\t"
18815        "ldr	r6, [lr, #8]\n\t"
18816        "ldr	r7, [lr, #12]\n\t"
18817#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18818        "eor	r8, r4, r4, ror #16\n\t"
18819        "eor	r9, r5, r5, ror #16\n\t"
18820        "eor	r10, r6, r6, ror #16\n\t"
18821        "eor	r11, r7, r7, ror #16\n\t"
18822        "bic	r8, r8, #0xff0000\n\t"
18823        "bic	r9, r9, #0xff0000\n\t"
18824        "bic	r10, r10, #0xff0000\n\t"
18825        "bic	r11, r11, #0xff0000\n\t"
18826        "ror	r4, r4, #8\n\t"
18827        "ror	r5, r5, #8\n\t"
18828        "ror	r6, r6, #8\n\t"
18829        "ror	r7, r7, #8\n\t"
18830        "eor	r4, r4, r8, lsr #8\n\t"
18831        "eor	r5, r5, r9, lsr #8\n\t"
18832        "eor	r6, r6, r10, lsr #8\n\t"
18833        "eor	r7, r7, r11, lsr #8\n\t"
18834#else
18835        "rev	r4, r4\n\t"
18836        "rev	r5, r5\n\t"
18837        "rev	r6, r6\n\t"
18838        "rev	r7, r7\n\t"
18839#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
18840        "push	{r1, %[ks], r12, lr}\n\t"
18841        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
18842        /* Round: 0 - XOR in key schedule */
18843        "eor	r4, r4, r8\n\t"
18844        "eor	r5, r5, r9\n\t"
18845        "eor	r6, r6, r10\n\t"
18846        "eor	r7, r7, r11\n\t"
18847        "mov	r1, #4\n\t"
18848#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
18849        "bl	AES_decrypt_block\n\t"
18850#else
18851        "\n"
18852    "L_AES_ECB_decrypt_block_nr_128_%=:\n\t"
18853#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18854#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18855        "lsl	r8, r7, #8\n\t"
18856        "lsr	r8, r8, #24\n\t"
18857#else
18858        "uxtb	r8, r7, ror #16\n\t"
18859#endif
18860#else
18861        "ubfx	r8, r7, #16, #8\n\t"
18862#endif
18863        "lsr	r11, r4, #24\n\t"
18864#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18865#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18866        "lsl	r12, r6, #16\n\t"
18867        "lsr	r12, r12, #24\n\t"
18868#else
18869        "uxtb	r12, r6, ror #8\n\t"
18870#endif
18871#else
18872        "ubfx	r12, r6, #8, #8\n\t"
18873#endif
18874#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18875#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18876        "lsl	lr, r5, #24\n\t"
18877        "lsr	lr, lr, #24\n\t"
18878#else
18879        "uxtb	lr, r5\n\t"
18880#endif
18881#else
18882        "ubfx	lr, r5, #0, #8\n\t"
18883#endif
18884        "ldr	r8, [r0, r8, lsl #2]\n\t"
18885        "ldr	r11, [r0, r11, lsl #2]\n\t"
18886        "ldr	r12, [r0, r12, lsl #2]\n\t"
18887        "ldr	lr, [r0, lr, lsl #2]\n\t"
18888#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18889#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18890        "lsl	r9, r4, #8\n\t"
18891        "lsr	r9, r9, #24\n\t"
18892#else
18893        "uxtb	r9, r4, ror #16\n\t"
18894#endif
18895#else
18896        "ubfx	r9, r4, #16, #8\n\t"
18897#endif
18898        "eor	r8, r8, r11, ror #24\n\t"
18899        "lsr	r11, r5, #24\n\t"
18900        "eor	r8, r8, r12, ror #8\n\t"
18901#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18902#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18903        "lsl	r12, r7, #16\n\t"
18904        "lsr	r12, r12, #24\n\t"
18905#else
18906        "uxtb	r12, r7, ror #8\n\t"
18907#endif
18908#else
18909        "ubfx	r12, r7, #8, #8\n\t"
18910#endif
18911        "eor	r8, r8, lr, ror #16\n\t"
18912#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18913#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18914        "lsl	lr, r6, #24\n\t"
18915        "lsr	lr, lr, #24\n\t"
18916#else
18917        "uxtb	lr, r6\n\t"
18918#endif
18919#else
18920        "ubfx	lr, r6, #0, #8\n\t"
18921#endif
18922        "ldr	r9, [r0, r9, lsl #2]\n\t"
18923        "ldr	r11, [r0, r11, lsl #2]\n\t"
18924        "ldr	r12, [r0, r12, lsl #2]\n\t"
18925        "ldr	lr, [r0, lr, lsl #2]\n\t"
18926#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18927#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18928        "lsl	r10, r5, #8\n\t"
18929        "lsr	r10, r10, #24\n\t"
18930#else
18931        "uxtb	r10, r5, ror #16\n\t"
18932#endif
18933#else
18934        "ubfx	r10, r5, #16, #8\n\t"
18935#endif
18936        "eor	r9, r9, r11, ror #24\n\t"
18937        "lsr	r11, r6, #24\n\t"
18938        "eor	r9, r9, r12, ror #8\n\t"
18939#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18940#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18941        "lsl	r12, r4, #16\n\t"
18942        "lsr	r12, r12, #24\n\t"
18943#else
18944        "uxtb	r12, r4, ror #8\n\t"
18945#endif
18946#else
18947        "ubfx	r12, r4, #8, #8\n\t"
18948#endif
18949        "eor	r9, r9, lr, ror #16\n\t"
18950#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18951#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18952        "lsl	lr, r7, #24\n\t"
18953        "lsr	lr, lr, #24\n\t"
18954#else
18955        "uxtb	lr, r7\n\t"
18956#endif
18957#else
18958        "ubfx	lr, r7, #0, #8\n\t"
18959#endif
18960        "ldr	r10, [r0, r10, lsl #2]\n\t"
18961        "ldr	r11, [r0, r11, lsl #2]\n\t"
18962        "ldr	r12, [r0, r12, lsl #2]\n\t"
18963        "ldr	lr, [r0, lr, lsl #2]\n\t"
18964#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18965#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18966        "lsl	r4, r4, #24\n\t"
18967        "lsr	r4, r4, #24\n\t"
18968#else
18969        "uxtb	r4, r4\n\t"
18970#endif
18971#else
18972        "ubfx	r4, r4, #0, #8\n\t"
18973#endif
18974        "eor	r10, r10, r11, ror #24\n\t"
18975#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18976#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18977        "lsl	r11, r6, #8\n\t"
18978        "lsr	r11, r11, #24\n\t"
18979#else
18980        "uxtb	r11, r6, ror #16\n\t"
18981#endif
18982#else
18983        "ubfx	r11, r6, #16, #8\n\t"
18984#endif
18985        "eor	r10, r10, r12, ror #8\n\t"
18986        "lsr	r12, r7, #24\n\t"
18987        "eor	r10, r10, lr, ror #16\n\t"
18988#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18989#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18990        "lsl	lr, r5, #16\n\t"
18991        "lsr	lr, lr, #24\n\t"
18992#else
18993        "uxtb	lr, r5, ror #8\n\t"
18994#endif
18995#else
18996        "ubfx	lr, r5, #8, #8\n\t"
18997#endif
18998        "ldr	r4, [r0, r4, lsl #2]\n\t"
18999        "ldr	r12, [r0, r12, lsl #2]\n\t"
19000        "ldr	r11, [r0, r11, lsl #2]\n\t"
19001        "ldr	lr, [r0, lr, lsl #2]\n\t"
19002        "eor	r12, r12, r4, ror #24\n\t"
19003        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
19004        "eor	r11, r11, lr, ror #8\n\t"
19005        "eor	r11, r11, r12, ror #24\n\t"
19006        /*   XOR in Key Schedule */
19007        "eor	r8, r8, r4\n\t"
19008        "eor	r9, r9, r5\n\t"
19009        "eor	r10, r10, r6\n\t"
19010        "eor	r11, r11, r7\n\t"
19011#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19012#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19013        "lsl	r4, r11, #8\n\t"
19014        "lsr	r4, r4, #24\n\t"
19015#else
19016        "uxtb	r4, r11, ror #16\n\t"
19017#endif
19018#else
19019        "ubfx	r4, r11, #16, #8\n\t"
19020#endif
19021        "lsr	r7, r8, #24\n\t"
19022#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19023#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19024        "lsl	r12, r10, #16\n\t"
19025        "lsr	r12, r12, #24\n\t"
19026#else
19027        "uxtb	r12, r10, ror #8\n\t"
19028#endif
19029#else
19030        "ubfx	r12, r10, #8, #8\n\t"
19031#endif
19032#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19033#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19034        "lsl	lr, r9, #24\n\t"
19035        "lsr	lr, lr, #24\n\t"
19036#else
19037        "uxtb	lr, r9\n\t"
19038#endif
19039#else
19040        "ubfx	lr, r9, #0, #8\n\t"
19041#endif
19042        "ldr	r4, [r0, r4, lsl #2]\n\t"
19043        "ldr	r7, [r0, r7, lsl #2]\n\t"
19044        "ldr	r12, [r0, r12, lsl #2]\n\t"
19045        "ldr	lr, [r0, lr, lsl #2]\n\t"
19046#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19047#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19048        "lsl	r5, r8, #8\n\t"
19049        "lsr	r5, r5, #24\n\t"
19050#else
19051        "uxtb	r5, r8, ror #16\n\t"
19052#endif
19053#else
19054        "ubfx	r5, r8, #16, #8\n\t"
19055#endif
19056        "eor	r4, r4, r7, ror #24\n\t"
19057        "lsr	r7, r9, #24\n\t"
19058        "eor	r4, r4, r12, ror #8\n\t"
19059#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19060#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19061        "lsl	r12, r11, #16\n\t"
19062        "lsr	r12, r12, #24\n\t"
19063#else
19064        "uxtb	r12, r11, ror #8\n\t"
19065#endif
19066#else
19067        "ubfx	r12, r11, #8, #8\n\t"
19068#endif
19069        "eor	r4, r4, lr, ror #16\n\t"
19070#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19071#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19072        "lsl	lr, r10, #24\n\t"
19073        "lsr	lr, lr, #24\n\t"
19074#else
19075        "uxtb	lr, r10\n\t"
19076#endif
19077#else
19078        "ubfx	lr, r10, #0, #8\n\t"
19079#endif
19080        "ldr	r5, [r0, r5, lsl #2]\n\t"
19081        "ldr	r7, [r0, r7, lsl #2]\n\t"
19082        "ldr	r12, [r0, r12, lsl #2]\n\t"
19083        "ldr	lr, [r0, lr, lsl #2]\n\t"
19084#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19085#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19086        "lsl	r6, r9, #8\n\t"
19087        "lsr	r6, r6, #24\n\t"
19088#else
19089        "uxtb	r6, r9, ror #16\n\t"
19090#endif
19091#else
19092        "ubfx	r6, r9, #16, #8\n\t"
19093#endif
19094        "eor	r5, r5, r7, ror #24\n\t"
19095        "lsr	r7, r10, #24\n\t"
19096        "eor	r5, r5, r12, ror #8\n\t"
19097#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19098#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19099        "lsl	r12, r8, #16\n\t"
19100        "lsr	r12, r12, #24\n\t"
19101#else
19102        "uxtb	r12, r8, ror #8\n\t"
19103#endif
19104#else
19105        "ubfx	r12, r8, #8, #8\n\t"
19106#endif
19107        "eor	r5, r5, lr, ror #16\n\t"
19108#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19109#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19110        "lsl	lr, r11, #24\n\t"
19111        "lsr	lr, lr, #24\n\t"
19112#else
19113        "uxtb	lr, r11\n\t"
19114#endif
19115#else
19116        "ubfx	lr, r11, #0, #8\n\t"
19117#endif
19118        "ldr	r6, [r0, r6, lsl #2]\n\t"
19119        "ldr	r7, [r0, r7, lsl #2]\n\t"
19120        "ldr	r12, [r0, r12, lsl #2]\n\t"
19121        "ldr	lr, [r0, lr, lsl #2]\n\t"
19122#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19123#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19124        "lsl	r8, r8, #24\n\t"
19125        "lsr	r8, r8, #24\n\t"
19126#else
19127        "uxtb	r8, r8\n\t"
19128#endif
19129#else
19130        "ubfx	r8, r8, #0, #8\n\t"
19131#endif
19132        "eor	r6, r6, r7, ror #24\n\t"
19133#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19134#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19135        "lsl	r7, r10, #8\n\t"
19136        "lsr	r7, r7, #24\n\t"
19137#else
19138        "uxtb	r7, r10, ror #16\n\t"
19139#endif
19140#else
19141        "ubfx	r7, r10, #16, #8\n\t"
19142#endif
19143        "eor	r6, r6, r12, ror #8\n\t"
19144        "lsr	r12, r11, #24\n\t"
19145        "eor	r6, r6, lr, ror #16\n\t"
19146#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19147#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19148        "lsl	lr, r9, #16\n\t"
19149        "lsr	lr, lr, #24\n\t"
19150#else
19151        "uxtb	lr, r9, ror #8\n\t"
19152#endif
19153#else
19154        "ubfx	lr, r9, #8, #8\n\t"
19155#endif
19156        "ldr	r8, [r0, r8, lsl #2]\n\t"
19157        "ldr	r12, [r0, r12, lsl #2]\n\t"
19158        "ldr	r7, [r0, r7, lsl #2]\n\t"
19159        "ldr	lr, [r0, lr, lsl #2]\n\t"
19160        "eor	r12, r12, r8, ror #24\n\t"
19161        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
19162        "eor	r7, r7, lr, ror #8\n\t"
19163        "eor	r7, r7, r12, ror #24\n\t"
19164        /*   XOR in Key Schedule */
19165        "eor	r4, r4, r8\n\t"
19166        "eor	r5, r5, r9\n\t"
19167        "eor	r6, r6, r10\n\t"
19168        "eor	r7, r7, r11\n\t"
19169        "subs	r1, r1, #1\n\t"
19170        "bne	L_AES_ECB_decrypt_block_nr_128_%=\n\t"
19171#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19172#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19173        "lsl	r8, r7, #8\n\t"
19174        "lsr	r8, r8, #24\n\t"
19175#else
19176        "uxtb	r8, r7, ror #16\n\t"
19177#endif
19178#else
19179        "ubfx	r8, r7, #16, #8\n\t"
19180#endif
19181        "lsr	r11, r4, #24\n\t"
19182#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19183#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19184        "lsl	r12, r6, #16\n\t"
19185        "lsr	r12, r12, #24\n\t"
19186#else
19187        "uxtb	r12, r6, ror #8\n\t"
19188#endif
19189#else
19190        "ubfx	r12, r6, #8, #8\n\t"
19191#endif
19192#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19193#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19194        "lsl	lr, r5, #24\n\t"
19195        "lsr	lr, lr, #24\n\t"
19196#else
19197        "uxtb	lr, r5\n\t"
19198#endif
19199#else
19200        "ubfx	lr, r5, #0, #8\n\t"
19201#endif
19202        "ldr	r8, [r0, r8, lsl #2]\n\t"
19203        "ldr	r11, [r0, r11, lsl #2]\n\t"
19204        "ldr	r12, [r0, r12, lsl #2]\n\t"
19205        "ldr	lr, [r0, lr, lsl #2]\n\t"
19206#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19207#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19208        "lsl	r9, r4, #8\n\t"
19209        "lsr	r9, r9, #24\n\t"
19210#else
19211        "uxtb	r9, r4, ror #16\n\t"
19212#endif
19213#else
19214        "ubfx	r9, r4, #16, #8\n\t"
19215#endif
19216        "eor	r8, r8, r11, ror #24\n\t"
19217        "lsr	r11, r5, #24\n\t"
19218        "eor	r8, r8, r12, ror #8\n\t"
19219#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19220#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19221        "lsl	r12, r7, #16\n\t"
19222        "lsr	r12, r12, #24\n\t"
19223#else
19224        "uxtb	r12, r7, ror #8\n\t"
19225#endif
19226#else
19227        "ubfx	r12, r7, #8, #8\n\t"
19228#endif
19229        "eor	r8, r8, lr, ror #16\n\t"
19230#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19231#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19232        "lsl	lr, r6, #24\n\t"
19233        "lsr	lr, lr, #24\n\t"
19234#else
19235        "uxtb	lr, r6\n\t"
19236#endif
19237#else
19238        "ubfx	lr, r6, #0, #8\n\t"
19239#endif
19240        "ldr	r9, [r0, r9, lsl #2]\n\t"
19241        "ldr	r11, [r0, r11, lsl #2]\n\t"
19242        "ldr	r12, [r0, r12, lsl #2]\n\t"
19243        "ldr	lr, [r0, lr, lsl #2]\n\t"
19244#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19245#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19246        "lsl	r10, r5, #8\n\t"
19247        "lsr	r10, r10, #24\n\t"
19248#else
19249        "uxtb	r10, r5, ror #16\n\t"
19250#endif
19251#else
19252        "ubfx	r10, r5, #16, #8\n\t"
19253#endif
19254        "eor	r9, r9, r11, ror #24\n\t"
19255        "lsr	r11, r6, #24\n\t"
19256        "eor	r9, r9, r12, ror #8\n\t"
19257#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19258#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19259        "lsl	r12, r4, #16\n\t"
19260        "lsr	r12, r12, #24\n\t"
19261#else
19262        "uxtb	r12, r4, ror #8\n\t"
19263#endif
19264#else
19265        "ubfx	r12, r4, #8, #8\n\t"
19266#endif
19267        "eor	r9, r9, lr, ror #16\n\t"
19268#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19269#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19270        "lsl	lr, r7, #24\n\t"
19271        "lsr	lr, lr, #24\n\t"
19272#else
19273        "uxtb	lr, r7\n\t"
19274#endif
19275#else
19276        "ubfx	lr, r7, #0, #8\n\t"
19277#endif
19278        "ldr	r10, [r0, r10, lsl #2]\n\t"
19279        "ldr	r11, [r0, r11, lsl #2]\n\t"
19280        "ldr	r12, [r0, r12, lsl #2]\n\t"
19281        "ldr	lr, [r0, lr, lsl #2]\n\t"
19282#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19283#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19284        "lsl	r4, r4, #24\n\t"
19285        "lsr	r4, r4, #24\n\t"
19286#else
19287        "uxtb	r4, r4\n\t"
19288#endif
19289#else
19290        "ubfx	r4, r4, #0, #8\n\t"
19291#endif
19292        "eor	r10, r10, r11, ror #24\n\t"
19293#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19294#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19295        "lsl	r11, r6, #8\n\t"
19296        "lsr	r11, r11, #24\n\t"
19297#else
19298        "uxtb	r11, r6, ror #16\n\t"
19299#endif
19300#else
19301        "ubfx	r11, r6, #16, #8\n\t"
19302#endif
19303        "eor	r10, r10, r12, ror #8\n\t"
19304        "lsr	r12, r7, #24\n\t"
19305        "eor	r10, r10, lr, ror #16\n\t"
19306#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19307#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19308        "lsl	lr, r5, #16\n\t"
19309        "lsr	lr, lr, #24\n\t"
19310#else
19311        "uxtb	lr, r5, ror #8\n\t"
19312#endif
19313#else
19314        "ubfx	lr, r5, #8, #8\n\t"
19315#endif
19316        "ldr	r4, [r0, r4, lsl #2]\n\t"
19317        "ldr	r12, [r0, r12, lsl #2]\n\t"
19318        "ldr	r11, [r0, r11, lsl #2]\n\t"
19319        "ldr	lr, [r0, lr, lsl #2]\n\t"
19320        "eor	r12, r12, r4, ror #24\n\t"
19321        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
19322        "eor	r11, r11, lr, ror #8\n\t"
19323        "eor	r11, r11, r12, ror #24\n\t"
19324        /*   XOR in Key Schedule */
19325        "eor	r8, r8, r4\n\t"
19326        "eor	r9, r9, r5\n\t"
19327        "eor	r10, r10, r6\n\t"
19328        "eor	r11, r11, r7\n\t"
19329#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19330#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19331        "lsl	r4, r9, #24\n\t"
19332        "lsr	r4, r4, #24\n\t"
19333#else
19334        "uxtb	r4, r9\n\t"
19335#endif
19336#else
19337        "ubfx	r4, r9, #0, #8\n\t"
19338#endif
19339#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19340#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19341        "lsl	r7, r10, #16\n\t"
19342        "lsr	r7, r7, #24\n\t"
19343#else
19344        "uxtb	r7, r10, ror #8\n\t"
19345#endif
19346#else
19347        "ubfx	r7, r10, #8, #8\n\t"
19348#endif
19349#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19350#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19351        "lsl	r12, r11, #8\n\t"
19352        "lsr	r12, r12, #24\n\t"
19353#else
19354        "uxtb	r12, r11, ror #16\n\t"
19355#endif
19356#else
19357        "ubfx	r12, r11, #16, #8\n\t"
19358#endif
19359        "lsr	lr, r8, #24\n\t"
19360        "ldrb	r4, [r2, r4]\n\t"
19361        "ldrb	r7, [r2, r7]\n\t"
19362        "ldrb	r12, [r2, r12]\n\t"
19363        "ldrb	lr, [r2, lr]\n\t"
19364#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19365#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19366        "lsl	r5, r10, #24\n\t"
19367        "lsr	r5, r5, #24\n\t"
19368#else
19369        "uxtb	r5, r10\n\t"
19370#endif
19371#else
19372        "ubfx	r5, r10, #0, #8\n\t"
19373#endif
19374        "eor	r4, r4, r7, lsl #8\n\t"
19375#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19376#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19377        "lsl	r7, r11, #16\n\t"
19378        "lsr	r7, r7, #24\n\t"
19379#else
19380        "uxtb	r7, r11, ror #8\n\t"
19381#endif
19382#else
19383        "ubfx	r7, r11, #8, #8\n\t"
19384#endif
19385        "eor	r4, r4, r12, lsl #16\n\t"
19386#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19387#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19388        "lsl	r12, r8, #8\n\t"
19389        "lsr	r12, r12, #24\n\t"
19390#else
19391        "uxtb	r12, r8, ror #16\n\t"
19392#endif
19393#else
19394        "ubfx	r12, r8, #16, #8\n\t"
19395#endif
19396        "eor	r4, r4, lr, lsl #24\n\t"
19397        "lsr	lr, r9, #24\n\t"
19398        "ldrb	r7, [r2, r7]\n\t"
19399        "ldrb	lr, [r2, lr]\n\t"
19400        "ldrb	r5, [r2, r5]\n\t"
19401        "ldrb	r12, [r2, r12]\n\t"
19402#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19403#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19404        "lsl	r6, r11, #24\n\t"
19405        "lsr	r6, r6, #24\n\t"
19406#else
19407        "uxtb	r6, r11\n\t"
19408#endif
19409#else
19410        "ubfx	r6, r11, #0, #8\n\t"
19411#endif
19412        "eor	r5, r5, r7, lsl #8\n\t"
19413#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19414#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19415        "lsl	r7, r8, #16\n\t"
19416        "lsr	r7, r7, #24\n\t"
19417#else
19418        "uxtb	r7, r8, ror #8\n\t"
19419#endif
19420#else
19421        "ubfx	r7, r8, #8, #8\n\t"
19422#endif
19423        "eor	r5, r5, r12, lsl #16\n\t"
19424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19425#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19426        "lsl	r12, r9, #8\n\t"
19427        "lsr	r12, r12, #24\n\t"
19428#else
19429        "uxtb	r12, r9, ror #16\n\t"
19430#endif
19431#else
19432        "ubfx	r12, r9, #16, #8\n\t"
19433#endif
19434        "eor	r5, r5, lr, lsl #24\n\t"
19435        "lsr	lr, r10, #24\n\t"
19436        "ldrb	r7, [r2, r7]\n\t"
19437        "ldrb	lr, [r2, lr]\n\t"
19438        "ldrb	r6, [r2, r6]\n\t"
19439        "ldrb	r12, [r2, r12]\n\t"
19440        "lsr	r11, r11, #24\n\t"
19441        "eor	r6, r6, r7, lsl #8\n\t"
19442#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19443#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19444        "lsl	r7, r8, #24\n\t"
19445        "lsr	r7, r7, #24\n\t"
19446#else
19447        "uxtb	r7, r8\n\t"
19448#endif
19449#else
19450        "ubfx	r7, r8, #0, #8\n\t"
19451#endif
19452        "eor	r6, r6, r12, lsl #16\n\t"
19453#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19454#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19455        "lsl	r12, r9, #16\n\t"
19456        "lsr	r12, r12, #24\n\t"
19457#else
19458        "uxtb	r12, r9, ror #8\n\t"
19459#endif
19460#else
19461        "ubfx	r12, r9, #8, #8\n\t"
19462#endif
19463        "eor	r6, r6, lr, lsl #24\n\t"
19464#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19465#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19466        "lsl	lr, r10, #8\n\t"
19467        "lsr	lr, lr, #24\n\t"
19468#else
19469        "uxtb	lr, r10, ror #16\n\t"
19470#endif
19471#else
19472        "ubfx	lr, r10, #16, #8\n\t"
19473#endif
19474        "ldrb	r11, [r2, r11]\n\t"
19475        "ldrb	r12, [r2, r12]\n\t"
19476        "ldrb	r7, [r2, r7]\n\t"
19477        "ldrb	lr, [r2, lr]\n\t"
19478        "eor	r12, r12, r11, lsl #16\n\t"
19479        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
19480        "eor	r7, r7, r12, lsl #8\n\t"
19481        "eor	r7, r7, lr, lsl #16\n\t"
19482        /*   XOR in Key Schedule */
19483        "eor	r4, r4, r8\n\t"
19484        "eor	r5, r5, r9\n\t"
19485        "eor	r6, r6, r10\n\t"
19486        "eor	r7, r7, r11\n\t"
19487#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
19488        "pop	{r1, %[ks], r12, lr}\n\t"
19489#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19490        "eor	r8, r4, r4, ror #16\n\t"
19491        "eor	r9, r5, r5, ror #16\n\t"
19492        "eor	r10, r6, r6, ror #16\n\t"
19493        "eor	r11, r7, r7, ror #16\n\t"
19494        "bic	r8, r8, #0xff0000\n\t"
19495        "bic	r9, r9, #0xff0000\n\t"
19496        "bic	r10, r10, #0xff0000\n\t"
19497        "bic	r11, r11, #0xff0000\n\t"
19498        "ror	r4, r4, #8\n\t"
19499        "ror	r5, r5, #8\n\t"
19500        "ror	r6, r6, #8\n\t"
19501        "ror	r7, r7, #8\n\t"
19502        "eor	r4, r4, r8, lsr #8\n\t"
19503        "eor	r5, r5, r9, lsr #8\n\t"
19504        "eor	r6, r6, r10, lsr #8\n\t"
19505        "eor	r7, r7, r11, lsr #8\n\t"
19506#else
19507        "rev	r4, r4\n\t"
19508        "rev	r5, r5\n\t"
19509        "rev	r6, r6\n\t"
19510        "rev	r7, r7\n\t"
19511#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
19512        "str	r4, [%[out]]\n\t"
19513        "str	r5, [%[out], #4]\n\t"
19514        "str	r6, [%[out], #8]\n\t"
19515        "str	r7, [%[out], #12]\n\t"
19516        "subs	r12, r12, #16\n\t"
19517        "add	lr, lr, #16\n\t"
19518        "add	%[out], %[out], #16\n\t"
19519        "bne	L_AES_ECB_decrypt_loop_block_128_%=\n\t"
19520        "\n"
19521    "L_AES_ECB_decrypt_end_%=:\n\t"
19522        "pop	{%[nr], %[L_AES_ARM32_td_ecb]}\n\t"
19523        "pop	{%[L_AES_ARM32_ecb_td4]}\n\t"
19524#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
19525        : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
19526          [nr] "+r" (nr), [L_AES_ARM32_td_ecb] "+r" (L_AES_ARM32_td_ecb_c),
19527          [L_AES_ARM32_ecb_td4] "+r" (L_AES_ARM32_ecb_td4_c)
19528        :
19529#else
19530        :
19531        : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
19532          [nr] "r" (nr), [L_AES_ARM32_td_ecb] "r" (L_AES_ARM32_td_ecb_c),
19533          [L_AES_ARM32_ecb_td4] "r" (L_AES_ARM32_ecb_td4_c)
19534#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
19535        : "memory", "cc", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
19536    );
19537}
19538
19539#endif /* WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER || defined(HAVE_AES_ECB) */
19540#ifdef HAVE_AES_CBC
19541XALIGNED(4) static const word8 L_AES_ARM32_cbc_td4[] = {
19542    0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38,
19543    0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
19544    0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
19545    0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
19546    0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d,
19547    0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
19548    0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2,
19549    0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
19550    0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
19551    0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
19552    0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda,
19553    0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
19554    0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a,
19555    0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
19556    0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
19557    0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
19558    0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea,
19559    0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
19560    0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85,
19561    0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
19562    0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
19563    0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
19564    0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20,
19565    0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
19566    0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31,
19567    0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
19568    0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
19569    0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
19570    0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0,
19571    0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
19572    0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26,
19573    0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d,
19574};
19575
19576void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p,
19577    unsigned long len_p, const unsigned char* ks_p, int nr_p,
19578    unsigned char* iv_p);
19579#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
19580WC_OMIT_FRAME_POINTER void AES_CBC_decrypt(const unsigned char* in_p,
19581    unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
19582    int nr_p, unsigned char* iv_p)
19583#else
19584WC_OMIT_FRAME_POINTER void AES_CBC_decrypt(const unsigned char* in,
19585    unsigned char* out, unsigned long len, const unsigned char* ks, int nr,
19586    unsigned char* iv)
19587#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
19588{
19589#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
19590    register const unsigned char* in __asm__ ("r0") =
19591        (const unsigned char*)in_p;
19592    register unsigned char* out __asm__ ("r1") = (unsigned char*)out_p;
19593    register unsigned long len __asm__ ("r2") = (unsigned long)len_p;
19594    register const unsigned char* ks __asm__ ("r3") =
19595        (const unsigned char*)ks_p;
19596    register int nr __asm__ ("r12") = (int)nr_p;
19597    register unsigned char* iv __asm__ ("lr") = (unsigned char*)iv_p;
19598    register word32* L_AES_ARM32_td_ecb_c __asm__ ("r4") =
19599        (word32*)L_AES_ARM32_td_ecb;
19600    register word8* L_AES_ARM32_cbc_td4_c __asm__ ("r5") =
19601        (word8*)&L_AES_ARM32_cbc_td4;
19602#else
19603    register word32* L_AES_ARM32_td_ecb_c = (word32*)L_AES_ARM32_td_ecb;
19604    register word8* L_AES_ARM32_cbc_td4_c = (word8*)&L_AES_ARM32_cbc_td4;
19605#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
19606
19607    __asm__ __volatile__ (
19608        "push	{%[L_AES_ARM32_td_ecb], %[L_AES_ARM32_cbc_td4]}\n\t"
19609        "push	{%[nr], %[iv]}\n\t"
19610        "mov	lr, %[in]\n\t"
19611        "ldr	r0, [sp, #8]\n\t"
19612        "mov	r12, %[len]\n\t"
19613        "mov	r2, %[L_AES_ARM32_cbc_td4]\n\t"
19614        "ldr	r8, [sp]\n\t"
19615        "ldr	r4, [sp, #4]\n\t"
19616        "push	{%[ks]-r4}\n\t"
19617        "cmp	r8, #10\n\t"
19618        "beq	L_AES_CBC_decrypt_loop_block_128_%=\n\t"
19619        "cmp	r8, #12\n\t"
19620        "beq	L_AES_CBC_decrypt_loop_block_192_%=\n\t"
19621        "\n"
19622    "L_AES_CBC_decrypt_loop_block_256_%=:\n\t"
19623        "push	{r1, r12, lr}\n\t"
19624        "ldr	r4, [lr]\n\t"
19625        "ldr	r5, [lr, #4]\n\t"
19626        "ldr	r6, [lr, #8]\n\t"
19627        "ldr	r7, [lr, #12]\n\t"
19628        "ldr	lr, [sp, #16]\n\t"
19629#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19630        "str	r4, [lr, #16]\n\t"
19631        "str	r5, [lr, #20]\n\t"
19632#else
19633        "strd	r4, r5, [lr, #16]\n\t"
19634#endif
19635#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19636        "str	r6, [lr, #24]\n\t"
19637        "str	r7, [lr, #28]\n\t"
19638#else
19639        "strd	r6, r7, [lr, #24]\n\t"
19640#endif
19641#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19642        "eor	r8, r4, r4, ror #16\n\t"
19643        "eor	r9, r5, r5, ror #16\n\t"
19644        "eor	r10, r6, r6, ror #16\n\t"
19645        "eor	r11, r7, r7, ror #16\n\t"
19646        "bic	r8, r8, #0xff0000\n\t"
19647        "bic	r9, r9, #0xff0000\n\t"
19648        "bic	r10, r10, #0xff0000\n\t"
19649        "bic	r11, r11, #0xff0000\n\t"
19650        "ror	r4, r4, #8\n\t"
19651        "ror	r5, r5, #8\n\t"
19652        "ror	r6, r6, #8\n\t"
19653        "ror	r7, r7, #8\n\t"
19654        "eor	r4, r4, r8, lsr #8\n\t"
19655        "eor	r5, r5, r9, lsr #8\n\t"
19656        "eor	r6, r6, r10, lsr #8\n\t"
19657        "eor	r7, r7, r11, lsr #8\n\t"
19658#else
19659        "rev	r4, r4\n\t"
19660        "rev	r5, r5\n\t"
19661        "rev	r6, r6\n\t"
19662        "rev	r7, r7\n\t"
19663#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
19664        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
19665        /* Round: 0 - XOR in key schedule */
19666        "eor	r4, r4, r8\n\t"
19667        "eor	r5, r5, r9\n\t"
19668        "eor	r6, r6, r10\n\t"
19669        "eor	r7, r7, r11\n\t"
19670        "mov	r1, #6\n\t"
19671#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
19672        "bl	AES_decrypt_block\n\t"
19673#else
19674        "\n"
19675    "L_AES_CBC_decrypt_block_nr_256_odd_%=:\n\t"
19676#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19677#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19678        "lsl	r8, r7, #8\n\t"
19679        "lsr	r8, r8, #24\n\t"
19680#else
19681        "uxtb	r8, r7, ror #16\n\t"
19682#endif
19683#else
19684        "ubfx	r8, r7, #16, #8\n\t"
19685#endif
19686        "lsr	r11, r4, #24\n\t"
19687#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19688#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19689        "lsl	r12, r6, #16\n\t"
19690        "lsr	r12, r12, #24\n\t"
19691#else
19692        "uxtb	r12, r6, ror #8\n\t"
19693#endif
19694#else
19695        "ubfx	r12, r6, #8, #8\n\t"
19696#endif
19697#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19698#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19699        "lsl	lr, r5, #24\n\t"
19700        "lsr	lr, lr, #24\n\t"
19701#else
19702        "uxtb	lr, r5\n\t"
19703#endif
19704#else
19705        "ubfx	lr, r5, #0, #8\n\t"
19706#endif
19707        "ldr	r8, [r0, r8, lsl #2]\n\t"
19708        "ldr	r11, [r0, r11, lsl #2]\n\t"
19709        "ldr	r12, [r0, r12, lsl #2]\n\t"
19710        "ldr	lr, [r0, lr, lsl #2]\n\t"
19711#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19713        "lsl	r9, r4, #8\n\t"
19714        "lsr	r9, r9, #24\n\t"
19715#else
19716        "uxtb	r9, r4, ror #16\n\t"
19717#endif
19718#else
19719        "ubfx	r9, r4, #16, #8\n\t"
19720#endif
19721        "eor	r8, r8, r11, ror #24\n\t"
19722        "lsr	r11, r5, #24\n\t"
19723        "eor	r8, r8, r12, ror #8\n\t"
19724#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19725#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19726        "lsl	r12, r7, #16\n\t"
19727        "lsr	r12, r12, #24\n\t"
19728#else
19729        "uxtb	r12, r7, ror #8\n\t"
19730#endif
19731#else
19732        "ubfx	r12, r7, #8, #8\n\t"
19733#endif
19734        "eor	r8, r8, lr, ror #16\n\t"
19735#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19736#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19737        "lsl	lr, r6, #24\n\t"
19738        "lsr	lr, lr, #24\n\t"
19739#else
19740        "uxtb	lr, r6\n\t"
19741#endif
19742#else
19743        "ubfx	lr, r6, #0, #8\n\t"
19744#endif
19745        "ldr	r9, [r0, r9, lsl #2]\n\t"
19746        "ldr	r11, [r0, r11, lsl #2]\n\t"
19747        "ldr	r12, [r0, r12, lsl #2]\n\t"
19748        "ldr	lr, [r0, lr, lsl #2]\n\t"
19749#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19750#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19751        "lsl	r10, r5, #8\n\t"
19752        "lsr	r10, r10, #24\n\t"
19753#else
19754        "uxtb	r10, r5, ror #16\n\t"
19755#endif
19756#else
19757        "ubfx	r10, r5, #16, #8\n\t"
19758#endif
19759        "eor	r9, r9, r11, ror #24\n\t"
19760        "lsr	r11, r6, #24\n\t"
19761        "eor	r9, r9, r12, ror #8\n\t"
19762#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19763#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19764        "lsl	r12, r4, #16\n\t"
19765        "lsr	r12, r12, #24\n\t"
19766#else
19767        "uxtb	r12, r4, ror #8\n\t"
19768#endif
19769#else
19770        "ubfx	r12, r4, #8, #8\n\t"
19771#endif
19772        "eor	r9, r9, lr, ror #16\n\t"
19773#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19774#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19775        "lsl	lr, r7, #24\n\t"
19776        "lsr	lr, lr, #24\n\t"
19777#else
19778        "uxtb	lr, r7\n\t"
19779#endif
19780#else
19781        "ubfx	lr, r7, #0, #8\n\t"
19782#endif
19783        "ldr	r10, [r0, r10, lsl #2]\n\t"
19784        "ldr	r11, [r0, r11, lsl #2]\n\t"
19785        "ldr	r12, [r0, r12, lsl #2]\n\t"
19786        "ldr	lr, [r0, lr, lsl #2]\n\t"
19787#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19788#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19789        "lsl	r4, r4, #24\n\t"
19790        "lsr	r4, r4, #24\n\t"
19791#else
19792        "uxtb	r4, r4\n\t"
19793#endif
19794#else
19795        "ubfx	r4, r4, #0, #8\n\t"
19796#endif
19797        "eor	r10, r10, r11, ror #24\n\t"
19798#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19799#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19800        "lsl	r11, r6, #8\n\t"
19801        "lsr	r11, r11, #24\n\t"
19802#else
19803        "uxtb	r11, r6, ror #16\n\t"
19804#endif
19805#else
19806        "ubfx	r11, r6, #16, #8\n\t"
19807#endif
19808        "eor	r10, r10, r12, ror #8\n\t"
19809        "lsr	r12, r7, #24\n\t"
19810        "eor	r10, r10, lr, ror #16\n\t"
19811#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19812#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19813        "lsl	lr, r5, #16\n\t"
19814        "lsr	lr, lr, #24\n\t"
19815#else
19816        "uxtb	lr, r5, ror #8\n\t"
19817#endif
19818#else
19819        "ubfx	lr, r5, #8, #8\n\t"
19820#endif
19821        "ldr	r4, [r0, r4, lsl #2]\n\t"
19822        "ldr	r12, [r0, r12, lsl #2]\n\t"
19823        "ldr	r11, [r0, r11, lsl #2]\n\t"
19824        "ldr	lr, [r0, lr, lsl #2]\n\t"
19825        "eor	r12, r12, r4, ror #24\n\t"
19826        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
19827        "eor	r11, r11, lr, ror #8\n\t"
19828        "eor	r11, r11, r12, ror #24\n\t"
19829        /*   XOR in Key Schedule */
19830        "eor	r8, r8, r4\n\t"
19831        "eor	r9, r9, r5\n\t"
19832        "eor	r10, r10, r6\n\t"
19833        "eor	r11, r11, r7\n\t"
19834#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19835#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19836        "lsl	r4, r11, #8\n\t"
19837        "lsr	r4, r4, #24\n\t"
19838#else
19839        "uxtb	r4, r11, ror #16\n\t"
19840#endif
19841#else
19842        "ubfx	r4, r11, #16, #8\n\t"
19843#endif
19844        "lsr	r7, r8, #24\n\t"
19845#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19846#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19847        "lsl	r12, r10, #16\n\t"
19848        "lsr	r12, r12, #24\n\t"
19849#else
19850        "uxtb	r12, r10, ror #8\n\t"
19851#endif
19852#else
19853        "ubfx	r12, r10, #8, #8\n\t"
19854#endif
19855#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19856#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19857        "lsl	lr, r9, #24\n\t"
19858        "lsr	lr, lr, #24\n\t"
19859#else
19860        "uxtb	lr, r9\n\t"
19861#endif
19862#else
19863        "ubfx	lr, r9, #0, #8\n\t"
19864#endif
19865        "ldr	r4, [r0, r4, lsl #2]\n\t"
19866        "ldr	r7, [r0, r7, lsl #2]\n\t"
19867        "ldr	r12, [r0, r12, lsl #2]\n\t"
19868        "ldr	lr, [r0, lr, lsl #2]\n\t"
19869#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19871        "lsl	r5, r8, #8\n\t"
19872        "lsr	r5, r5, #24\n\t"
19873#else
19874        "uxtb	r5, r8, ror #16\n\t"
19875#endif
19876#else
19877        "ubfx	r5, r8, #16, #8\n\t"
19878#endif
19879        "eor	r4, r4, r7, ror #24\n\t"
19880        "lsr	r7, r9, #24\n\t"
19881        "eor	r4, r4, r12, ror #8\n\t"
19882#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19883#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19884        "lsl	r12, r11, #16\n\t"
19885        "lsr	r12, r12, #24\n\t"
19886#else
19887        "uxtb	r12, r11, ror #8\n\t"
19888#endif
19889#else
19890        "ubfx	r12, r11, #8, #8\n\t"
19891#endif
19892        "eor	r4, r4, lr, ror #16\n\t"
19893#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19894#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19895        "lsl	lr, r10, #24\n\t"
19896        "lsr	lr, lr, #24\n\t"
19897#else
19898        "uxtb	lr, r10\n\t"
19899#endif
19900#else
19901        "ubfx	lr, r10, #0, #8\n\t"
19902#endif
19903        "ldr	r5, [r0, r5, lsl #2]\n\t"
19904        "ldr	r7, [r0, r7, lsl #2]\n\t"
19905        "ldr	r12, [r0, r12, lsl #2]\n\t"
19906        "ldr	lr, [r0, lr, lsl #2]\n\t"
19907#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19908#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19909        "lsl	r6, r9, #8\n\t"
19910        "lsr	r6, r6, #24\n\t"
19911#else
19912        "uxtb	r6, r9, ror #16\n\t"
19913#endif
19914#else
19915        "ubfx	r6, r9, #16, #8\n\t"
19916#endif
19917        "eor	r5, r5, r7, ror #24\n\t"
19918        "lsr	r7, r10, #24\n\t"
19919        "eor	r5, r5, r12, ror #8\n\t"
19920#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19921#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19922        "lsl	r12, r8, #16\n\t"
19923        "lsr	r12, r12, #24\n\t"
19924#else
19925        "uxtb	r12, r8, ror #8\n\t"
19926#endif
19927#else
19928        "ubfx	r12, r8, #8, #8\n\t"
19929#endif
19930        "eor	r5, r5, lr, ror #16\n\t"
19931#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19932#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19933        "lsl	lr, r11, #24\n\t"
19934        "lsr	lr, lr, #24\n\t"
19935#else
19936        "uxtb	lr, r11\n\t"
19937#endif
19938#else
19939        "ubfx	lr, r11, #0, #8\n\t"
19940#endif
19941        "ldr	r6, [r0, r6, lsl #2]\n\t"
19942        "ldr	r7, [r0, r7, lsl #2]\n\t"
19943        "ldr	r12, [r0, r12, lsl #2]\n\t"
19944        "ldr	lr, [r0, lr, lsl #2]\n\t"
19945#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19946#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19947        "lsl	r8, r8, #24\n\t"
19948        "lsr	r8, r8, #24\n\t"
19949#else
19950        "uxtb	r8, r8\n\t"
19951#endif
19952#else
19953        "ubfx	r8, r8, #0, #8\n\t"
19954#endif
19955        "eor	r6, r6, r7, ror #24\n\t"
19956#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19957#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19958        "lsl	r7, r10, #8\n\t"
19959        "lsr	r7, r7, #24\n\t"
19960#else
19961        "uxtb	r7, r10, ror #16\n\t"
19962#endif
19963#else
19964        "ubfx	r7, r10, #16, #8\n\t"
19965#endif
19966        "eor	r6, r6, r12, ror #8\n\t"
19967        "lsr	r12, r11, #24\n\t"
19968        "eor	r6, r6, lr, ror #16\n\t"
19969#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19970#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19971        "lsl	lr, r9, #16\n\t"
19972        "lsr	lr, lr, #24\n\t"
19973#else
19974        "uxtb	lr, r9, ror #8\n\t"
19975#endif
19976#else
19977        "ubfx	lr, r9, #8, #8\n\t"
19978#endif
19979        "ldr	r8, [r0, r8, lsl #2]\n\t"
19980        "ldr	r12, [r0, r12, lsl #2]\n\t"
19981        "ldr	r7, [r0, r7, lsl #2]\n\t"
19982        "ldr	lr, [r0, lr, lsl #2]\n\t"
19983        "eor	r12, r12, r8, ror #24\n\t"
19984        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
19985        "eor	r7, r7, lr, ror #8\n\t"
19986        "eor	r7, r7, r12, ror #24\n\t"
19987        /*   XOR in Key Schedule */
19988        "eor	r4, r4, r8\n\t"
19989        "eor	r5, r5, r9\n\t"
19990        "eor	r6, r6, r10\n\t"
19991        "eor	r7, r7, r11\n\t"
19992        "subs	r1, r1, #1\n\t"
19993        "bne	L_AES_CBC_decrypt_block_nr_256_odd_%=\n\t"
19994#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19995#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19996        "lsl	r8, r7, #8\n\t"
19997        "lsr	r8, r8, #24\n\t"
19998#else
19999        "uxtb	r8, r7, ror #16\n\t"
20000#endif
20001#else
20002        "ubfx	r8, r7, #16, #8\n\t"
20003#endif
20004        "lsr	r11, r4, #24\n\t"
20005#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20006#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20007        "lsl	r12, r6, #16\n\t"
20008        "lsr	r12, r12, #24\n\t"
20009#else
20010        "uxtb	r12, r6, ror #8\n\t"
20011#endif
20012#else
20013        "ubfx	r12, r6, #8, #8\n\t"
20014#endif
20015#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20016#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20017        "lsl	lr, r5, #24\n\t"
20018        "lsr	lr, lr, #24\n\t"
20019#else
20020        "uxtb	lr, r5\n\t"
20021#endif
20022#else
20023        "ubfx	lr, r5, #0, #8\n\t"
20024#endif
20025        "ldr	r8, [r0, r8, lsl #2]\n\t"
20026        "ldr	r11, [r0, r11, lsl #2]\n\t"
20027        "ldr	r12, [r0, r12, lsl #2]\n\t"
20028        "ldr	lr, [r0, lr, lsl #2]\n\t"
20029#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20031        "lsl	r9, r4, #8\n\t"
20032        "lsr	r9, r9, #24\n\t"
20033#else
20034        "uxtb	r9, r4, ror #16\n\t"
20035#endif
20036#else
20037        "ubfx	r9, r4, #16, #8\n\t"
20038#endif
20039        "eor	r8, r8, r11, ror #24\n\t"
20040        "lsr	r11, r5, #24\n\t"
20041        "eor	r8, r8, r12, ror #8\n\t"
20042#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20043#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20044        "lsl	r12, r7, #16\n\t"
20045        "lsr	r12, r12, #24\n\t"
20046#else
20047        "uxtb	r12, r7, ror #8\n\t"
20048#endif
20049#else
20050        "ubfx	r12, r7, #8, #8\n\t"
20051#endif
20052        "eor	r8, r8, lr, ror #16\n\t"
20053#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20054#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20055        "lsl	lr, r6, #24\n\t"
20056        "lsr	lr, lr, #24\n\t"
20057#else
20058        "uxtb	lr, r6\n\t"
20059#endif
20060#else
20061        "ubfx	lr, r6, #0, #8\n\t"
20062#endif
20063        "ldr	r9, [r0, r9, lsl #2]\n\t"
20064        "ldr	r11, [r0, r11, lsl #2]\n\t"
20065        "ldr	r12, [r0, r12, lsl #2]\n\t"
20066        "ldr	lr, [r0, lr, lsl #2]\n\t"
20067#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20068#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20069        "lsl	r10, r5, #8\n\t"
20070        "lsr	r10, r10, #24\n\t"
20071#else
20072        "uxtb	r10, r5, ror #16\n\t"
20073#endif
20074#else
20075        "ubfx	r10, r5, #16, #8\n\t"
20076#endif
20077        "eor	r9, r9, r11, ror #24\n\t"
20078        "lsr	r11, r6, #24\n\t"
20079        "eor	r9, r9, r12, ror #8\n\t"
20080#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20081#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20082        "lsl	r12, r4, #16\n\t"
20083        "lsr	r12, r12, #24\n\t"
20084#else
20085        "uxtb	r12, r4, ror #8\n\t"
20086#endif
20087#else
20088        "ubfx	r12, r4, #8, #8\n\t"
20089#endif
20090        "eor	r9, r9, lr, ror #16\n\t"
20091#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20092#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20093        "lsl	lr, r7, #24\n\t"
20094        "lsr	lr, lr, #24\n\t"
20095#else
20096        "uxtb	lr, r7\n\t"
20097#endif
20098#else
20099        "ubfx	lr, r7, #0, #8\n\t"
20100#endif
20101        "ldr	r10, [r0, r10, lsl #2]\n\t"
20102        "ldr	r11, [r0, r11, lsl #2]\n\t"
20103        "ldr	r12, [r0, r12, lsl #2]\n\t"
20104        "ldr	lr, [r0, lr, lsl #2]\n\t"
20105#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20107        "lsl	r4, r4, #24\n\t"
20108        "lsr	r4, r4, #24\n\t"
20109#else
20110        "uxtb	r4, r4\n\t"
20111#endif
20112#else
20113        "ubfx	r4, r4, #0, #8\n\t"
20114#endif
20115        "eor	r10, r10, r11, ror #24\n\t"
20116#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20117#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20118        "lsl	r11, r6, #8\n\t"
20119        "lsr	r11, r11, #24\n\t"
20120#else
20121        "uxtb	r11, r6, ror #16\n\t"
20122#endif
20123#else
20124        "ubfx	r11, r6, #16, #8\n\t"
20125#endif
20126        "eor	r10, r10, r12, ror #8\n\t"
20127        "lsr	r12, r7, #24\n\t"
20128        "eor	r10, r10, lr, ror #16\n\t"
20129#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20130#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20131        "lsl	lr, r5, #16\n\t"
20132        "lsr	lr, lr, #24\n\t"
20133#else
20134        "uxtb	lr, r5, ror #8\n\t"
20135#endif
20136#else
20137        "ubfx	lr, r5, #8, #8\n\t"
20138#endif
20139        "ldr	r4, [r0, r4, lsl #2]\n\t"
20140        "ldr	r12, [r0, r12, lsl #2]\n\t"
20141        "ldr	r11, [r0, r11, lsl #2]\n\t"
20142        "ldr	lr, [r0, lr, lsl #2]\n\t"
20143        "eor	r12, r12, r4, ror #24\n\t"
20144        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
20145        "eor	r11, r11, lr, ror #8\n\t"
20146        "eor	r11, r11, r12, ror #24\n\t"
20147        /*   XOR in Key Schedule */
20148        "eor	r8, r8, r4\n\t"
20149        "eor	r9, r9, r5\n\t"
20150        "eor	r10, r10, r6\n\t"
20151        "eor	r11, r11, r7\n\t"
20152#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20153#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20154        "lsl	r4, r9, #24\n\t"
20155        "lsr	r4, r4, #24\n\t"
20156#else
20157        "uxtb	r4, r9\n\t"
20158#endif
20159#else
20160        "ubfx	r4, r9, #0, #8\n\t"
20161#endif
20162#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20164        "lsl	r7, r10, #16\n\t"
20165        "lsr	r7, r7, #24\n\t"
20166#else
20167        "uxtb	r7, r10, ror #8\n\t"
20168#endif
20169#else
20170        "ubfx	r7, r10, #8, #8\n\t"
20171#endif
20172#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20173#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20174        "lsl	r12, r11, #8\n\t"
20175        "lsr	r12, r12, #24\n\t"
20176#else
20177        "uxtb	r12, r11, ror #16\n\t"
20178#endif
20179#else
20180        "ubfx	r12, r11, #16, #8\n\t"
20181#endif
20182        "lsr	lr, r8, #24\n\t"
20183        "ldrb	r4, [r2, r4]\n\t"
20184        "ldrb	r7, [r2, r7]\n\t"
20185        "ldrb	r12, [r2, r12]\n\t"
20186        "ldrb	lr, [r2, lr]\n\t"
20187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20188#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20189        "lsl	r5, r10, #24\n\t"
20190        "lsr	r5, r5, #24\n\t"
20191#else
20192        "uxtb	r5, r10\n\t"
20193#endif
20194#else
20195        "ubfx	r5, r10, #0, #8\n\t"
20196#endif
20197        "eor	r4, r4, r7, lsl #8\n\t"
20198#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20200        "lsl	r7, r11, #16\n\t"
20201        "lsr	r7, r7, #24\n\t"
20202#else
20203        "uxtb	r7, r11, ror #8\n\t"
20204#endif
20205#else
20206        "ubfx	r7, r11, #8, #8\n\t"
20207#endif
20208        "eor	r4, r4, r12, lsl #16\n\t"
20209#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20210#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20211        "lsl	r12, r8, #8\n\t"
20212        "lsr	r12, r12, #24\n\t"
20213#else
20214        "uxtb	r12, r8, ror #16\n\t"
20215#endif
20216#else
20217        "ubfx	r12, r8, #16, #8\n\t"
20218#endif
20219        "eor	r4, r4, lr, lsl #24\n\t"
20220        "lsr	lr, r9, #24\n\t"
20221        "ldrb	r7, [r2, r7]\n\t"
20222        "ldrb	lr, [r2, lr]\n\t"
20223        "ldrb	r5, [r2, r5]\n\t"
20224        "ldrb	r12, [r2, r12]\n\t"
20225#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20226#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20227        "lsl	r6, r11, #24\n\t"
20228        "lsr	r6, r6, #24\n\t"
20229#else
20230        "uxtb	r6, r11\n\t"
20231#endif
20232#else
20233        "ubfx	r6, r11, #0, #8\n\t"
20234#endif
20235        "eor	r5, r5, r7, lsl #8\n\t"
20236#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20237#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20238        "lsl	r7, r8, #16\n\t"
20239        "lsr	r7, r7, #24\n\t"
20240#else
20241        "uxtb	r7, r8, ror #8\n\t"
20242#endif
20243#else
20244        "ubfx	r7, r8, #8, #8\n\t"
20245#endif
20246        "eor	r5, r5, r12, lsl #16\n\t"
20247#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20248#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20249        "lsl	r12, r9, #8\n\t"
20250        "lsr	r12, r12, #24\n\t"
20251#else
20252        "uxtb	r12, r9, ror #16\n\t"
20253#endif
20254#else
20255        "ubfx	r12, r9, #16, #8\n\t"
20256#endif
20257        "eor	r5, r5, lr, lsl #24\n\t"
20258        "lsr	lr, r10, #24\n\t"
20259        "ldrb	r7, [r2, r7]\n\t"
20260        "ldrb	lr, [r2, lr]\n\t"
20261        "ldrb	r6, [r2, r6]\n\t"
20262        "ldrb	r12, [r2, r12]\n\t"
20263        "lsr	r11, r11, #24\n\t"
20264        "eor	r6, r6, r7, lsl #8\n\t"
20265#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20266#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20267        "lsl	r7, r8, #24\n\t"
20268        "lsr	r7, r7, #24\n\t"
20269#else
20270        "uxtb	r7, r8\n\t"
20271#endif
20272#else
20273        "ubfx	r7, r8, #0, #8\n\t"
20274#endif
20275        "eor	r6, r6, r12, lsl #16\n\t"
20276#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20277#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20278        "lsl	r12, r9, #16\n\t"
20279        "lsr	r12, r12, #24\n\t"
20280#else
20281        "uxtb	r12, r9, ror #8\n\t"
20282#endif
20283#else
20284        "ubfx	r12, r9, #8, #8\n\t"
20285#endif
20286        "eor	r6, r6, lr, lsl #24\n\t"
20287#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20288#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20289        "lsl	lr, r10, #8\n\t"
20290        "lsr	lr, lr, #24\n\t"
20291#else
20292        "uxtb	lr, r10, ror #16\n\t"
20293#endif
20294#else
20295        "ubfx	lr, r10, #16, #8\n\t"
20296#endif
20297        "ldrb	r11, [r2, r11]\n\t"
20298        "ldrb	r12, [r2, r12]\n\t"
20299        "ldrb	r7, [r2, r7]\n\t"
20300        "ldrb	lr, [r2, lr]\n\t"
20301        "eor	r12, r12, r11, lsl #16\n\t"
20302        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
20303        "eor	r7, r7, r12, lsl #8\n\t"
20304        "eor	r7, r7, lr, lsl #16\n\t"
20305        /*   XOR in Key Schedule */
20306        "eor	r4, r4, r8\n\t"
20307        "eor	r5, r5, r9\n\t"
20308        "eor	r6, r6, r10\n\t"
20309        "eor	r7, r7, r11\n\t"
20310#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
20311        "ldr	lr, [sp, #16]\n\t"
20312#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20313        "eor	r8, r4, r4, ror #16\n\t"
20314        "eor	r9, r5, r5, ror #16\n\t"
20315        "eor	r10, r6, r6, ror #16\n\t"
20316        "eor	r11, r7, r7, ror #16\n\t"
20317        "bic	r8, r8, #0xff0000\n\t"
20318        "bic	r9, r9, #0xff0000\n\t"
20319        "bic	r10, r10, #0xff0000\n\t"
20320        "bic	r11, r11, #0xff0000\n\t"
20321        "ror	r4, r4, #8\n\t"
20322        "ror	r5, r5, #8\n\t"
20323        "ror	r6, r6, #8\n\t"
20324        "ror	r7, r7, #8\n\t"
20325        "eor	r4, r4, r8, lsr #8\n\t"
20326        "eor	r5, r5, r9, lsr #8\n\t"
20327        "eor	r6, r6, r10, lsr #8\n\t"
20328        "eor	r7, r7, r11, lsr #8\n\t"
20329#else
20330        "rev	r4, r4\n\t"
20331        "rev	r5, r5\n\t"
20332        "rev	r6, r6\n\t"
20333        "rev	r7, r7\n\t"
20334#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
20335        "ldm	lr, {r8, r9, r10, r11}\n\t"
20336        "pop	{r1, r12, lr}\n\t"
20337        "ldr	%[ks], [sp]\n\t"
20338        "eor	r4, r4, r8\n\t"
20339        "eor	r5, r5, r9\n\t"
20340        "eor	r6, r6, r10\n\t"
20341        "eor	r7, r7, r11\n\t"
20342        "str	r4, [%[out]]\n\t"
20343        "str	r5, [%[out], #4]\n\t"
20344        "str	r6, [%[out], #8]\n\t"
20345        "str	r7, [%[out], #12]\n\t"
20346        "subs	r12, r12, #16\n\t"
20347        "add	lr, lr, #16\n\t"
20348        "add	%[out], %[out], #16\n\t"
20349        "beq	L_AES_CBC_decrypt_end_odd_%=\n\t"
20350        "push	{r1, r12, lr}\n\t"
20351        "ldr	r4, [lr]\n\t"
20352        "ldr	r5, [lr, #4]\n\t"
20353        "ldr	r6, [lr, #8]\n\t"
20354        "ldr	r7, [lr, #12]\n\t"
20355        "ldr	lr, [sp, #16]\n\t"
20356#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20357        "stm	lr, {r4, r5}\n\t"
20358#else
20359        "strd	r4, r5, [lr]\n\t"
20360#endif
20361#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20362        "str	r6, [lr, #8]\n\t"
20363        "str	r7, [lr, #12]\n\t"
20364#else
20365        "strd	r6, r7, [lr, #8]\n\t"
20366#endif
20367#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20368        "eor	r8, r4, r4, ror #16\n\t"
20369        "eor	r9, r5, r5, ror #16\n\t"
20370        "eor	r10, r6, r6, ror #16\n\t"
20371        "eor	r11, r7, r7, ror #16\n\t"
20372        "bic	r8, r8, #0xff0000\n\t"
20373        "bic	r9, r9, #0xff0000\n\t"
20374        "bic	r10, r10, #0xff0000\n\t"
20375        "bic	r11, r11, #0xff0000\n\t"
20376        "ror	r4, r4, #8\n\t"
20377        "ror	r5, r5, #8\n\t"
20378        "ror	r6, r6, #8\n\t"
20379        "ror	r7, r7, #8\n\t"
20380        "eor	r4, r4, r8, lsr #8\n\t"
20381        "eor	r5, r5, r9, lsr #8\n\t"
20382        "eor	r6, r6, r10, lsr #8\n\t"
20383        "eor	r7, r7, r11, lsr #8\n\t"
20384#else
20385        "rev	r4, r4\n\t"
20386        "rev	r5, r5\n\t"
20387        "rev	r6, r6\n\t"
20388        "rev	r7, r7\n\t"
20389#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
20390        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
20391        /* Round: 0 - XOR in key schedule */
20392        "eor	r4, r4, r8\n\t"
20393        "eor	r5, r5, r9\n\t"
20394        "eor	r6, r6, r10\n\t"
20395        "eor	r7, r7, r11\n\t"
20396        "mov	r1, #6\n\t"
20397#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
20398        "bl	AES_decrypt_block\n\t"
20399#else
20400        "\n"
20401    "L_AES_CBC_decrypt_block_nr_256_even_%=:\n\t"
20402#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20403#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20404        "lsl	r8, r7, #8\n\t"
20405        "lsr	r8, r8, #24\n\t"
20406#else
20407        "uxtb	r8, r7, ror #16\n\t"
20408#endif
20409#else
20410        "ubfx	r8, r7, #16, #8\n\t"
20411#endif
20412        "lsr	r11, r4, #24\n\t"
20413#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20414#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20415        "lsl	r12, r6, #16\n\t"
20416        "lsr	r12, r12, #24\n\t"
20417#else
20418        "uxtb	r12, r6, ror #8\n\t"
20419#endif
20420#else
20421        "ubfx	r12, r6, #8, #8\n\t"
20422#endif
20423#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20425        "lsl	lr, r5, #24\n\t"
20426        "lsr	lr, lr, #24\n\t"
20427#else
20428        "uxtb	lr, r5\n\t"
20429#endif
20430#else
20431        "ubfx	lr, r5, #0, #8\n\t"
20432#endif
20433        "ldr	r8, [r0, r8, lsl #2]\n\t"
20434        "ldr	r11, [r0, r11, lsl #2]\n\t"
20435        "ldr	r12, [r0, r12, lsl #2]\n\t"
20436        "ldr	lr, [r0, lr, lsl #2]\n\t"
20437#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20438#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20439        "lsl	r9, r4, #8\n\t"
20440        "lsr	r9, r9, #24\n\t"
20441#else
20442        "uxtb	r9, r4, ror #16\n\t"
20443#endif
20444#else
20445        "ubfx	r9, r4, #16, #8\n\t"
20446#endif
20447        "eor	r8, r8, r11, ror #24\n\t"
20448        "lsr	r11, r5, #24\n\t"
20449        "eor	r8, r8, r12, ror #8\n\t"
20450#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20451#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20452        "lsl	r12, r7, #16\n\t"
20453        "lsr	r12, r12, #24\n\t"
20454#else
20455        "uxtb	r12, r7, ror #8\n\t"
20456#endif
20457#else
20458        "ubfx	r12, r7, #8, #8\n\t"
20459#endif
20460        "eor	r8, r8, lr, ror #16\n\t"
20461#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20462#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20463        "lsl	lr, r6, #24\n\t"
20464        "lsr	lr, lr, #24\n\t"
20465#else
20466        "uxtb	lr, r6\n\t"
20467#endif
20468#else
20469        "ubfx	lr, r6, #0, #8\n\t"
20470#endif
20471        "ldr	r9, [r0, r9, lsl #2]\n\t"
20472        "ldr	r11, [r0, r11, lsl #2]\n\t"
20473        "ldr	r12, [r0, r12, lsl #2]\n\t"
20474        "ldr	lr, [r0, lr, lsl #2]\n\t"
20475#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20476#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20477        "lsl	r10, r5, #8\n\t"
20478        "lsr	r10, r10, #24\n\t"
20479#else
20480        "uxtb	r10, r5, ror #16\n\t"
20481#endif
20482#else
20483        "ubfx	r10, r5, #16, #8\n\t"
20484#endif
20485        "eor	r9, r9, r11, ror #24\n\t"
20486        "lsr	r11, r6, #24\n\t"
20487        "eor	r9, r9, r12, ror #8\n\t"
20488#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20489#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20490        "lsl	r12, r4, #16\n\t"
20491        "lsr	r12, r12, #24\n\t"
20492#else
20493        "uxtb	r12, r4, ror #8\n\t"
20494#endif
20495#else
20496        "ubfx	r12, r4, #8, #8\n\t"
20497#endif
20498        "eor	r9, r9, lr, ror #16\n\t"
20499#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20500#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20501        "lsl	lr, r7, #24\n\t"
20502        "lsr	lr, lr, #24\n\t"
20503#else
20504        "uxtb	lr, r7\n\t"
20505#endif
20506#else
20507        "ubfx	lr, r7, #0, #8\n\t"
20508#endif
20509        "ldr	r10, [r0, r10, lsl #2]\n\t"
20510        "ldr	r11, [r0, r11, lsl #2]\n\t"
20511        "ldr	r12, [r0, r12, lsl #2]\n\t"
20512        "ldr	lr, [r0, lr, lsl #2]\n\t"
20513#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20514#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20515        "lsl	r4, r4, #24\n\t"
20516        "lsr	r4, r4, #24\n\t"
20517#else
20518        "uxtb	r4, r4\n\t"
20519#endif
20520#else
20521        "ubfx	r4, r4, #0, #8\n\t"
20522#endif
20523        "eor	r10, r10, r11, ror #24\n\t"
20524#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20525#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20526        "lsl	r11, r6, #8\n\t"
20527        "lsr	r11, r11, #24\n\t"
20528#else
20529        "uxtb	r11, r6, ror #16\n\t"
20530#endif
20531#else
20532        "ubfx	r11, r6, #16, #8\n\t"
20533#endif
20534        "eor	r10, r10, r12, ror #8\n\t"
20535        "lsr	r12, r7, #24\n\t"
20536        "eor	r10, r10, lr, ror #16\n\t"
20537#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20538#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20539        "lsl	lr, r5, #16\n\t"
20540        "lsr	lr, lr, #24\n\t"
20541#else
20542        "uxtb	lr, r5, ror #8\n\t"
20543#endif
20544#else
20545        "ubfx	lr, r5, #8, #8\n\t"
20546#endif
20547        "ldr	r4, [r0, r4, lsl #2]\n\t"
20548        "ldr	r12, [r0, r12, lsl #2]\n\t"
20549        "ldr	r11, [r0, r11, lsl #2]\n\t"
20550        "ldr	lr, [r0, lr, lsl #2]\n\t"
20551        "eor	r12, r12, r4, ror #24\n\t"
20552        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
20553        "eor	r11, r11, lr, ror #8\n\t"
20554        "eor	r11, r11, r12, ror #24\n\t"
20555        /*   XOR in Key Schedule */
20556        "eor	r8, r8, r4\n\t"
20557        "eor	r9, r9, r5\n\t"
20558        "eor	r10, r10, r6\n\t"
20559        "eor	r11, r11, r7\n\t"
20560#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20561#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20562        "lsl	r4, r11, #8\n\t"
20563        "lsr	r4, r4, #24\n\t"
20564#else
20565        "uxtb	r4, r11, ror #16\n\t"
20566#endif
20567#else
20568        "ubfx	r4, r11, #16, #8\n\t"
20569#endif
20570        "lsr	r7, r8, #24\n\t"
20571#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20572#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20573        "lsl	r12, r10, #16\n\t"
20574        "lsr	r12, r12, #24\n\t"
20575#else
20576        "uxtb	r12, r10, ror #8\n\t"
20577#endif
20578#else
20579        "ubfx	r12, r10, #8, #8\n\t"
20580#endif
20581#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20582#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20583        "lsl	lr, r9, #24\n\t"
20584        "lsr	lr, lr, #24\n\t"
20585#else
20586        "uxtb	lr, r9\n\t"
20587#endif
20588#else
20589        "ubfx	lr, r9, #0, #8\n\t"
20590#endif
20591        "ldr	r4, [r0, r4, lsl #2]\n\t"
20592        "ldr	r7, [r0, r7, lsl #2]\n\t"
20593        "ldr	r12, [r0, r12, lsl #2]\n\t"
20594        "ldr	lr, [r0, lr, lsl #2]\n\t"
20595#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20596#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20597        "lsl	r5, r8, #8\n\t"
20598        "lsr	r5, r5, #24\n\t"
20599#else
20600        "uxtb	r5, r8, ror #16\n\t"
20601#endif
20602#else
20603        "ubfx	r5, r8, #16, #8\n\t"
20604#endif
20605        "eor	r4, r4, r7, ror #24\n\t"
20606        "lsr	r7, r9, #24\n\t"
20607        "eor	r4, r4, r12, ror #8\n\t"
20608#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20609#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20610        "lsl	r12, r11, #16\n\t"
20611        "lsr	r12, r12, #24\n\t"
20612#else
20613        "uxtb	r12, r11, ror #8\n\t"
20614#endif
20615#else
20616        "ubfx	r12, r11, #8, #8\n\t"
20617#endif
20618        "eor	r4, r4, lr, ror #16\n\t"
20619#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20620#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20621        "lsl	lr, r10, #24\n\t"
20622        "lsr	lr, lr, #24\n\t"
20623#else
20624        "uxtb	lr, r10\n\t"
20625#endif
20626#else
20627        "ubfx	lr, r10, #0, #8\n\t"
20628#endif
20629        "ldr	r5, [r0, r5, lsl #2]\n\t"
20630        "ldr	r7, [r0, r7, lsl #2]\n\t"
20631        "ldr	r12, [r0, r12, lsl #2]\n\t"
20632        "ldr	lr, [r0, lr, lsl #2]\n\t"
20633#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20634#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20635        "lsl	r6, r9, #8\n\t"
20636        "lsr	r6, r6, #24\n\t"
20637#else
20638        "uxtb	r6, r9, ror #16\n\t"
20639#endif
20640#else
20641        "ubfx	r6, r9, #16, #8\n\t"
20642#endif
20643        "eor	r5, r5, r7, ror #24\n\t"
20644        "lsr	r7, r10, #24\n\t"
20645        "eor	r5, r5, r12, ror #8\n\t"
20646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20647#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20648        "lsl	r12, r8, #16\n\t"
20649        "lsr	r12, r12, #24\n\t"
20650#else
20651        "uxtb	r12, r8, ror #8\n\t"
20652#endif
20653#else
20654        "ubfx	r12, r8, #8, #8\n\t"
20655#endif
20656        "eor	r5, r5, lr, ror #16\n\t"
20657#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20658#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20659        "lsl	lr, r11, #24\n\t"
20660        "lsr	lr, lr, #24\n\t"
20661#else
20662        "uxtb	lr, r11\n\t"
20663#endif
20664#else
20665        "ubfx	lr, r11, #0, #8\n\t"
20666#endif
20667        "ldr	r6, [r0, r6, lsl #2]\n\t"
20668        "ldr	r7, [r0, r7, lsl #2]\n\t"
20669        "ldr	r12, [r0, r12, lsl #2]\n\t"
20670        "ldr	lr, [r0, lr, lsl #2]\n\t"
20671#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20672#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20673        "lsl	r8, r8, #24\n\t"
20674        "lsr	r8, r8, #24\n\t"
20675#else
20676        "uxtb	r8, r8\n\t"
20677#endif
20678#else
20679        "ubfx	r8, r8, #0, #8\n\t"
20680#endif
20681        "eor	r6, r6, r7, ror #24\n\t"
20682#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20683#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20684        "lsl	r7, r10, #8\n\t"
20685        "lsr	r7, r7, #24\n\t"
20686#else
20687        "uxtb	r7, r10, ror #16\n\t"
20688#endif
20689#else
20690        "ubfx	r7, r10, #16, #8\n\t"
20691#endif
20692        "eor	r6, r6, r12, ror #8\n\t"
20693        "lsr	r12, r11, #24\n\t"
20694        "eor	r6, r6, lr, ror #16\n\t"
20695#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20696#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20697        "lsl	lr, r9, #16\n\t"
20698        "lsr	lr, lr, #24\n\t"
20699#else
20700        "uxtb	lr, r9, ror #8\n\t"
20701#endif
20702#else
20703        "ubfx	lr, r9, #8, #8\n\t"
20704#endif
20705        "ldr	r8, [r0, r8, lsl #2]\n\t"
20706        "ldr	r12, [r0, r12, lsl #2]\n\t"
20707        "ldr	r7, [r0, r7, lsl #2]\n\t"
20708        "ldr	lr, [r0, lr, lsl #2]\n\t"
20709        "eor	r12, r12, r8, ror #24\n\t"
20710        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
20711        "eor	r7, r7, lr, ror #8\n\t"
20712        "eor	r7, r7, r12, ror #24\n\t"
20713        /*   XOR in Key Schedule */
20714        "eor	r4, r4, r8\n\t"
20715        "eor	r5, r5, r9\n\t"
20716        "eor	r6, r6, r10\n\t"
20717        "eor	r7, r7, r11\n\t"
20718        "subs	r1, r1, #1\n\t"
20719        "bne	L_AES_CBC_decrypt_block_nr_256_even_%=\n\t"
20720#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20721#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20722        "lsl	r8, r7, #8\n\t"
20723        "lsr	r8, r8, #24\n\t"
20724#else
20725        "uxtb	r8, r7, ror #16\n\t"
20726#endif
20727#else
20728        "ubfx	r8, r7, #16, #8\n\t"
20729#endif
20730        "lsr	r11, r4, #24\n\t"
20731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20733        "lsl	r12, r6, #16\n\t"
20734        "lsr	r12, r12, #24\n\t"
20735#else
20736        "uxtb	r12, r6, ror #8\n\t"
20737#endif
20738#else
20739        "ubfx	r12, r6, #8, #8\n\t"
20740#endif
20741#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20742#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20743        "lsl	lr, r5, #24\n\t"
20744        "lsr	lr, lr, #24\n\t"
20745#else
20746        "uxtb	lr, r5\n\t"
20747#endif
20748#else
20749        "ubfx	lr, r5, #0, #8\n\t"
20750#endif
20751        "ldr	r8, [r0, r8, lsl #2]\n\t"
20752        "ldr	r11, [r0, r11, lsl #2]\n\t"
20753        "ldr	r12, [r0, r12, lsl #2]\n\t"
20754        "ldr	lr, [r0, lr, lsl #2]\n\t"
20755#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20756#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20757        "lsl	r9, r4, #8\n\t"
20758        "lsr	r9, r9, #24\n\t"
20759#else
20760        "uxtb	r9, r4, ror #16\n\t"
20761#endif
20762#else
20763        "ubfx	r9, r4, #16, #8\n\t"
20764#endif
20765        "eor	r8, r8, r11, ror #24\n\t"
20766        "lsr	r11, r5, #24\n\t"
20767        "eor	r8, r8, r12, ror #8\n\t"
20768#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20769#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20770        "lsl	r12, r7, #16\n\t"
20771        "lsr	r12, r12, #24\n\t"
20772#else
20773        "uxtb	r12, r7, ror #8\n\t"
20774#endif
20775#else
20776        "ubfx	r12, r7, #8, #8\n\t"
20777#endif
20778        "eor	r8, r8, lr, ror #16\n\t"
20779#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20780#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20781        "lsl	lr, r6, #24\n\t"
20782        "lsr	lr, lr, #24\n\t"
20783#else
20784        "uxtb	lr, r6\n\t"
20785#endif
20786#else
20787        "ubfx	lr, r6, #0, #8\n\t"
20788#endif
20789        "ldr	r9, [r0, r9, lsl #2]\n\t"
20790        "ldr	r11, [r0, r11, lsl #2]\n\t"
20791        "ldr	r12, [r0, r12, lsl #2]\n\t"
20792        "ldr	lr, [r0, lr, lsl #2]\n\t"
20793#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20794#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20795        "lsl	r10, r5, #8\n\t"
20796        "lsr	r10, r10, #24\n\t"
20797#else
20798        "uxtb	r10, r5, ror #16\n\t"
20799#endif
20800#else
20801        "ubfx	r10, r5, #16, #8\n\t"
20802#endif
20803        "eor	r9, r9, r11, ror #24\n\t"
20804        "lsr	r11, r6, #24\n\t"
20805        "eor	r9, r9, r12, ror #8\n\t"
20806#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20807#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20808        "lsl	r12, r4, #16\n\t"
20809        "lsr	r12, r12, #24\n\t"
20810#else
20811        "uxtb	r12, r4, ror #8\n\t"
20812#endif
20813#else
20814        "ubfx	r12, r4, #8, #8\n\t"
20815#endif
20816        "eor	r9, r9, lr, ror #16\n\t"
20817#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20818#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20819        "lsl	lr, r7, #24\n\t"
20820        "lsr	lr, lr, #24\n\t"
20821#else
20822        "uxtb	lr, r7\n\t"
20823#endif
20824#else
20825        "ubfx	lr, r7, #0, #8\n\t"
20826#endif
20827        "ldr	r10, [r0, r10, lsl #2]\n\t"
20828        "ldr	r11, [r0, r11, lsl #2]\n\t"
20829        "ldr	r12, [r0, r12, lsl #2]\n\t"
20830        "ldr	lr, [r0, lr, lsl #2]\n\t"
20831#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20832#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20833        "lsl	r4, r4, #24\n\t"
20834        "lsr	r4, r4, #24\n\t"
20835#else
20836        "uxtb	r4, r4\n\t"
20837#endif
20838#else
20839        "ubfx	r4, r4, #0, #8\n\t"
20840#endif
20841        "eor	r10, r10, r11, ror #24\n\t"
20842#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20843#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20844        "lsl	r11, r6, #8\n\t"
20845        "lsr	r11, r11, #24\n\t"
20846#else
20847        "uxtb	r11, r6, ror #16\n\t"
20848#endif
20849#else
20850        "ubfx	r11, r6, #16, #8\n\t"
20851#endif
20852        "eor	r10, r10, r12, ror #8\n\t"
20853        "lsr	r12, r7, #24\n\t"
20854        "eor	r10, r10, lr, ror #16\n\t"
20855#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20856#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20857        "lsl	lr, r5, #16\n\t"
20858        "lsr	lr, lr, #24\n\t"
20859#else
20860        "uxtb	lr, r5, ror #8\n\t"
20861#endif
20862#else
20863        "ubfx	lr, r5, #8, #8\n\t"
20864#endif
20865        "ldr	r4, [r0, r4, lsl #2]\n\t"
20866        "ldr	r12, [r0, r12, lsl #2]\n\t"
20867        "ldr	r11, [r0, r11, lsl #2]\n\t"
20868        "ldr	lr, [r0, lr, lsl #2]\n\t"
20869        "eor	r12, r12, r4, ror #24\n\t"
20870        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
20871        "eor	r11, r11, lr, ror #8\n\t"
20872        "eor	r11, r11, r12, ror #24\n\t"
20873        /*   XOR in Key Schedule */
20874        "eor	r8, r8, r4\n\t"
20875        "eor	r9, r9, r5\n\t"
20876        "eor	r10, r10, r6\n\t"
20877        "eor	r11, r11, r7\n\t"
20878#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20879#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20880        "lsl	r4, r9, #24\n\t"
20881        "lsr	r4, r4, #24\n\t"
20882#else
20883        "uxtb	r4, r9\n\t"
20884#endif
20885#else
20886        "ubfx	r4, r9, #0, #8\n\t"
20887#endif
20888#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20889#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20890        "lsl	r7, r10, #16\n\t"
20891        "lsr	r7, r7, #24\n\t"
20892#else
20893        "uxtb	r7, r10, ror #8\n\t"
20894#endif
20895#else
20896        "ubfx	r7, r10, #8, #8\n\t"
20897#endif
20898#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20899#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20900        "lsl	r12, r11, #8\n\t"
20901        "lsr	r12, r12, #24\n\t"
20902#else
20903        "uxtb	r12, r11, ror #16\n\t"
20904#endif
20905#else
20906        "ubfx	r12, r11, #16, #8\n\t"
20907#endif
20908        "lsr	lr, r8, #24\n\t"
20909        "ldrb	r4, [r2, r4]\n\t"
20910        "ldrb	r7, [r2, r7]\n\t"
20911        "ldrb	r12, [r2, r12]\n\t"
20912        "ldrb	lr, [r2, lr]\n\t"
20913#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20914#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20915        "lsl	r5, r10, #24\n\t"
20916        "lsr	r5, r5, #24\n\t"
20917#else
20918        "uxtb	r5, r10\n\t"
20919#endif
20920#else
20921        "ubfx	r5, r10, #0, #8\n\t"
20922#endif
20923        "eor	r4, r4, r7, lsl #8\n\t"
20924#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20925#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20926        "lsl	r7, r11, #16\n\t"
20927        "lsr	r7, r7, #24\n\t"
20928#else
20929        "uxtb	r7, r11, ror #8\n\t"
20930#endif
20931#else
20932        "ubfx	r7, r11, #8, #8\n\t"
20933#endif
20934        "eor	r4, r4, r12, lsl #16\n\t"
20935#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20936#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20937        "lsl	r12, r8, #8\n\t"
20938        "lsr	r12, r12, #24\n\t"
20939#else
20940        "uxtb	r12, r8, ror #16\n\t"
20941#endif
20942#else
20943        "ubfx	r12, r8, #16, #8\n\t"
20944#endif
20945        "eor	r4, r4, lr, lsl #24\n\t"
20946        "lsr	lr, r9, #24\n\t"
20947        "ldrb	r7, [r2, r7]\n\t"
20948        "ldrb	lr, [r2, lr]\n\t"
20949        "ldrb	r5, [r2, r5]\n\t"
20950        "ldrb	r12, [r2, r12]\n\t"
20951#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20952#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20953        "lsl	r6, r11, #24\n\t"
20954        "lsr	r6, r6, #24\n\t"
20955#else
20956        "uxtb	r6, r11\n\t"
20957#endif
20958#else
20959        "ubfx	r6, r11, #0, #8\n\t"
20960#endif
20961        "eor	r5, r5, r7, lsl #8\n\t"
20962#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20964        "lsl	r7, r8, #16\n\t"
20965        "lsr	r7, r7, #24\n\t"
20966#else
20967        "uxtb	r7, r8, ror #8\n\t"
20968#endif
20969#else
20970        "ubfx	r7, r8, #8, #8\n\t"
20971#endif
20972        "eor	r5, r5, r12, lsl #16\n\t"
20973#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20974#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20975        "lsl	r12, r9, #8\n\t"
20976        "lsr	r12, r12, #24\n\t"
20977#else
20978        "uxtb	r12, r9, ror #16\n\t"
20979#endif
20980#else
20981        "ubfx	r12, r9, #16, #8\n\t"
20982#endif
20983        "eor	r5, r5, lr, lsl #24\n\t"
20984        "lsr	lr, r10, #24\n\t"
20985        "ldrb	r7, [r2, r7]\n\t"
20986        "ldrb	lr, [r2, lr]\n\t"
20987        "ldrb	r6, [r2, r6]\n\t"
20988        "ldrb	r12, [r2, r12]\n\t"
20989        "lsr	r11, r11, #24\n\t"
20990        "eor	r6, r6, r7, lsl #8\n\t"
20991#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20993        "lsl	r7, r8, #24\n\t"
20994        "lsr	r7, r7, #24\n\t"
20995#else
20996        "uxtb	r7, r8\n\t"
20997#endif
20998#else
20999        "ubfx	r7, r8, #0, #8\n\t"
21000#endif
21001        "eor	r6, r6, r12, lsl #16\n\t"
21002#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21003#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21004        "lsl	r12, r9, #16\n\t"
21005        "lsr	r12, r12, #24\n\t"
21006#else
21007        "uxtb	r12, r9, ror #8\n\t"
21008#endif
21009#else
21010        "ubfx	r12, r9, #8, #8\n\t"
21011#endif
21012        "eor	r6, r6, lr, lsl #24\n\t"
21013#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21014#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21015        "lsl	lr, r10, #8\n\t"
21016        "lsr	lr, lr, #24\n\t"
21017#else
21018        "uxtb	lr, r10, ror #16\n\t"
21019#endif
21020#else
21021        "ubfx	lr, r10, #16, #8\n\t"
21022#endif
21023        "ldrb	r11, [r2, r11]\n\t"
21024        "ldrb	r12, [r2, r12]\n\t"
21025        "ldrb	r7, [r2, r7]\n\t"
21026        "ldrb	lr, [r2, lr]\n\t"
21027        "eor	r12, r12, r11, lsl #16\n\t"
21028        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
21029        "eor	r7, r7, r12, lsl #8\n\t"
21030        "eor	r7, r7, lr, lsl #16\n\t"
21031        /*   XOR in Key Schedule */
21032        "eor	r4, r4, r8\n\t"
21033        "eor	r5, r5, r9\n\t"
21034        "eor	r6, r6, r10\n\t"
21035        "eor	r7, r7, r11\n\t"
21036#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
21037        "ldr	lr, [sp, #16]\n\t"
21038#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21039        "eor	r8, r4, r4, ror #16\n\t"
21040        "eor	r9, r5, r5, ror #16\n\t"
21041        "eor	r10, r6, r6, ror #16\n\t"
21042        "eor	r11, r7, r7, ror #16\n\t"
21043        "bic	r8, r8, #0xff0000\n\t"
21044        "bic	r9, r9, #0xff0000\n\t"
21045        "bic	r10, r10, #0xff0000\n\t"
21046        "bic	r11, r11, #0xff0000\n\t"
21047        "ror	r4, r4, #8\n\t"
21048        "ror	r5, r5, #8\n\t"
21049        "ror	r6, r6, #8\n\t"
21050        "ror	r7, r7, #8\n\t"
21051        "eor	r4, r4, r8, lsr #8\n\t"
21052        "eor	r5, r5, r9, lsr #8\n\t"
21053        "eor	r6, r6, r10, lsr #8\n\t"
21054        "eor	r7, r7, r11, lsr #8\n\t"
21055#else
21056        "rev	r4, r4\n\t"
21057        "rev	r5, r5\n\t"
21058        "rev	r6, r6\n\t"
21059        "rev	r7, r7\n\t"
21060#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
21061#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21062        "ldr	r8, [lr, #16]\n\t"
21063        "ldr	r9, [lr, #20]\n\t"
21064#else
21065        "ldrd	r8, r9, [lr, #16]\n\t"
21066#endif
21067#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21068        "ldr	r10, [lr, #24]\n\t"
21069        "ldr	r11, [lr, #28]\n\t"
21070#else
21071        "ldrd	r10, r11, [lr, #24]\n\t"
21072#endif
21073        "pop	{r1, r12, lr}\n\t"
21074        "ldr	%[ks], [sp]\n\t"
21075        "eor	r4, r4, r8\n\t"
21076        "eor	r5, r5, r9\n\t"
21077        "eor	r6, r6, r10\n\t"
21078        "eor	r7, r7, r11\n\t"
21079        "str	r4, [%[out]]\n\t"
21080        "str	r5, [%[out], #4]\n\t"
21081        "str	r6, [%[out], #8]\n\t"
21082        "str	r7, [%[out], #12]\n\t"
21083        "subs	r12, r12, #16\n\t"
21084        "add	lr, lr, #16\n\t"
21085        "add	%[out], %[out], #16\n\t"
21086        "bne	L_AES_CBC_decrypt_loop_block_256_%=\n\t"
21087        "b	L_AES_CBC_decrypt_end_%=\n\t"
21088        "\n"
21089    "L_AES_CBC_decrypt_loop_block_192_%=:\n\t"
21090        "push	{r1, r12, lr}\n\t"
21091        "ldr	r4, [lr]\n\t"
21092        "ldr	r5, [lr, #4]\n\t"
21093        "ldr	r6, [lr, #8]\n\t"
21094        "ldr	r7, [lr, #12]\n\t"
21095        "ldr	lr, [sp, #16]\n\t"
21096#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21097        "str	r4, [lr, #16]\n\t"
21098        "str	r5, [lr, #20]\n\t"
21099#else
21100        "strd	r4, r5, [lr, #16]\n\t"
21101#endif
21102#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21103        "str	r6, [lr, #24]\n\t"
21104        "str	r7, [lr, #28]\n\t"
21105#else
21106        "strd	r6, r7, [lr, #24]\n\t"
21107#endif
21108#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21109        "eor	r8, r4, r4, ror #16\n\t"
21110        "eor	r9, r5, r5, ror #16\n\t"
21111        "eor	r10, r6, r6, ror #16\n\t"
21112        "eor	r11, r7, r7, ror #16\n\t"
21113        "bic	r8, r8, #0xff0000\n\t"
21114        "bic	r9, r9, #0xff0000\n\t"
21115        "bic	r10, r10, #0xff0000\n\t"
21116        "bic	r11, r11, #0xff0000\n\t"
21117        "ror	r4, r4, #8\n\t"
21118        "ror	r5, r5, #8\n\t"
21119        "ror	r6, r6, #8\n\t"
21120        "ror	r7, r7, #8\n\t"
21121        "eor	r4, r4, r8, lsr #8\n\t"
21122        "eor	r5, r5, r9, lsr #8\n\t"
21123        "eor	r6, r6, r10, lsr #8\n\t"
21124        "eor	r7, r7, r11, lsr #8\n\t"
21125#else
21126        "rev	r4, r4\n\t"
21127        "rev	r5, r5\n\t"
21128        "rev	r6, r6\n\t"
21129        "rev	r7, r7\n\t"
21130#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
21131        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
21132        /* Round: 0 - XOR in key schedule */
21133        "eor	r4, r4, r8\n\t"
21134        "eor	r5, r5, r9\n\t"
21135        "eor	r6, r6, r10\n\t"
21136        "eor	r7, r7, r11\n\t"
21137        "mov	r1, #5\n\t"
21138#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
21139        "bl	AES_decrypt_block\n\t"
21140#else
21141        "\n"
21142    "L_AES_CBC_decrypt_block_nr_192_odd_%=:\n\t"
21143#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21144#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21145        "lsl	r8, r7, #8\n\t"
21146        "lsr	r8, r8, #24\n\t"
21147#else
21148        "uxtb	r8, r7, ror #16\n\t"
21149#endif
21150#else
21151        "ubfx	r8, r7, #16, #8\n\t"
21152#endif
21153        "lsr	r11, r4, #24\n\t"
21154#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21155#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21156        "lsl	r12, r6, #16\n\t"
21157        "lsr	r12, r12, #24\n\t"
21158#else
21159        "uxtb	r12, r6, ror #8\n\t"
21160#endif
21161#else
21162        "ubfx	r12, r6, #8, #8\n\t"
21163#endif
21164#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21165#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21166        "lsl	lr, r5, #24\n\t"
21167        "lsr	lr, lr, #24\n\t"
21168#else
21169        "uxtb	lr, r5\n\t"
21170#endif
21171#else
21172        "ubfx	lr, r5, #0, #8\n\t"
21173#endif
21174        "ldr	r8, [r0, r8, lsl #2]\n\t"
21175        "ldr	r11, [r0, r11, lsl #2]\n\t"
21176        "ldr	r12, [r0, r12, lsl #2]\n\t"
21177        "ldr	lr, [r0, lr, lsl #2]\n\t"
21178#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21179#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21180        "lsl	r9, r4, #8\n\t"
21181        "lsr	r9, r9, #24\n\t"
21182#else
21183        "uxtb	r9, r4, ror #16\n\t"
21184#endif
21185#else
21186        "ubfx	r9, r4, #16, #8\n\t"
21187#endif
21188        "eor	r8, r8, r11, ror #24\n\t"
21189        "lsr	r11, r5, #24\n\t"
21190        "eor	r8, r8, r12, ror #8\n\t"
21191#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21192#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21193        "lsl	r12, r7, #16\n\t"
21194        "lsr	r12, r12, #24\n\t"
21195#else
21196        "uxtb	r12, r7, ror #8\n\t"
21197#endif
21198#else
21199        "ubfx	r12, r7, #8, #8\n\t"
21200#endif
21201        "eor	r8, r8, lr, ror #16\n\t"
21202#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21203#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21204        "lsl	lr, r6, #24\n\t"
21205        "lsr	lr, lr, #24\n\t"
21206#else
21207        "uxtb	lr, r6\n\t"
21208#endif
21209#else
21210        "ubfx	lr, r6, #0, #8\n\t"
21211#endif
21212        "ldr	r9, [r0, r9, lsl #2]\n\t"
21213        "ldr	r11, [r0, r11, lsl #2]\n\t"
21214        "ldr	r12, [r0, r12, lsl #2]\n\t"
21215        "ldr	lr, [r0, lr, lsl #2]\n\t"
21216#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21217#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21218        "lsl	r10, r5, #8\n\t"
21219        "lsr	r10, r10, #24\n\t"
21220#else
21221        "uxtb	r10, r5, ror #16\n\t"
21222#endif
21223#else
21224        "ubfx	r10, r5, #16, #8\n\t"
21225#endif
21226        "eor	r9, r9, r11, ror #24\n\t"
21227        "lsr	r11, r6, #24\n\t"
21228        "eor	r9, r9, r12, ror #8\n\t"
21229#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21230#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21231        "lsl	r12, r4, #16\n\t"
21232        "lsr	r12, r12, #24\n\t"
21233#else
21234        "uxtb	r12, r4, ror #8\n\t"
21235#endif
21236#else
21237        "ubfx	r12, r4, #8, #8\n\t"
21238#endif
21239        "eor	r9, r9, lr, ror #16\n\t"
21240#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21241#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21242        "lsl	lr, r7, #24\n\t"
21243        "lsr	lr, lr, #24\n\t"
21244#else
21245        "uxtb	lr, r7\n\t"
21246#endif
21247#else
21248        "ubfx	lr, r7, #0, #8\n\t"
21249#endif
21250        "ldr	r10, [r0, r10, lsl #2]\n\t"
21251        "ldr	r11, [r0, r11, lsl #2]\n\t"
21252        "ldr	r12, [r0, r12, lsl #2]\n\t"
21253        "ldr	lr, [r0, lr, lsl #2]\n\t"
21254#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21255#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21256        "lsl	r4, r4, #24\n\t"
21257        "lsr	r4, r4, #24\n\t"
21258#else
21259        "uxtb	r4, r4\n\t"
21260#endif
21261#else
21262        "ubfx	r4, r4, #0, #8\n\t"
21263#endif
21264        "eor	r10, r10, r11, ror #24\n\t"
21265#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21266#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21267        "lsl	r11, r6, #8\n\t"
21268        "lsr	r11, r11, #24\n\t"
21269#else
21270        "uxtb	r11, r6, ror #16\n\t"
21271#endif
21272#else
21273        "ubfx	r11, r6, #16, #8\n\t"
21274#endif
21275        "eor	r10, r10, r12, ror #8\n\t"
21276        "lsr	r12, r7, #24\n\t"
21277        "eor	r10, r10, lr, ror #16\n\t"
21278#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21279#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21280        "lsl	lr, r5, #16\n\t"
21281        "lsr	lr, lr, #24\n\t"
21282#else
21283        "uxtb	lr, r5, ror #8\n\t"
21284#endif
21285#else
21286        "ubfx	lr, r5, #8, #8\n\t"
21287#endif
21288        "ldr	r4, [r0, r4, lsl #2]\n\t"
21289        "ldr	r12, [r0, r12, lsl #2]\n\t"
21290        "ldr	r11, [r0, r11, lsl #2]\n\t"
21291        "ldr	lr, [r0, lr, lsl #2]\n\t"
21292        "eor	r12, r12, r4, ror #24\n\t"
21293        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
21294        "eor	r11, r11, lr, ror #8\n\t"
21295        "eor	r11, r11, r12, ror #24\n\t"
21296        /*   XOR in Key Schedule */
21297        "eor	r8, r8, r4\n\t"
21298        "eor	r9, r9, r5\n\t"
21299        "eor	r10, r10, r6\n\t"
21300        "eor	r11, r11, r7\n\t"
21301#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21302#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21303        "lsl	r4, r11, #8\n\t"
21304        "lsr	r4, r4, #24\n\t"
21305#else
21306        "uxtb	r4, r11, ror #16\n\t"
21307#endif
21308#else
21309        "ubfx	r4, r11, #16, #8\n\t"
21310#endif
21311        "lsr	r7, r8, #24\n\t"
21312#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21313#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21314        "lsl	r12, r10, #16\n\t"
21315        "lsr	r12, r12, #24\n\t"
21316#else
21317        "uxtb	r12, r10, ror #8\n\t"
21318#endif
21319#else
21320        "ubfx	r12, r10, #8, #8\n\t"
21321#endif
21322#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21323#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21324        "lsl	lr, r9, #24\n\t"
21325        "lsr	lr, lr, #24\n\t"
21326#else
21327        "uxtb	lr, r9\n\t"
21328#endif
21329#else
21330        "ubfx	lr, r9, #0, #8\n\t"
21331#endif
21332        "ldr	r4, [r0, r4, lsl #2]\n\t"
21333        "ldr	r7, [r0, r7, lsl #2]\n\t"
21334        "ldr	r12, [r0, r12, lsl #2]\n\t"
21335        "ldr	lr, [r0, lr, lsl #2]\n\t"
21336#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21337#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21338        "lsl	r5, r8, #8\n\t"
21339        "lsr	r5, r5, #24\n\t"
21340#else
21341        "uxtb	r5, r8, ror #16\n\t"
21342#endif
21343#else
21344        "ubfx	r5, r8, #16, #8\n\t"
21345#endif
21346        "eor	r4, r4, r7, ror #24\n\t"
21347        "lsr	r7, r9, #24\n\t"
21348        "eor	r4, r4, r12, ror #8\n\t"
21349#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21350#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21351        "lsl	r12, r11, #16\n\t"
21352        "lsr	r12, r12, #24\n\t"
21353#else
21354        "uxtb	r12, r11, ror #8\n\t"
21355#endif
21356#else
21357        "ubfx	r12, r11, #8, #8\n\t"
21358#endif
21359        "eor	r4, r4, lr, ror #16\n\t"
21360#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21361#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21362        "lsl	lr, r10, #24\n\t"
21363        "lsr	lr, lr, #24\n\t"
21364#else
21365        "uxtb	lr, r10\n\t"
21366#endif
21367#else
21368        "ubfx	lr, r10, #0, #8\n\t"
21369#endif
21370        "ldr	r5, [r0, r5, lsl #2]\n\t"
21371        "ldr	r7, [r0, r7, lsl #2]\n\t"
21372        "ldr	r12, [r0, r12, lsl #2]\n\t"
21373        "ldr	lr, [r0, lr, lsl #2]\n\t"
21374#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21375#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21376        "lsl	r6, r9, #8\n\t"
21377        "lsr	r6, r6, #24\n\t"
21378#else
21379        "uxtb	r6, r9, ror #16\n\t"
21380#endif
21381#else
21382        "ubfx	r6, r9, #16, #8\n\t"
21383#endif
21384        "eor	r5, r5, r7, ror #24\n\t"
21385        "lsr	r7, r10, #24\n\t"
21386        "eor	r5, r5, r12, ror #8\n\t"
21387#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21388#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21389        "lsl	r12, r8, #16\n\t"
21390        "lsr	r12, r12, #24\n\t"
21391#else
21392        "uxtb	r12, r8, ror #8\n\t"
21393#endif
21394#else
21395        "ubfx	r12, r8, #8, #8\n\t"
21396#endif
21397        "eor	r5, r5, lr, ror #16\n\t"
21398#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21399#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21400        "lsl	lr, r11, #24\n\t"
21401        "lsr	lr, lr, #24\n\t"
21402#else
21403        "uxtb	lr, r11\n\t"
21404#endif
21405#else
21406        "ubfx	lr, r11, #0, #8\n\t"
21407#endif
21408        "ldr	r6, [r0, r6, lsl #2]\n\t"
21409        "ldr	r7, [r0, r7, lsl #2]\n\t"
21410        "ldr	r12, [r0, r12, lsl #2]\n\t"
21411        "ldr	lr, [r0, lr, lsl #2]\n\t"
21412#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21413#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21414        "lsl	r8, r8, #24\n\t"
21415        "lsr	r8, r8, #24\n\t"
21416#else
21417        "uxtb	r8, r8\n\t"
21418#endif
21419#else
21420        "ubfx	r8, r8, #0, #8\n\t"
21421#endif
21422        "eor	r6, r6, r7, ror #24\n\t"
21423#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21425        "lsl	r7, r10, #8\n\t"
21426        "lsr	r7, r7, #24\n\t"
21427#else
21428        "uxtb	r7, r10, ror #16\n\t"
21429#endif
21430#else
21431        "ubfx	r7, r10, #16, #8\n\t"
21432#endif
21433        "eor	r6, r6, r12, ror #8\n\t"
21434        "lsr	r12, r11, #24\n\t"
21435        "eor	r6, r6, lr, ror #16\n\t"
21436#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21437#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21438        "lsl	lr, r9, #16\n\t"
21439        "lsr	lr, lr, #24\n\t"
21440#else
21441        "uxtb	lr, r9, ror #8\n\t"
21442#endif
21443#else
21444        "ubfx	lr, r9, #8, #8\n\t"
21445#endif
21446        "ldr	r8, [r0, r8, lsl #2]\n\t"
21447        "ldr	r12, [r0, r12, lsl #2]\n\t"
21448        "ldr	r7, [r0, r7, lsl #2]\n\t"
21449        "ldr	lr, [r0, lr, lsl #2]\n\t"
21450        "eor	r12, r12, r8, ror #24\n\t"
21451        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
21452        "eor	r7, r7, lr, ror #8\n\t"
21453        "eor	r7, r7, r12, ror #24\n\t"
21454        /*   XOR in Key Schedule */
21455        "eor	r4, r4, r8\n\t"
21456        "eor	r5, r5, r9\n\t"
21457        "eor	r6, r6, r10\n\t"
21458        "eor	r7, r7, r11\n\t"
21459        "subs	r1, r1, #1\n\t"
21460        "bne	L_AES_CBC_decrypt_block_nr_192_odd_%=\n\t"
21461#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21462#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21463        "lsl	r8, r7, #8\n\t"
21464        "lsr	r8, r8, #24\n\t"
21465#else
21466        "uxtb	r8, r7, ror #16\n\t"
21467#endif
21468#else
21469        "ubfx	r8, r7, #16, #8\n\t"
21470#endif
21471        "lsr	r11, r4, #24\n\t"
21472#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21473#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21474        "lsl	r12, r6, #16\n\t"
21475        "lsr	r12, r12, #24\n\t"
21476#else
21477        "uxtb	r12, r6, ror #8\n\t"
21478#endif
21479#else
21480        "ubfx	r12, r6, #8, #8\n\t"
21481#endif
21482#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21483#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21484        "lsl	lr, r5, #24\n\t"
21485        "lsr	lr, lr, #24\n\t"
21486#else
21487        "uxtb	lr, r5\n\t"
21488#endif
21489#else
21490        "ubfx	lr, r5, #0, #8\n\t"
21491#endif
21492        "ldr	r8, [r0, r8, lsl #2]\n\t"
21493        "ldr	r11, [r0, r11, lsl #2]\n\t"
21494        "ldr	r12, [r0, r12, lsl #2]\n\t"
21495        "ldr	lr, [r0, lr, lsl #2]\n\t"
21496#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21497#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21498        "lsl	r9, r4, #8\n\t"
21499        "lsr	r9, r9, #24\n\t"
21500#else
21501        "uxtb	r9, r4, ror #16\n\t"
21502#endif
21503#else
21504        "ubfx	r9, r4, #16, #8\n\t"
21505#endif
21506        "eor	r8, r8, r11, ror #24\n\t"
21507        "lsr	r11, r5, #24\n\t"
21508        "eor	r8, r8, r12, ror #8\n\t"
21509#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21510#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21511        "lsl	r12, r7, #16\n\t"
21512        "lsr	r12, r12, #24\n\t"
21513#else
21514        "uxtb	r12, r7, ror #8\n\t"
21515#endif
21516#else
21517        "ubfx	r12, r7, #8, #8\n\t"
21518#endif
21519        "eor	r8, r8, lr, ror #16\n\t"
21520#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21521#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21522        "lsl	lr, r6, #24\n\t"
21523        "lsr	lr, lr, #24\n\t"
21524#else
21525        "uxtb	lr, r6\n\t"
21526#endif
21527#else
21528        "ubfx	lr, r6, #0, #8\n\t"
21529#endif
21530        "ldr	r9, [r0, r9, lsl #2]\n\t"
21531        "ldr	r11, [r0, r11, lsl #2]\n\t"
21532        "ldr	r12, [r0, r12, lsl #2]\n\t"
21533        "ldr	lr, [r0, lr, lsl #2]\n\t"
21534#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21535#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21536        "lsl	r10, r5, #8\n\t"
21537        "lsr	r10, r10, #24\n\t"
21538#else
21539        "uxtb	r10, r5, ror #16\n\t"
21540#endif
21541#else
21542        "ubfx	r10, r5, #16, #8\n\t"
21543#endif
21544        "eor	r9, r9, r11, ror #24\n\t"
21545        "lsr	r11, r6, #24\n\t"
21546        "eor	r9, r9, r12, ror #8\n\t"
21547#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21548#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21549        "lsl	r12, r4, #16\n\t"
21550        "lsr	r12, r12, #24\n\t"
21551#else
21552        "uxtb	r12, r4, ror #8\n\t"
21553#endif
21554#else
21555        "ubfx	r12, r4, #8, #8\n\t"
21556#endif
21557        "eor	r9, r9, lr, ror #16\n\t"
21558#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21559#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21560        "lsl	lr, r7, #24\n\t"
21561        "lsr	lr, lr, #24\n\t"
21562#else
21563        "uxtb	lr, r7\n\t"
21564#endif
21565#else
21566        "ubfx	lr, r7, #0, #8\n\t"
21567#endif
21568        "ldr	r10, [r0, r10, lsl #2]\n\t"
21569        "ldr	r11, [r0, r11, lsl #2]\n\t"
21570        "ldr	r12, [r0, r12, lsl #2]\n\t"
21571        "ldr	lr, [r0, lr, lsl #2]\n\t"
21572#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21573#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21574        "lsl	r4, r4, #24\n\t"
21575        "lsr	r4, r4, #24\n\t"
21576#else
21577        "uxtb	r4, r4\n\t"
21578#endif
21579#else
21580        "ubfx	r4, r4, #0, #8\n\t"
21581#endif
21582        "eor	r10, r10, r11, ror #24\n\t"
21583#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21584#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21585        "lsl	r11, r6, #8\n\t"
21586        "lsr	r11, r11, #24\n\t"
21587#else
21588        "uxtb	r11, r6, ror #16\n\t"
21589#endif
21590#else
21591        "ubfx	r11, r6, #16, #8\n\t"
21592#endif
21593        "eor	r10, r10, r12, ror #8\n\t"
21594        "lsr	r12, r7, #24\n\t"
21595        "eor	r10, r10, lr, ror #16\n\t"
21596#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21597#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21598        "lsl	lr, r5, #16\n\t"
21599        "lsr	lr, lr, #24\n\t"
21600#else
21601        "uxtb	lr, r5, ror #8\n\t"
21602#endif
21603#else
21604        "ubfx	lr, r5, #8, #8\n\t"
21605#endif
21606        "ldr	r4, [r0, r4, lsl #2]\n\t"
21607        "ldr	r12, [r0, r12, lsl #2]\n\t"
21608        "ldr	r11, [r0, r11, lsl #2]\n\t"
21609        "ldr	lr, [r0, lr, lsl #2]\n\t"
21610        "eor	r12, r12, r4, ror #24\n\t"
21611        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
21612        "eor	r11, r11, lr, ror #8\n\t"
21613        "eor	r11, r11, r12, ror #24\n\t"
21614        /*   XOR in Key Schedule */
21615        "eor	r8, r8, r4\n\t"
21616        "eor	r9, r9, r5\n\t"
21617        "eor	r10, r10, r6\n\t"
21618        "eor	r11, r11, r7\n\t"
21619#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21620#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21621        "lsl	r4, r9, #24\n\t"
21622        "lsr	r4, r4, #24\n\t"
21623#else
21624        "uxtb	r4, r9\n\t"
21625#endif
21626#else
21627        "ubfx	r4, r9, #0, #8\n\t"
21628#endif
21629#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21630#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21631        "lsl	r7, r10, #16\n\t"
21632        "lsr	r7, r7, #24\n\t"
21633#else
21634        "uxtb	r7, r10, ror #8\n\t"
21635#endif
21636#else
21637        "ubfx	r7, r10, #8, #8\n\t"
21638#endif
21639#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21640#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21641        "lsl	r12, r11, #8\n\t"
21642        "lsr	r12, r12, #24\n\t"
21643#else
21644        "uxtb	r12, r11, ror #16\n\t"
21645#endif
21646#else
21647        "ubfx	r12, r11, #16, #8\n\t"
21648#endif
21649        "lsr	lr, r8, #24\n\t"
21650        "ldrb	r4, [r2, r4]\n\t"
21651        "ldrb	r7, [r2, r7]\n\t"
21652        "ldrb	r12, [r2, r12]\n\t"
21653        "ldrb	lr, [r2, lr]\n\t"
21654#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21655#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21656        "lsl	r5, r10, #24\n\t"
21657        "lsr	r5, r5, #24\n\t"
21658#else
21659        "uxtb	r5, r10\n\t"
21660#endif
21661#else
21662        "ubfx	r5, r10, #0, #8\n\t"
21663#endif
21664        "eor	r4, r4, r7, lsl #8\n\t"
21665#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21666#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21667        "lsl	r7, r11, #16\n\t"
21668        "lsr	r7, r7, #24\n\t"
21669#else
21670        "uxtb	r7, r11, ror #8\n\t"
21671#endif
21672#else
21673        "ubfx	r7, r11, #8, #8\n\t"
21674#endif
21675        "eor	r4, r4, r12, lsl #16\n\t"
21676#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21677#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21678        "lsl	r12, r8, #8\n\t"
21679        "lsr	r12, r12, #24\n\t"
21680#else
21681        "uxtb	r12, r8, ror #16\n\t"
21682#endif
21683#else
21684        "ubfx	r12, r8, #16, #8\n\t"
21685#endif
21686        "eor	r4, r4, lr, lsl #24\n\t"
21687        "lsr	lr, r9, #24\n\t"
21688        "ldrb	r7, [r2, r7]\n\t"
21689        "ldrb	lr, [r2, lr]\n\t"
21690        "ldrb	r5, [r2, r5]\n\t"
21691        "ldrb	r12, [r2, r12]\n\t"
21692#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21693#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21694        "lsl	r6, r11, #24\n\t"
21695        "lsr	r6, r6, #24\n\t"
21696#else
21697        "uxtb	r6, r11\n\t"
21698#endif
21699#else
21700        "ubfx	r6, r11, #0, #8\n\t"
21701#endif
21702        "eor	r5, r5, r7, lsl #8\n\t"
21703#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21704#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21705        "lsl	r7, r8, #16\n\t"
21706        "lsr	r7, r7, #24\n\t"
21707#else
21708        "uxtb	r7, r8, ror #8\n\t"
21709#endif
21710#else
21711        "ubfx	r7, r8, #8, #8\n\t"
21712#endif
21713        "eor	r5, r5, r12, lsl #16\n\t"
21714#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21715#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21716        "lsl	r12, r9, #8\n\t"
21717        "lsr	r12, r12, #24\n\t"
21718#else
21719        "uxtb	r12, r9, ror #16\n\t"
21720#endif
21721#else
21722        "ubfx	r12, r9, #16, #8\n\t"
21723#endif
21724        "eor	r5, r5, lr, lsl #24\n\t"
21725        "lsr	lr, r10, #24\n\t"
21726        "ldrb	r7, [r2, r7]\n\t"
21727        "ldrb	lr, [r2, lr]\n\t"
21728        "ldrb	r6, [r2, r6]\n\t"
21729        "ldrb	r12, [r2, r12]\n\t"
21730        "lsr	r11, r11, #24\n\t"
21731        "eor	r6, r6, r7, lsl #8\n\t"
21732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21733#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21734        "lsl	r7, r8, #24\n\t"
21735        "lsr	r7, r7, #24\n\t"
21736#else
21737        "uxtb	r7, r8\n\t"
21738#endif
21739#else
21740        "ubfx	r7, r8, #0, #8\n\t"
21741#endif
21742        "eor	r6, r6, r12, lsl #16\n\t"
21743#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21744#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21745        "lsl	r12, r9, #16\n\t"
21746        "lsr	r12, r12, #24\n\t"
21747#else
21748        "uxtb	r12, r9, ror #8\n\t"
21749#endif
21750#else
21751        "ubfx	r12, r9, #8, #8\n\t"
21752#endif
21753        "eor	r6, r6, lr, lsl #24\n\t"
21754#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21755#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21756        "lsl	lr, r10, #8\n\t"
21757        "lsr	lr, lr, #24\n\t"
21758#else
21759        "uxtb	lr, r10, ror #16\n\t"
21760#endif
21761#else
21762        "ubfx	lr, r10, #16, #8\n\t"
21763#endif
21764        "ldrb	r11, [r2, r11]\n\t"
21765        "ldrb	r12, [r2, r12]\n\t"
21766        "ldrb	r7, [r2, r7]\n\t"
21767        "ldrb	lr, [r2, lr]\n\t"
21768        "eor	r12, r12, r11, lsl #16\n\t"
21769        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
21770        "eor	r7, r7, r12, lsl #8\n\t"
21771        "eor	r7, r7, lr, lsl #16\n\t"
21772        /*   XOR in Key Schedule */
21773        "eor	r4, r4, r8\n\t"
21774        "eor	r5, r5, r9\n\t"
21775        "eor	r6, r6, r10\n\t"
21776        "eor	r7, r7, r11\n\t"
21777#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
21778        "ldr	lr, [sp, #16]\n\t"
21779#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21780        "eor	r8, r4, r4, ror #16\n\t"
21781        "eor	r9, r5, r5, ror #16\n\t"
21782        "eor	r10, r6, r6, ror #16\n\t"
21783        "eor	r11, r7, r7, ror #16\n\t"
21784        "bic	r8, r8, #0xff0000\n\t"
21785        "bic	r9, r9, #0xff0000\n\t"
21786        "bic	r10, r10, #0xff0000\n\t"
21787        "bic	r11, r11, #0xff0000\n\t"
21788        "ror	r4, r4, #8\n\t"
21789        "ror	r5, r5, #8\n\t"
21790        "ror	r6, r6, #8\n\t"
21791        "ror	r7, r7, #8\n\t"
21792        "eor	r4, r4, r8, lsr #8\n\t"
21793        "eor	r5, r5, r9, lsr #8\n\t"
21794        "eor	r6, r6, r10, lsr #8\n\t"
21795        "eor	r7, r7, r11, lsr #8\n\t"
21796#else
21797        "rev	r4, r4\n\t"
21798        "rev	r5, r5\n\t"
21799        "rev	r6, r6\n\t"
21800        "rev	r7, r7\n\t"
21801#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
21802        "ldm	lr, {r8, r9, r10, r11}\n\t"
21803        "pop	{r1, r12, lr}\n\t"
21804        "ldr	%[ks], [sp]\n\t"
21805        "eor	r4, r4, r8\n\t"
21806        "eor	r5, r5, r9\n\t"
21807        "eor	r6, r6, r10\n\t"
21808        "eor	r7, r7, r11\n\t"
21809        "str	r4, [%[out]]\n\t"
21810        "str	r5, [%[out], #4]\n\t"
21811        "str	r6, [%[out], #8]\n\t"
21812        "str	r7, [%[out], #12]\n\t"
21813        "subs	r12, r12, #16\n\t"
21814        "add	lr, lr, #16\n\t"
21815        "add	%[out], %[out], #16\n\t"
21816        "beq	L_AES_CBC_decrypt_end_odd_%=\n\t"
21817        "push	{r1, r12, lr}\n\t"
21818        "ldr	r4, [lr]\n\t"
21819        "ldr	r5, [lr, #4]\n\t"
21820        "ldr	r6, [lr, #8]\n\t"
21821        "ldr	r7, [lr, #12]\n\t"
21822        "ldr	lr, [sp, #16]\n\t"
21823#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21824        "stm	lr, {r4, r5}\n\t"
21825#else
21826        "strd	r4, r5, [lr]\n\t"
21827#endif
21828#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21829        "str	r6, [lr, #8]\n\t"
21830        "str	r7, [lr, #12]\n\t"
21831#else
21832        "strd	r6, r7, [lr, #8]\n\t"
21833#endif
21834#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21835        "eor	r8, r4, r4, ror #16\n\t"
21836        "eor	r9, r5, r5, ror #16\n\t"
21837        "eor	r10, r6, r6, ror #16\n\t"
21838        "eor	r11, r7, r7, ror #16\n\t"
21839        "bic	r8, r8, #0xff0000\n\t"
21840        "bic	r9, r9, #0xff0000\n\t"
21841        "bic	r10, r10, #0xff0000\n\t"
21842        "bic	r11, r11, #0xff0000\n\t"
21843        "ror	r4, r4, #8\n\t"
21844        "ror	r5, r5, #8\n\t"
21845        "ror	r6, r6, #8\n\t"
21846        "ror	r7, r7, #8\n\t"
21847        "eor	r4, r4, r8, lsr #8\n\t"
21848        "eor	r5, r5, r9, lsr #8\n\t"
21849        "eor	r6, r6, r10, lsr #8\n\t"
21850        "eor	r7, r7, r11, lsr #8\n\t"
21851#else
21852        "rev	r4, r4\n\t"
21853        "rev	r5, r5\n\t"
21854        "rev	r6, r6\n\t"
21855        "rev	r7, r7\n\t"
21856#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
21857        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
21858        /* Round: 0 - XOR in key schedule */
21859        "eor	r4, r4, r8\n\t"
21860        "eor	r5, r5, r9\n\t"
21861        "eor	r6, r6, r10\n\t"
21862        "eor	r7, r7, r11\n\t"
21863        "mov	r1, #5\n\t"
21864#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
21865        "bl	AES_decrypt_block\n\t"
21866#else
21867        "\n"
21868    "L_AES_CBC_decrypt_block_nr_192_even_%=:\n\t"
21869#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21871        "lsl	r8, r7, #8\n\t"
21872        "lsr	r8, r8, #24\n\t"
21873#else
21874        "uxtb	r8, r7, ror #16\n\t"
21875#endif
21876#else
21877        "ubfx	r8, r7, #16, #8\n\t"
21878#endif
21879        "lsr	r11, r4, #24\n\t"
21880#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21881#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21882        "lsl	r12, r6, #16\n\t"
21883        "lsr	r12, r12, #24\n\t"
21884#else
21885        "uxtb	r12, r6, ror #8\n\t"
21886#endif
21887#else
21888        "ubfx	r12, r6, #8, #8\n\t"
21889#endif
21890#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21891#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21892        "lsl	lr, r5, #24\n\t"
21893        "lsr	lr, lr, #24\n\t"
21894#else
21895        "uxtb	lr, r5\n\t"
21896#endif
21897#else
21898        "ubfx	lr, r5, #0, #8\n\t"
21899#endif
21900        "ldr	r8, [r0, r8, lsl #2]\n\t"
21901        "ldr	r11, [r0, r11, lsl #2]\n\t"
21902        "ldr	r12, [r0, r12, lsl #2]\n\t"
21903        "ldr	lr, [r0, lr, lsl #2]\n\t"
21904#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21906        "lsl	r9, r4, #8\n\t"
21907        "lsr	r9, r9, #24\n\t"
21908#else
21909        "uxtb	r9, r4, ror #16\n\t"
21910#endif
21911#else
21912        "ubfx	r9, r4, #16, #8\n\t"
21913#endif
21914        "eor	r8, r8, r11, ror #24\n\t"
21915        "lsr	r11, r5, #24\n\t"
21916        "eor	r8, r8, r12, ror #8\n\t"
21917#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21918#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21919        "lsl	r12, r7, #16\n\t"
21920        "lsr	r12, r12, #24\n\t"
21921#else
21922        "uxtb	r12, r7, ror #8\n\t"
21923#endif
21924#else
21925        "ubfx	r12, r7, #8, #8\n\t"
21926#endif
21927        "eor	r8, r8, lr, ror #16\n\t"
21928#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21930        "lsl	lr, r6, #24\n\t"
21931        "lsr	lr, lr, #24\n\t"
21932#else
21933        "uxtb	lr, r6\n\t"
21934#endif
21935#else
21936        "ubfx	lr, r6, #0, #8\n\t"
21937#endif
21938        "ldr	r9, [r0, r9, lsl #2]\n\t"
21939        "ldr	r11, [r0, r11, lsl #2]\n\t"
21940        "ldr	r12, [r0, r12, lsl #2]\n\t"
21941        "ldr	lr, [r0, lr, lsl #2]\n\t"
21942#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21943#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21944        "lsl	r10, r5, #8\n\t"
21945        "lsr	r10, r10, #24\n\t"
21946#else
21947        "uxtb	r10, r5, ror #16\n\t"
21948#endif
21949#else
21950        "ubfx	r10, r5, #16, #8\n\t"
21951#endif
21952        "eor	r9, r9, r11, ror #24\n\t"
21953        "lsr	r11, r6, #24\n\t"
21954        "eor	r9, r9, r12, ror #8\n\t"
21955#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21956#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21957        "lsl	r12, r4, #16\n\t"
21958        "lsr	r12, r12, #24\n\t"
21959#else
21960        "uxtb	r12, r4, ror #8\n\t"
21961#endif
21962#else
21963        "ubfx	r12, r4, #8, #8\n\t"
21964#endif
21965        "eor	r9, r9, lr, ror #16\n\t"
21966#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21967#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21968        "lsl	lr, r7, #24\n\t"
21969        "lsr	lr, lr, #24\n\t"
21970#else
21971        "uxtb	lr, r7\n\t"
21972#endif
21973#else
21974        "ubfx	lr, r7, #0, #8\n\t"
21975#endif
21976        "ldr	r10, [r0, r10, lsl #2]\n\t"
21977        "ldr	r11, [r0, r11, lsl #2]\n\t"
21978        "ldr	r12, [r0, r12, lsl #2]\n\t"
21979        "ldr	lr, [r0, lr, lsl #2]\n\t"
21980#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21981#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21982        "lsl	r4, r4, #24\n\t"
21983        "lsr	r4, r4, #24\n\t"
21984#else
21985        "uxtb	r4, r4\n\t"
21986#endif
21987#else
21988        "ubfx	r4, r4, #0, #8\n\t"
21989#endif
21990        "eor	r10, r10, r11, ror #24\n\t"
21991#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21993        "lsl	r11, r6, #8\n\t"
21994        "lsr	r11, r11, #24\n\t"
21995#else
21996        "uxtb	r11, r6, ror #16\n\t"
21997#endif
21998#else
21999        "ubfx	r11, r6, #16, #8\n\t"
22000#endif
22001        "eor	r10, r10, r12, ror #8\n\t"
22002        "lsr	r12, r7, #24\n\t"
22003        "eor	r10, r10, lr, ror #16\n\t"
22004#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22005#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22006        "lsl	lr, r5, #16\n\t"
22007        "lsr	lr, lr, #24\n\t"
22008#else
22009        "uxtb	lr, r5, ror #8\n\t"
22010#endif
22011#else
22012        "ubfx	lr, r5, #8, #8\n\t"
22013#endif
22014        "ldr	r4, [r0, r4, lsl #2]\n\t"
22015        "ldr	r12, [r0, r12, lsl #2]\n\t"
22016        "ldr	r11, [r0, r11, lsl #2]\n\t"
22017        "ldr	lr, [r0, lr, lsl #2]\n\t"
22018        "eor	r12, r12, r4, ror #24\n\t"
22019        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
22020        "eor	r11, r11, lr, ror #8\n\t"
22021        "eor	r11, r11, r12, ror #24\n\t"
22022        /*   XOR in Key Schedule */
22023        "eor	r8, r8, r4\n\t"
22024        "eor	r9, r9, r5\n\t"
22025        "eor	r10, r10, r6\n\t"
22026        "eor	r11, r11, r7\n\t"
22027#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22028#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22029        "lsl	r4, r11, #8\n\t"
22030        "lsr	r4, r4, #24\n\t"
22031#else
22032        "uxtb	r4, r11, ror #16\n\t"
22033#endif
22034#else
22035        "ubfx	r4, r11, #16, #8\n\t"
22036#endif
22037        "lsr	r7, r8, #24\n\t"
22038#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22039#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22040        "lsl	r12, r10, #16\n\t"
22041        "lsr	r12, r12, #24\n\t"
22042#else
22043        "uxtb	r12, r10, ror #8\n\t"
22044#endif
22045#else
22046        "ubfx	r12, r10, #8, #8\n\t"
22047#endif
22048#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22049#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22050        "lsl	lr, r9, #24\n\t"
22051        "lsr	lr, lr, #24\n\t"
22052#else
22053        "uxtb	lr, r9\n\t"
22054#endif
22055#else
22056        "ubfx	lr, r9, #0, #8\n\t"
22057#endif
22058        "ldr	r4, [r0, r4, lsl #2]\n\t"
22059        "ldr	r7, [r0, r7, lsl #2]\n\t"
22060        "ldr	r12, [r0, r12, lsl #2]\n\t"
22061        "ldr	lr, [r0, lr, lsl #2]\n\t"
22062#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22063#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22064        "lsl	r5, r8, #8\n\t"
22065        "lsr	r5, r5, #24\n\t"
22066#else
22067        "uxtb	r5, r8, ror #16\n\t"
22068#endif
22069#else
22070        "ubfx	r5, r8, #16, #8\n\t"
22071#endif
22072        "eor	r4, r4, r7, ror #24\n\t"
22073        "lsr	r7, r9, #24\n\t"
22074        "eor	r4, r4, r12, ror #8\n\t"
22075#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22077        "lsl	r12, r11, #16\n\t"
22078        "lsr	r12, r12, #24\n\t"
22079#else
22080        "uxtb	r12, r11, ror #8\n\t"
22081#endif
22082#else
22083        "ubfx	r12, r11, #8, #8\n\t"
22084#endif
22085        "eor	r4, r4, lr, ror #16\n\t"
22086#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22087#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22088        "lsl	lr, r10, #24\n\t"
22089        "lsr	lr, lr, #24\n\t"
22090#else
22091        "uxtb	lr, r10\n\t"
22092#endif
22093#else
22094        "ubfx	lr, r10, #0, #8\n\t"
22095#endif
22096        "ldr	r5, [r0, r5, lsl #2]\n\t"
22097        "ldr	r7, [r0, r7, lsl #2]\n\t"
22098        "ldr	r12, [r0, r12, lsl #2]\n\t"
22099        "ldr	lr, [r0, lr, lsl #2]\n\t"
22100#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22101#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22102        "lsl	r6, r9, #8\n\t"
22103        "lsr	r6, r6, #24\n\t"
22104#else
22105        "uxtb	r6, r9, ror #16\n\t"
22106#endif
22107#else
22108        "ubfx	r6, r9, #16, #8\n\t"
22109#endif
22110        "eor	r5, r5, r7, ror #24\n\t"
22111        "lsr	r7, r10, #24\n\t"
22112        "eor	r5, r5, r12, ror #8\n\t"
22113#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22114#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22115        "lsl	r12, r8, #16\n\t"
22116        "lsr	r12, r12, #24\n\t"
22117#else
22118        "uxtb	r12, r8, ror #8\n\t"
22119#endif
22120#else
22121        "ubfx	r12, r8, #8, #8\n\t"
22122#endif
22123        "eor	r5, r5, lr, ror #16\n\t"
22124#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22125#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22126        "lsl	lr, r11, #24\n\t"
22127        "lsr	lr, lr, #24\n\t"
22128#else
22129        "uxtb	lr, r11\n\t"
22130#endif
22131#else
22132        "ubfx	lr, r11, #0, #8\n\t"
22133#endif
22134        "ldr	r6, [r0, r6, lsl #2]\n\t"
22135        "ldr	r7, [r0, r7, lsl #2]\n\t"
22136        "ldr	r12, [r0, r12, lsl #2]\n\t"
22137        "ldr	lr, [r0, lr, lsl #2]\n\t"
22138#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22139#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22140        "lsl	r8, r8, #24\n\t"
22141        "lsr	r8, r8, #24\n\t"
22142#else
22143        "uxtb	r8, r8\n\t"
22144#endif
22145#else
22146        "ubfx	r8, r8, #0, #8\n\t"
22147#endif
22148        "eor	r6, r6, r7, ror #24\n\t"
22149#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22150#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22151        "lsl	r7, r10, #8\n\t"
22152        "lsr	r7, r7, #24\n\t"
22153#else
22154        "uxtb	r7, r10, ror #16\n\t"
22155#endif
22156#else
22157        "ubfx	r7, r10, #16, #8\n\t"
22158#endif
22159        "eor	r6, r6, r12, ror #8\n\t"
22160        "lsr	r12, r11, #24\n\t"
22161        "eor	r6, r6, lr, ror #16\n\t"
22162#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22164        "lsl	lr, r9, #16\n\t"
22165        "lsr	lr, lr, #24\n\t"
22166#else
22167        "uxtb	lr, r9, ror #8\n\t"
22168#endif
22169#else
22170        "ubfx	lr, r9, #8, #8\n\t"
22171#endif
22172        "ldr	r8, [r0, r8, lsl #2]\n\t"
22173        "ldr	r12, [r0, r12, lsl #2]\n\t"
22174        "ldr	r7, [r0, r7, lsl #2]\n\t"
22175        "ldr	lr, [r0, lr, lsl #2]\n\t"
22176        "eor	r12, r12, r8, ror #24\n\t"
22177        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
22178        "eor	r7, r7, lr, ror #8\n\t"
22179        "eor	r7, r7, r12, ror #24\n\t"
22180        /*   XOR in Key Schedule */
22181        "eor	r4, r4, r8\n\t"
22182        "eor	r5, r5, r9\n\t"
22183        "eor	r6, r6, r10\n\t"
22184        "eor	r7, r7, r11\n\t"
22185        "subs	r1, r1, #1\n\t"
22186        "bne	L_AES_CBC_decrypt_block_nr_192_even_%=\n\t"
22187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22188#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22189        "lsl	r8, r7, #8\n\t"
22190        "lsr	r8, r8, #24\n\t"
22191#else
22192        "uxtb	r8, r7, ror #16\n\t"
22193#endif
22194#else
22195        "ubfx	r8, r7, #16, #8\n\t"
22196#endif
22197        "lsr	r11, r4, #24\n\t"
22198#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22200        "lsl	r12, r6, #16\n\t"
22201        "lsr	r12, r12, #24\n\t"
22202#else
22203        "uxtb	r12, r6, ror #8\n\t"
22204#endif
22205#else
22206        "ubfx	r12, r6, #8, #8\n\t"
22207#endif
22208#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22209#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22210        "lsl	lr, r5, #24\n\t"
22211        "lsr	lr, lr, #24\n\t"
22212#else
22213        "uxtb	lr, r5\n\t"
22214#endif
22215#else
22216        "ubfx	lr, r5, #0, #8\n\t"
22217#endif
22218        "ldr	r8, [r0, r8, lsl #2]\n\t"
22219        "ldr	r11, [r0, r11, lsl #2]\n\t"
22220        "ldr	r12, [r0, r12, lsl #2]\n\t"
22221        "ldr	lr, [r0, lr, lsl #2]\n\t"
22222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22223#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22224        "lsl	r9, r4, #8\n\t"
22225        "lsr	r9, r9, #24\n\t"
22226#else
22227        "uxtb	r9, r4, ror #16\n\t"
22228#endif
22229#else
22230        "ubfx	r9, r4, #16, #8\n\t"
22231#endif
22232        "eor	r8, r8, r11, ror #24\n\t"
22233        "lsr	r11, r5, #24\n\t"
22234        "eor	r8, r8, r12, ror #8\n\t"
22235#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22236#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22237        "lsl	r12, r7, #16\n\t"
22238        "lsr	r12, r12, #24\n\t"
22239#else
22240        "uxtb	r12, r7, ror #8\n\t"
22241#endif
22242#else
22243        "ubfx	r12, r7, #8, #8\n\t"
22244#endif
22245        "eor	r8, r8, lr, ror #16\n\t"
22246#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22247#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22248        "lsl	lr, r6, #24\n\t"
22249        "lsr	lr, lr, #24\n\t"
22250#else
22251        "uxtb	lr, r6\n\t"
22252#endif
22253#else
22254        "ubfx	lr, r6, #0, #8\n\t"
22255#endif
22256        "ldr	r9, [r0, r9, lsl #2]\n\t"
22257        "ldr	r11, [r0, r11, lsl #2]\n\t"
22258        "ldr	r12, [r0, r12, lsl #2]\n\t"
22259        "ldr	lr, [r0, lr, lsl #2]\n\t"
22260#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22261#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22262        "lsl	r10, r5, #8\n\t"
22263        "lsr	r10, r10, #24\n\t"
22264#else
22265        "uxtb	r10, r5, ror #16\n\t"
22266#endif
22267#else
22268        "ubfx	r10, r5, #16, #8\n\t"
22269#endif
22270        "eor	r9, r9, r11, ror #24\n\t"
22271        "lsr	r11, r6, #24\n\t"
22272        "eor	r9, r9, r12, ror #8\n\t"
22273#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22274#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22275        "lsl	r12, r4, #16\n\t"
22276        "lsr	r12, r12, #24\n\t"
22277#else
22278        "uxtb	r12, r4, ror #8\n\t"
22279#endif
22280#else
22281        "ubfx	r12, r4, #8, #8\n\t"
22282#endif
22283        "eor	r9, r9, lr, ror #16\n\t"
22284#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22285#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22286        "lsl	lr, r7, #24\n\t"
22287        "lsr	lr, lr, #24\n\t"
22288#else
22289        "uxtb	lr, r7\n\t"
22290#endif
22291#else
22292        "ubfx	lr, r7, #0, #8\n\t"
22293#endif
22294        "ldr	r10, [r0, r10, lsl #2]\n\t"
22295        "ldr	r11, [r0, r11, lsl #2]\n\t"
22296        "ldr	r12, [r0, r12, lsl #2]\n\t"
22297        "ldr	lr, [r0, lr, lsl #2]\n\t"
22298#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22299#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22300        "lsl	r4, r4, #24\n\t"
22301        "lsr	r4, r4, #24\n\t"
22302#else
22303        "uxtb	r4, r4\n\t"
22304#endif
22305#else
22306        "ubfx	r4, r4, #0, #8\n\t"
22307#endif
22308        "eor	r10, r10, r11, ror #24\n\t"
22309#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22310#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22311        "lsl	r11, r6, #8\n\t"
22312        "lsr	r11, r11, #24\n\t"
22313#else
22314        "uxtb	r11, r6, ror #16\n\t"
22315#endif
22316#else
22317        "ubfx	r11, r6, #16, #8\n\t"
22318#endif
22319        "eor	r10, r10, r12, ror #8\n\t"
22320        "lsr	r12, r7, #24\n\t"
22321        "eor	r10, r10, lr, ror #16\n\t"
22322#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22323#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22324        "lsl	lr, r5, #16\n\t"
22325        "lsr	lr, lr, #24\n\t"
22326#else
22327        "uxtb	lr, r5, ror #8\n\t"
22328#endif
22329#else
22330        "ubfx	lr, r5, #8, #8\n\t"
22331#endif
22332        "ldr	r4, [r0, r4, lsl #2]\n\t"
22333        "ldr	r12, [r0, r12, lsl #2]\n\t"
22334        "ldr	r11, [r0, r11, lsl #2]\n\t"
22335        "ldr	lr, [r0, lr, lsl #2]\n\t"
22336        "eor	r12, r12, r4, ror #24\n\t"
22337        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
22338        "eor	r11, r11, lr, ror #8\n\t"
22339        "eor	r11, r11, r12, ror #24\n\t"
22340        /*   XOR in Key Schedule */
22341        "eor	r8, r8, r4\n\t"
22342        "eor	r9, r9, r5\n\t"
22343        "eor	r10, r10, r6\n\t"
22344        "eor	r11, r11, r7\n\t"
22345#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22346#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22347        "lsl	r4, r9, #24\n\t"
22348        "lsr	r4, r4, #24\n\t"
22349#else
22350        "uxtb	r4, r9\n\t"
22351#endif
22352#else
22353        "ubfx	r4, r9, #0, #8\n\t"
22354#endif
22355#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22356#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22357        "lsl	r7, r10, #16\n\t"
22358        "lsr	r7, r7, #24\n\t"
22359#else
22360        "uxtb	r7, r10, ror #8\n\t"
22361#endif
22362#else
22363        "ubfx	r7, r10, #8, #8\n\t"
22364#endif
22365#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22366#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22367        "lsl	r12, r11, #8\n\t"
22368        "lsr	r12, r12, #24\n\t"
22369#else
22370        "uxtb	r12, r11, ror #16\n\t"
22371#endif
22372#else
22373        "ubfx	r12, r11, #16, #8\n\t"
22374#endif
22375        "lsr	lr, r8, #24\n\t"
22376        "ldrb	r4, [r2, r4]\n\t"
22377        "ldrb	r7, [r2, r7]\n\t"
22378        "ldrb	r12, [r2, r12]\n\t"
22379        "ldrb	lr, [r2, lr]\n\t"
22380#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22381#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22382        "lsl	r5, r10, #24\n\t"
22383        "lsr	r5, r5, #24\n\t"
22384#else
22385        "uxtb	r5, r10\n\t"
22386#endif
22387#else
22388        "ubfx	r5, r10, #0, #8\n\t"
22389#endif
22390        "eor	r4, r4, r7, lsl #8\n\t"
22391#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22392#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22393        "lsl	r7, r11, #16\n\t"
22394        "lsr	r7, r7, #24\n\t"
22395#else
22396        "uxtb	r7, r11, ror #8\n\t"
22397#endif
22398#else
22399        "ubfx	r7, r11, #8, #8\n\t"
22400#endif
22401        "eor	r4, r4, r12, lsl #16\n\t"
22402#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22403#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22404        "lsl	r12, r8, #8\n\t"
22405        "lsr	r12, r12, #24\n\t"
22406#else
22407        "uxtb	r12, r8, ror #16\n\t"
22408#endif
22409#else
22410        "ubfx	r12, r8, #16, #8\n\t"
22411#endif
22412        "eor	r4, r4, lr, lsl #24\n\t"
22413        "lsr	lr, r9, #24\n\t"
22414        "ldrb	r7, [r2, r7]\n\t"
22415        "ldrb	lr, [r2, lr]\n\t"
22416        "ldrb	r5, [r2, r5]\n\t"
22417        "ldrb	r12, [r2, r12]\n\t"
22418#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22419#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22420        "lsl	r6, r11, #24\n\t"
22421        "lsr	r6, r6, #24\n\t"
22422#else
22423        "uxtb	r6, r11\n\t"
22424#endif
22425#else
22426        "ubfx	r6, r11, #0, #8\n\t"
22427#endif
22428        "eor	r5, r5, r7, lsl #8\n\t"
22429#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22430#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22431        "lsl	r7, r8, #16\n\t"
22432        "lsr	r7, r7, #24\n\t"
22433#else
22434        "uxtb	r7, r8, ror #8\n\t"
22435#endif
22436#else
22437        "ubfx	r7, r8, #8, #8\n\t"
22438#endif
22439        "eor	r5, r5, r12, lsl #16\n\t"
22440#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22441#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22442        "lsl	r12, r9, #8\n\t"
22443        "lsr	r12, r12, #24\n\t"
22444#else
22445        "uxtb	r12, r9, ror #16\n\t"
22446#endif
22447#else
22448        "ubfx	r12, r9, #16, #8\n\t"
22449#endif
22450        "eor	r5, r5, lr, lsl #24\n\t"
22451        "lsr	lr, r10, #24\n\t"
22452        "ldrb	r7, [r2, r7]\n\t"
22453        "ldrb	lr, [r2, lr]\n\t"
22454        "ldrb	r6, [r2, r6]\n\t"
22455        "ldrb	r12, [r2, r12]\n\t"
22456        "lsr	r11, r11, #24\n\t"
22457        "eor	r6, r6, r7, lsl #8\n\t"
22458#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22459#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22460        "lsl	r7, r8, #24\n\t"
22461        "lsr	r7, r7, #24\n\t"
22462#else
22463        "uxtb	r7, r8\n\t"
22464#endif
22465#else
22466        "ubfx	r7, r8, #0, #8\n\t"
22467#endif
22468        "eor	r6, r6, r12, lsl #16\n\t"
22469#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22470#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22471        "lsl	r12, r9, #16\n\t"
22472        "lsr	r12, r12, #24\n\t"
22473#else
22474        "uxtb	r12, r9, ror #8\n\t"
22475#endif
22476#else
22477        "ubfx	r12, r9, #8, #8\n\t"
22478#endif
22479        "eor	r6, r6, lr, lsl #24\n\t"
22480#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22481#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22482        "lsl	lr, r10, #8\n\t"
22483        "lsr	lr, lr, #24\n\t"
22484#else
22485        "uxtb	lr, r10, ror #16\n\t"
22486#endif
22487#else
22488        "ubfx	lr, r10, #16, #8\n\t"
22489#endif
22490        "ldrb	r11, [r2, r11]\n\t"
22491        "ldrb	r12, [r2, r12]\n\t"
22492        "ldrb	r7, [r2, r7]\n\t"
22493        "ldrb	lr, [r2, lr]\n\t"
22494        "eor	r12, r12, r11, lsl #16\n\t"
22495        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
22496        "eor	r7, r7, r12, lsl #8\n\t"
22497        "eor	r7, r7, lr, lsl #16\n\t"
22498        /*   XOR in Key Schedule */
22499        "eor	r4, r4, r8\n\t"
22500        "eor	r5, r5, r9\n\t"
22501        "eor	r6, r6, r10\n\t"
22502        "eor	r7, r7, r11\n\t"
22503#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
22504        "ldr	lr, [sp, #16]\n\t"
22505#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22506        "eor	r8, r4, r4, ror #16\n\t"
22507        "eor	r9, r5, r5, ror #16\n\t"
22508        "eor	r10, r6, r6, ror #16\n\t"
22509        "eor	r11, r7, r7, ror #16\n\t"
22510        "bic	r8, r8, #0xff0000\n\t"
22511        "bic	r9, r9, #0xff0000\n\t"
22512        "bic	r10, r10, #0xff0000\n\t"
22513        "bic	r11, r11, #0xff0000\n\t"
22514        "ror	r4, r4, #8\n\t"
22515        "ror	r5, r5, #8\n\t"
22516        "ror	r6, r6, #8\n\t"
22517        "ror	r7, r7, #8\n\t"
22518        "eor	r4, r4, r8, lsr #8\n\t"
22519        "eor	r5, r5, r9, lsr #8\n\t"
22520        "eor	r6, r6, r10, lsr #8\n\t"
22521        "eor	r7, r7, r11, lsr #8\n\t"
22522#else
22523        "rev	r4, r4\n\t"
22524        "rev	r5, r5\n\t"
22525        "rev	r6, r6\n\t"
22526        "rev	r7, r7\n\t"
22527#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
22528#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22529        "ldr	r8, [lr, #16]\n\t"
22530        "ldr	r9, [lr, #20]\n\t"
22531#else
22532        "ldrd	r8, r9, [lr, #16]\n\t"
22533#endif
22534#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22535        "ldr	r10, [lr, #24]\n\t"
22536        "ldr	r11, [lr, #28]\n\t"
22537#else
22538        "ldrd	r10, r11, [lr, #24]\n\t"
22539#endif
22540        "pop	{r1, r12, lr}\n\t"
22541        "ldr	%[ks], [sp]\n\t"
22542        "eor	r4, r4, r8\n\t"
22543        "eor	r5, r5, r9\n\t"
22544        "eor	r6, r6, r10\n\t"
22545        "eor	r7, r7, r11\n\t"
22546        "str	r4, [%[out]]\n\t"
22547        "str	r5, [%[out], #4]\n\t"
22548        "str	r6, [%[out], #8]\n\t"
22549        "str	r7, [%[out], #12]\n\t"
22550        "subs	r12, r12, #16\n\t"
22551        "add	lr, lr, #16\n\t"
22552        "add	%[out], %[out], #16\n\t"
22553        "bne	L_AES_CBC_decrypt_loop_block_192_%=\n\t"
22554        "b	L_AES_CBC_decrypt_end_%=\n\t"
22555        "\n"
22556    "L_AES_CBC_decrypt_loop_block_128_%=:\n\t"
22557        "push	{r1, r12, lr}\n\t"
22558        "ldr	r4, [lr]\n\t"
22559        "ldr	r5, [lr, #4]\n\t"
22560        "ldr	r6, [lr, #8]\n\t"
22561        "ldr	r7, [lr, #12]\n\t"
22562        "ldr	lr, [sp, #16]\n\t"
22563#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22564        "str	r4, [lr, #16]\n\t"
22565        "str	r5, [lr, #20]\n\t"
22566#else
22567        "strd	r4, r5, [lr, #16]\n\t"
22568#endif
22569#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22570        "str	r6, [lr, #24]\n\t"
22571        "str	r7, [lr, #28]\n\t"
22572#else
22573        "strd	r6, r7, [lr, #24]\n\t"
22574#endif
22575#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22576        "eor	r8, r4, r4, ror #16\n\t"
22577        "eor	r9, r5, r5, ror #16\n\t"
22578        "eor	r10, r6, r6, ror #16\n\t"
22579        "eor	r11, r7, r7, ror #16\n\t"
22580        "bic	r8, r8, #0xff0000\n\t"
22581        "bic	r9, r9, #0xff0000\n\t"
22582        "bic	r10, r10, #0xff0000\n\t"
22583        "bic	r11, r11, #0xff0000\n\t"
22584        "ror	r4, r4, #8\n\t"
22585        "ror	r5, r5, #8\n\t"
22586        "ror	r6, r6, #8\n\t"
22587        "ror	r7, r7, #8\n\t"
22588        "eor	r4, r4, r8, lsr #8\n\t"
22589        "eor	r5, r5, r9, lsr #8\n\t"
22590        "eor	r6, r6, r10, lsr #8\n\t"
22591        "eor	r7, r7, r11, lsr #8\n\t"
22592#else
22593        "rev	r4, r4\n\t"
22594        "rev	r5, r5\n\t"
22595        "rev	r6, r6\n\t"
22596        "rev	r7, r7\n\t"
22597#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
22598        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
22599        /* Round: 0 - XOR in key schedule */
22600        "eor	r4, r4, r8\n\t"
22601        "eor	r5, r5, r9\n\t"
22602        "eor	r6, r6, r10\n\t"
22603        "eor	r7, r7, r11\n\t"
22604        "mov	r1, #4\n\t"
22605#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
22606        "bl	AES_decrypt_block\n\t"
22607#else
22608        "\n"
22609    "L_AES_CBC_decrypt_block_nr_128_odd_%=:\n\t"
22610#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22611#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22612        "lsl	r8, r7, #8\n\t"
22613        "lsr	r8, r8, #24\n\t"
22614#else
22615        "uxtb	r8, r7, ror #16\n\t"
22616#endif
22617#else
22618        "ubfx	r8, r7, #16, #8\n\t"
22619#endif
22620        "lsr	r11, r4, #24\n\t"
22621#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22622#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22623        "lsl	r12, r6, #16\n\t"
22624        "lsr	r12, r12, #24\n\t"
22625#else
22626        "uxtb	r12, r6, ror #8\n\t"
22627#endif
22628#else
22629        "ubfx	r12, r6, #8, #8\n\t"
22630#endif
22631#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22632#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22633        "lsl	lr, r5, #24\n\t"
22634        "lsr	lr, lr, #24\n\t"
22635#else
22636        "uxtb	lr, r5\n\t"
22637#endif
22638#else
22639        "ubfx	lr, r5, #0, #8\n\t"
22640#endif
22641        "ldr	r8, [r0, r8, lsl #2]\n\t"
22642        "ldr	r11, [r0, r11, lsl #2]\n\t"
22643        "ldr	r12, [r0, r12, lsl #2]\n\t"
22644        "ldr	lr, [r0, lr, lsl #2]\n\t"
22645#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22647        "lsl	r9, r4, #8\n\t"
22648        "lsr	r9, r9, #24\n\t"
22649#else
22650        "uxtb	r9, r4, ror #16\n\t"
22651#endif
22652#else
22653        "ubfx	r9, r4, #16, #8\n\t"
22654#endif
22655        "eor	r8, r8, r11, ror #24\n\t"
22656        "lsr	r11, r5, #24\n\t"
22657        "eor	r8, r8, r12, ror #8\n\t"
22658#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22659#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22660        "lsl	r12, r7, #16\n\t"
22661        "lsr	r12, r12, #24\n\t"
22662#else
22663        "uxtb	r12, r7, ror #8\n\t"
22664#endif
22665#else
22666        "ubfx	r12, r7, #8, #8\n\t"
22667#endif
22668        "eor	r8, r8, lr, ror #16\n\t"
22669#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22670#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22671        "lsl	lr, r6, #24\n\t"
22672        "lsr	lr, lr, #24\n\t"
22673#else
22674        "uxtb	lr, r6\n\t"
22675#endif
22676#else
22677        "ubfx	lr, r6, #0, #8\n\t"
22678#endif
22679        "ldr	r9, [r0, r9, lsl #2]\n\t"
22680        "ldr	r11, [r0, r11, lsl #2]\n\t"
22681        "ldr	r12, [r0, r12, lsl #2]\n\t"
22682        "ldr	lr, [r0, lr, lsl #2]\n\t"
22683#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22684#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22685        "lsl	r10, r5, #8\n\t"
22686        "lsr	r10, r10, #24\n\t"
22687#else
22688        "uxtb	r10, r5, ror #16\n\t"
22689#endif
22690#else
22691        "ubfx	r10, r5, #16, #8\n\t"
22692#endif
22693        "eor	r9, r9, r11, ror #24\n\t"
22694        "lsr	r11, r6, #24\n\t"
22695        "eor	r9, r9, r12, ror #8\n\t"
22696#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22697#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22698        "lsl	r12, r4, #16\n\t"
22699        "lsr	r12, r12, #24\n\t"
22700#else
22701        "uxtb	r12, r4, ror #8\n\t"
22702#endif
22703#else
22704        "ubfx	r12, r4, #8, #8\n\t"
22705#endif
22706        "eor	r9, r9, lr, ror #16\n\t"
22707#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22708#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22709        "lsl	lr, r7, #24\n\t"
22710        "lsr	lr, lr, #24\n\t"
22711#else
22712        "uxtb	lr, r7\n\t"
22713#endif
22714#else
22715        "ubfx	lr, r7, #0, #8\n\t"
22716#endif
22717        "ldr	r10, [r0, r10, lsl #2]\n\t"
22718        "ldr	r11, [r0, r11, lsl #2]\n\t"
22719        "ldr	r12, [r0, r12, lsl #2]\n\t"
22720        "ldr	lr, [r0, lr, lsl #2]\n\t"
22721#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22722#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22723        "lsl	r4, r4, #24\n\t"
22724        "lsr	r4, r4, #24\n\t"
22725#else
22726        "uxtb	r4, r4\n\t"
22727#endif
22728#else
22729        "ubfx	r4, r4, #0, #8\n\t"
22730#endif
22731        "eor	r10, r10, r11, ror #24\n\t"
22732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22733#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22734        "lsl	r11, r6, #8\n\t"
22735        "lsr	r11, r11, #24\n\t"
22736#else
22737        "uxtb	r11, r6, ror #16\n\t"
22738#endif
22739#else
22740        "ubfx	r11, r6, #16, #8\n\t"
22741#endif
22742        "eor	r10, r10, r12, ror #8\n\t"
22743        "lsr	r12, r7, #24\n\t"
22744        "eor	r10, r10, lr, ror #16\n\t"
22745#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22746#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22747        "lsl	lr, r5, #16\n\t"
22748        "lsr	lr, lr, #24\n\t"
22749#else
22750        "uxtb	lr, r5, ror #8\n\t"
22751#endif
22752#else
22753        "ubfx	lr, r5, #8, #8\n\t"
22754#endif
22755        "ldr	r4, [r0, r4, lsl #2]\n\t"
22756        "ldr	r12, [r0, r12, lsl #2]\n\t"
22757        "ldr	r11, [r0, r11, lsl #2]\n\t"
22758        "ldr	lr, [r0, lr, lsl #2]\n\t"
22759        "eor	r12, r12, r4, ror #24\n\t"
22760        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
22761        "eor	r11, r11, lr, ror #8\n\t"
22762        "eor	r11, r11, r12, ror #24\n\t"
22763        /*   XOR in Key Schedule */
22764        "eor	r8, r8, r4\n\t"
22765        "eor	r9, r9, r5\n\t"
22766        "eor	r10, r10, r6\n\t"
22767        "eor	r11, r11, r7\n\t"
22768#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22769#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22770        "lsl	r4, r11, #8\n\t"
22771        "lsr	r4, r4, #24\n\t"
22772#else
22773        "uxtb	r4, r11, ror #16\n\t"
22774#endif
22775#else
22776        "ubfx	r4, r11, #16, #8\n\t"
22777#endif
22778        "lsr	r7, r8, #24\n\t"
22779#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22780#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22781        "lsl	r12, r10, #16\n\t"
22782        "lsr	r12, r12, #24\n\t"
22783#else
22784        "uxtb	r12, r10, ror #8\n\t"
22785#endif
22786#else
22787        "ubfx	r12, r10, #8, #8\n\t"
22788#endif
22789#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22790#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22791        "lsl	lr, r9, #24\n\t"
22792        "lsr	lr, lr, #24\n\t"
22793#else
22794        "uxtb	lr, r9\n\t"
22795#endif
22796#else
22797        "ubfx	lr, r9, #0, #8\n\t"
22798#endif
22799        "ldr	r4, [r0, r4, lsl #2]\n\t"
22800        "ldr	r7, [r0, r7, lsl #2]\n\t"
22801        "ldr	r12, [r0, r12, lsl #2]\n\t"
22802        "ldr	lr, [r0, lr, lsl #2]\n\t"
22803#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22804#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22805        "lsl	r5, r8, #8\n\t"
22806        "lsr	r5, r5, #24\n\t"
22807#else
22808        "uxtb	r5, r8, ror #16\n\t"
22809#endif
22810#else
22811        "ubfx	r5, r8, #16, #8\n\t"
22812#endif
22813        "eor	r4, r4, r7, ror #24\n\t"
22814        "lsr	r7, r9, #24\n\t"
22815        "eor	r4, r4, r12, ror #8\n\t"
22816#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22817#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22818        "lsl	r12, r11, #16\n\t"
22819        "lsr	r12, r12, #24\n\t"
22820#else
22821        "uxtb	r12, r11, ror #8\n\t"
22822#endif
22823#else
22824        "ubfx	r12, r11, #8, #8\n\t"
22825#endif
22826        "eor	r4, r4, lr, ror #16\n\t"
22827#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22828#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22829        "lsl	lr, r10, #24\n\t"
22830        "lsr	lr, lr, #24\n\t"
22831#else
22832        "uxtb	lr, r10\n\t"
22833#endif
22834#else
22835        "ubfx	lr, r10, #0, #8\n\t"
22836#endif
22837        "ldr	r5, [r0, r5, lsl #2]\n\t"
22838        "ldr	r7, [r0, r7, lsl #2]\n\t"
22839        "ldr	r12, [r0, r12, lsl #2]\n\t"
22840        "ldr	lr, [r0, lr, lsl #2]\n\t"
22841#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22842#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22843        "lsl	r6, r9, #8\n\t"
22844        "lsr	r6, r6, #24\n\t"
22845#else
22846        "uxtb	r6, r9, ror #16\n\t"
22847#endif
22848#else
22849        "ubfx	r6, r9, #16, #8\n\t"
22850#endif
22851        "eor	r5, r5, r7, ror #24\n\t"
22852        "lsr	r7, r10, #24\n\t"
22853        "eor	r5, r5, r12, ror #8\n\t"
22854#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22855#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22856        "lsl	r12, r8, #16\n\t"
22857        "lsr	r12, r12, #24\n\t"
22858#else
22859        "uxtb	r12, r8, ror #8\n\t"
22860#endif
22861#else
22862        "ubfx	r12, r8, #8, #8\n\t"
22863#endif
22864        "eor	r5, r5, lr, ror #16\n\t"
22865#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22866#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22867        "lsl	lr, r11, #24\n\t"
22868        "lsr	lr, lr, #24\n\t"
22869#else
22870        "uxtb	lr, r11\n\t"
22871#endif
22872#else
22873        "ubfx	lr, r11, #0, #8\n\t"
22874#endif
22875        "ldr	r6, [r0, r6, lsl #2]\n\t"
22876        "ldr	r7, [r0, r7, lsl #2]\n\t"
22877        "ldr	r12, [r0, r12, lsl #2]\n\t"
22878        "ldr	lr, [r0, lr, lsl #2]\n\t"
22879#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22880#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22881        "lsl	r8, r8, #24\n\t"
22882        "lsr	r8, r8, #24\n\t"
22883#else
22884        "uxtb	r8, r8\n\t"
22885#endif
22886#else
22887        "ubfx	r8, r8, #0, #8\n\t"
22888#endif
22889        "eor	r6, r6, r7, ror #24\n\t"
22890#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22891#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22892        "lsl	r7, r10, #8\n\t"
22893        "lsr	r7, r7, #24\n\t"
22894#else
22895        "uxtb	r7, r10, ror #16\n\t"
22896#endif
22897#else
22898        "ubfx	r7, r10, #16, #8\n\t"
22899#endif
22900        "eor	r6, r6, r12, ror #8\n\t"
22901        "lsr	r12, r11, #24\n\t"
22902        "eor	r6, r6, lr, ror #16\n\t"
22903#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22904#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22905        "lsl	lr, r9, #16\n\t"
22906        "lsr	lr, lr, #24\n\t"
22907#else
22908        "uxtb	lr, r9, ror #8\n\t"
22909#endif
22910#else
22911        "ubfx	lr, r9, #8, #8\n\t"
22912#endif
22913        "ldr	r8, [r0, r8, lsl #2]\n\t"
22914        "ldr	r12, [r0, r12, lsl #2]\n\t"
22915        "ldr	r7, [r0, r7, lsl #2]\n\t"
22916        "ldr	lr, [r0, lr, lsl #2]\n\t"
22917        "eor	r12, r12, r8, ror #24\n\t"
22918        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
22919        "eor	r7, r7, lr, ror #8\n\t"
22920        "eor	r7, r7, r12, ror #24\n\t"
22921        /*   XOR in Key Schedule */
22922        "eor	r4, r4, r8\n\t"
22923        "eor	r5, r5, r9\n\t"
22924        "eor	r6, r6, r10\n\t"
22925        "eor	r7, r7, r11\n\t"
22926        "subs	r1, r1, #1\n\t"
22927        "bne	L_AES_CBC_decrypt_block_nr_128_odd_%=\n\t"
22928#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22930        "lsl	r8, r7, #8\n\t"
22931        "lsr	r8, r8, #24\n\t"
22932#else
22933        "uxtb	r8, r7, ror #16\n\t"
22934#endif
22935#else
22936        "ubfx	r8, r7, #16, #8\n\t"
22937#endif
22938        "lsr	r11, r4, #24\n\t"
22939#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22940#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22941        "lsl	r12, r6, #16\n\t"
22942        "lsr	r12, r12, #24\n\t"
22943#else
22944        "uxtb	r12, r6, ror #8\n\t"
22945#endif
22946#else
22947        "ubfx	r12, r6, #8, #8\n\t"
22948#endif
22949#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22950#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22951        "lsl	lr, r5, #24\n\t"
22952        "lsr	lr, lr, #24\n\t"
22953#else
22954        "uxtb	lr, r5\n\t"
22955#endif
22956#else
22957        "ubfx	lr, r5, #0, #8\n\t"
22958#endif
22959        "ldr	r8, [r0, r8, lsl #2]\n\t"
22960        "ldr	r11, [r0, r11, lsl #2]\n\t"
22961        "ldr	r12, [r0, r12, lsl #2]\n\t"
22962        "ldr	lr, [r0, lr, lsl #2]\n\t"
22963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22964#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22965        "lsl	r9, r4, #8\n\t"
22966        "lsr	r9, r9, #24\n\t"
22967#else
22968        "uxtb	r9, r4, ror #16\n\t"
22969#endif
22970#else
22971        "ubfx	r9, r4, #16, #8\n\t"
22972#endif
22973        "eor	r8, r8, r11, ror #24\n\t"
22974        "lsr	r11, r5, #24\n\t"
22975        "eor	r8, r8, r12, ror #8\n\t"
22976#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22977#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22978        "lsl	r12, r7, #16\n\t"
22979        "lsr	r12, r12, #24\n\t"
22980#else
22981        "uxtb	r12, r7, ror #8\n\t"
22982#endif
22983#else
22984        "ubfx	r12, r7, #8, #8\n\t"
22985#endif
22986        "eor	r8, r8, lr, ror #16\n\t"
22987#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22988#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22989        "lsl	lr, r6, #24\n\t"
22990        "lsr	lr, lr, #24\n\t"
22991#else
22992        "uxtb	lr, r6\n\t"
22993#endif
22994#else
22995        "ubfx	lr, r6, #0, #8\n\t"
22996#endif
22997        "ldr	r9, [r0, r9, lsl #2]\n\t"
22998        "ldr	r11, [r0, r11, lsl #2]\n\t"
22999        "ldr	r12, [r0, r12, lsl #2]\n\t"
23000        "ldr	lr, [r0, lr, lsl #2]\n\t"
23001#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23002#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23003        "lsl	r10, r5, #8\n\t"
23004        "lsr	r10, r10, #24\n\t"
23005#else
23006        "uxtb	r10, r5, ror #16\n\t"
23007#endif
23008#else
23009        "ubfx	r10, r5, #16, #8\n\t"
23010#endif
23011        "eor	r9, r9, r11, ror #24\n\t"
23012        "lsr	r11, r6, #24\n\t"
23013        "eor	r9, r9, r12, ror #8\n\t"
23014#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23015#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23016        "lsl	r12, r4, #16\n\t"
23017        "lsr	r12, r12, #24\n\t"
23018#else
23019        "uxtb	r12, r4, ror #8\n\t"
23020#endif
23021#else
23022        "ubfx	r12, r4, #8, #8\n\t"
23023#endif
23024        "eor	r9, r9, lr, ror #16\n\t"
23025#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23026#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23027        "lsl	lr, r7, #24\n\t"
23028        "lsr	lr, lr, #24\n\t"
23029#else
23030        "uxtb	lr, r7\n\t"
23031#endif
23032#else
23033        "ubfx	lr, r7, #0, #8\n\t"
23034#endif
23035        "ldr	r10, [r0, r10, lsl #2]\n\t"
23036        "ldr	r11, [r0, r11, lsl #2]\n\t"
23037        "ldr	r12, [r0, r12, lsl #2]\n\t"
23038        "ldr	lr, [r0, lr, lsl #2]\n\t"
23039#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23040#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23041        "lsl	r4, r4, #24\n\t"
23042        "lsr	r4, r4, #24\n\t"
23043#else
23044        "uxtb	r4, r4\n\t"
23045#endif
23046#else
23047        "ubfx	r4, r4, #0, #8\n\t"
23048#endif
23049        "eor	r10, r10, r11, ror #24\n\t"
23050#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23051#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23052        "lsl	r11, r6, #8\n\t"
23053        "lsr	r11, r11, #24\n\t"
23054#else
23055        "uxtb	r11, r6, ror #16\n\t"
23056#endif
23057#else
23058        "ubfx	r11, r6, #16, #8\n\t"
23059#endif
23060        "eor	r10, r10, r12, ror #8\n\t"
23061        "lsr	r12, r7, #24\n\t"
23062        "eor	r10, r10, lr, ror #16\n\t"
23063#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23064#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23065        "lsl	lr, r5, #16\n\t"
23066        "lsr	lr, lr, #24\n\t"
23067#else
23068        "uxtb	lr, r5, ror #8\n\t"
23069#endif
23070#else
23071        "ubfx	lr, r5, #8, #8\n\t"
23072#endif
23073        "ldr	r4, [r0, r4, lsl #2]\n\t"
23074        "ldr	r12, [r0, r12, lsl #2]\n\t"
23075        "ldr	r11, [r0, r11, lsl #2]\n\t"
23076        "ldr	lr, [r0, lr, lsl #2]\n\t"
23077        "eor	r12, r12, r4, ror #24\n\t"
23078        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
23079        "eor	r11, r11, lr, ror #8\n\t"
23080        "eor	r11, r11, r12, ror #24\n\t"
23081        /*   XOR in Key Schedule */
23082        "eor	r8, r8, r4\n\t"
23083        "eor	r9, r9, r5\n\t"
23084        "eor	r10, r10, r6\n\t"
23085        "eor	r11, r11, r7\n\t"
23086#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23087#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23088        "lsl	r4, r9, #24\n\t"
23089        "lsr	r4, r4, #24\n\t"
23090#else
23091        "uxtb	r4, r9\n\t"
23092#endif
23093#else
23094        "ubfx	r4, r9, #0, #8\n\t"
23095#endif
23096#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23097#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23098        "lsl	r7, r10, #16\n\t"
23099        "lsr	r7, r7, #24\n\t"
23100#else
23101        "uxtb	r7, r10, ror #8\n\t"
23102#endif
23103#else
23104        "ubfx	r7, r10, #8, #8\n\t"
23105#endif
23106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23107#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23108        "lsl	r12, r11, #8\n\t"
23109        "lsr	r12, r12, #24\n\t"
23110#else
23111        "uxtb	r12, r11, ror #16\n\t"
23112#endif
23113#else
23114        "ubfx	r12, r11, #16, #8\n\t"
23115#endif
23116        "lsr	lr, r8, #24\n\t"
23117        "ldrb	r4, [r2, r4]\n\t"
23118        "ldrb	r7, [r2, r7]\n\t"
23119        "ldrb	r12, [r2, r12]\n\t"
23120        "ldrb	lr, [r2, lr]\n\t"
23121#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23122#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23123        "lsl	r5, r10, #24\n\t"
23124        "lsr	r5, r5, #24\n\t"
23125#else
23126        "uxtb	r5, r10\n\t"
23127#endif
23128#else
23129        "ubfx	r5, r10, #0, #8\n\t"
23130#endif
23131        "eor	r4, r4, r7, lsl #8\n\t"
23132#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23133#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23134        "lsl	r7, r11, #16\n\t"
23135        "lsr	r7, r7, #24\n\t"
23136#else
23137        "uxtb	r7, r11, ror #8\n\t"
23138#endif
23139#else
23140        "ubfx	r7, r11, #8, #8\n\t"
23141#endif
23142        "eor	r4, r4, r12, lsl #16\n\t"
23143#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23144#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23145        "lsl	r12, r8, #8\n\t"
23146        "lsr	r12, r12, #24\n\t"
23147#else
23148        "uxtb	r12, r8, ror #16\n\t"
23149#endif
23150#else
23151        "ubfx	r12, r8, #16, #8\n\t"
23152#endif
23153        "eor	r4, r4, lr, lsl #24\n\t"
23154        "lsr	lr, r9, #24\n\t"
23155        "ldrb	r7, [r2, r7]\n\t"
23156        "ldrb	lr, [r2, lr]\n\t"
23157        "ldrb	r5, [r2, r5]\n\t"
23158        "ldrb	r12, [r2, r12]\n\t"
23159#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23160#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23161        "lsl	r6, r11, #24\n\t"
23162        "lsr	r6, r6, #24\n\t"
23163#else
23164        "uxtb	r6, r11\n\t"
23165#endif
23166#else
23167        "ubfx	r6, r11, #0, #8\n\t"
23168#endif
23169        "eor	r5, r5, r7, lsl #8\n\t"
23170#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23171#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23172        "lsl	r7, r8, #16\n\t"
23173        "lsr	r7, r7, #24\n\t"
23174#else
23175        "uxtb	r7, r8, ror #8\n\t"
23176#endif
23177#else
23178        "ubfx	r7, r8, #8, #8\n\t"
23179#endif
23180        "eor	r5, r5, r12, lsl #16\n\t"
23181#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23182#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23183        "lsl	r12, r9, #8\n\t"
23184        "lsr	r12, r12, #24\n\t"
23185#else
23186        "uxtb	r12, r9, ror #16\n\t"
23187#endif
23188#else
23189        "ubfx	r12, r9, #16, #8\n\t"
23190#endif
23191        "eor	r5, r5, lr, lsl #24\n\t"
23192        "lsr	lr, r10, #24\n\t"
23193        "ldrb	r7, [r2, r7]\n\t"
23194        "ldrb	lr, [r2, lr]\n\t"
23195        "ldrb	r6, [r2, r6]\n\t"
23196        "ldrb	r12, [r2, r12]\n\t"
23197        "lsr	r11, r11, #24\n\t"
23198        "eor	r6, r6, r7, lsl #8\n\t"
23199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23200#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23201        "lsl	r7, r8, #24\n\t"
23202        "lsr	r7, r7, #24\n\t"
23203#else
23204        "uxtb	r7, r8\n\t"
23205#endif
23206#else
23207        "ubfx	r7, r8, #0, #8\n\t"
23208#endif
23209        "eor	r6, r6, r12, lsl #16\n\t"
23210#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23211#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23212        "lsl	r12, r9, #16\n\t"
23213        "lsr	r12, r12, #24\n\t"
23214#else
23215        "uxtb	r12, r9, ror #8\n\t"
23216#endif
23217#else
23218        "ubfx	r12, r9, #8, #8\n\t"
23219#endif
23220        "eor	r6, r6, lr, lsl #24\n\t"
23221#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23223        "lsl	lr, r10, #8\n\t"
23224        "lsr	lr, lr, #24\n\t"
23225#else
23226        "uxtb	lr, r10, ror #16\n\t"
23227#endif
23228#else
23229        "ubfx	lr, r10, #16, #8\n\t"
23230#endif
23231        "ldrb	r11, [r2, r11]\n\t"
23232        "ldrb	r12, [r2, r12]\n\t"
23233        "ldrb	r7, [r2, r7]\n\t"
23234        "ldrb	lr, [r2, lr]\n\t"
23235        "eor	r12, r12, r11, lsl #16\n\t"
23236        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
23237        "eor	r7, r7, r12, lsl #8\n\t"
23238        "eor	r7, r7, lr, lsl #16\n\t"
23239        /*   XOR in Key Schedule */
23240        "eor	r4, r4, r8\n\t"
23241        "eor	r5, r5, r9\n\t"
23242        "eor	r6, r6, r10\n\t"
23243        "eor	r7, r7, r11\n\t"
23244#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
23245        "ldr	lr, [sp, #16]\n\t"
23246#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23247        "eor	r8, r4, r4, ror #16\n\t"
23248        "eor	r9, r5, r5, ror #16\n\t"
23249        "eor	r10, r6, r6, ror #16\n\t"
23250        "eor	r11, r7, r7, ror #16\n\t"
23251        "bic	r8, r8, #0xff0000\n\t"
23252        "bic	r9, r9, #0xff0000\n\t"
23253        "bic	r10, r10, #0xff0000\n\t"
23254        "bic	r11, r11, #0xff0000\n\t"
23255        "ror	r4, r4, #8\n\t"
23256        "ror	r5, r5, #8\n\t"
23257        "ror	r6, r6, #8\n\t"
23258        "ror	r7, r7, #8\n\t"
23259        "eor	r4, r4, r8, lsr #8\n\t"
23260        "eor	r5, r5, r9, lsr #8\n\t"
23261        "eor	r6, r6, r10, lsr #8\n\t"
23262        "eor	r7, r7, r11, lsr #8\n\t"
23263#else
23264        "rev	r4, r4\n\t"
23265        "rev	r5, r5\n\t"
23266        "rev	r6, r6\n\t"
23267        "rev	r7, r7\n\t"
23268#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
23269        "ldm	lr, {r8, r9, r10, r11}\n\t"
23270        "pop	{r1, r12, lr}\n\t"
23271        "ldr	%[ks], [sp]\n\t"
23272        "eor	r4, r4, r8\n\t"
23273        "eor	r5, r5, r9\n\t"
23274        "eor	r6, r6, r10\n\t"
23275        "eor	r7, r7, r11\n\t"
23276        "str	r4, [%[out]]\n\t"
23277        "str	r5, [%[out], #4]\n\t"
23278        "str	r6, [%[out], #8]\n\t"
23279        "str	r7, [%[out], #12]\n\t"
23280        "subs	r12, r12, #16\n\t"
23281        "add	lr, lr, #16\n\t"
23282        "add	%[out], %[out], #16\n\t"
23283        "beq	L_AES_CBC_decrypt_end_odd_%=\n\t"
23284        "push	{r1, r12, lr}\n\t"
23285        "ldr	r4, [lr]\n\t"
23286        "ldr	r5, [lr, #4]\n\t"
23287        "ldr	r6, [lr, #8]\n\t"
23288        "ldr	r7, [lr, #12]\n\t"
23289        "ldr	lr, [sp, #16]\n\t"
23290#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23291        "stm	lr, {r4, r5}\n\t"
23292#else
23293        "strd	r4, r5, [lr]\n\t"
23294#endif
23295#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23296        "str	r6, [lr, #8]\n\t"
23297        "str	r7, [lr, #12]\n\t"
23298#else
23299        "strd	r6, r7, [lr, #8]\n\t"
23300#endif
23301#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23302        "eor	r8, r4, r4, ror #16\n\t"
23303        "eor	r9, r5, r5, ror #16\n\t"
23304        "eor	r10, r6, r6, ror #16\n\t"
23305        "eor	r11, r7, r7, ror #16\n\t"
23306        "bic	r8, r8, #0xff0000\n\t"
23307        "bic	r9, r9, #0xff0000\n\t"
23308        "bic	r10, r10, #0xff0000\n\t"
23309        "bic	r11, r11, #0xff0000\n\t"
23310        "ror	r4, r4, #8\n\t"
23311        "ror	r5, r5, #8\n\t"
23312        "ror	r6, r6, #8\n\t"
23313        "ror	r7, r7, #8\n\t"
23314        "eor	r4, r4, r8, lsr #8\n\t"
23315        "eor	r5, r5, r9, lsr #8\n\t"
23316        "eor	r6, r6, r10, lsr #8\n\t"
23317        "eor	r7, r7, r11, lsr #8\n\t"
23318#else
23319        "rev	r4, r4\n\t"
23320        "rev	r5, r5\n\t"
23321        "rev	r6, r6\n\t"
23322        "rev	r7, r7\n\t"
23323#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
23324        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
23325        /* Round: 0 - XOR in key schedule */
23326        "eor	r4, r4, r8\n\t"
23327        "eor	r5, r5, r9\n\t"
23328        "eor	r6, r6, r10\n\t"
23329        "eor	r7, r7, r11\n\t"
23330        "mov	r1, #4\n\t"
23331#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
23332        "bl	AES_decrypt_block\n\t"
23333#else
23334        "\n"
23335    "L_AES_CBC_decrypt_block_nr_128_even_%=:\n\t"
23336#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23337#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23338        "lsl	r8, r7, #8\n\t"
23339        "lsr	r8, r8, #24\n\t"
23340#else
23341        "uxtb	r8, r7, ror #16\n\t"
23342#endif
23343#else
23344        "ubfx	r8, r7, #16, #8\n\t"
23345#endif
23346        "lsr	r11, r4, #24\n\t"
23347#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23348#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23349        "lsl	r12, r6, #16\n\t"
23350        "lsr	r12, r12, #24\n\t"
23351#else
23352        "uxtb	r12, r6, ror #8\n\t"
23353#endif
23354#else
23355        "ubfx	r12, r6, #8, #8\n\t"
23356#endif
23357#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23358#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23359        "lsl	lr, r5, #24\n\t"
23360        "lsr	lr, lr, #24\n\t"
23361#else
23362        "uxtb	lr, r5\n\t"
23363#endif
23364#else
23365        "ubfx	lr, r5, #0, #8\n\t"
23366#endif
23367        "ldr	r8, [r0, r8, lsl #2]\n\t"
23368        "ldr	r11, [r0, r11, lsl #2]\n\t"
23369        "ldr	r12, [r0, r12, lsl #2]\n\t"
23370        "ldr	lr, [r0, lr, lsl #2]\n\t"
23371#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23372#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23373        "lsl	r9, r4, #8\n\t"
23374        "lsr	r9, r9, #24\n\t"
23375#else
23376        "uxtb	r9, r4, ror #16\n\t"
23377#endif
23378#else
23379        "ubfx	r9, r4, #16, #8\n\t"
23380#endif
23381        "eor	r8, r8, r11, ror #24\n\t"
23382        "lsr	r11, r5, #24\n\t"
23383        "eor	r8, r8, r12, ror #8\n\t"
23384#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23385#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23386        "lsl	r12, r7, #16\n\t"
23387        "lsr	r12, r12, #24\n\t"
23388#else
23389        "uxtb	r12, r7, ror #8\n\t"
23390#endif
23391#else
23392        "ubfx	r12, r7, #8, #8\n\t"
23393#endif
23394        "eor	r8, r8, lr, ror #16\n\t"
23395#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23396#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23397        "lsl	lr, r6, #24\n\t"
23398        "lsr	lr, lr, #24\n\t"
23399#else
23400        "uxtb	lr, r6\n\t"
23401#endif
23402#else
23403        "ubfx	lr, r6, #0, #8\n\t"
23404#endif
23405        "ldr	r9, [r0, r9, lsl #2]\n\t"
23406        "ldr	r11, [r0, r11, lsl #2]\n\t"
23407        "ldr	r12, [r0, r12, lsl #2]\n\t"
23408        "ldr	lr, [r0, lr, lsl #2]\n\t"
23409#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23410#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23411        "lsl	r10, r5, #8\n\t"
23412        "lsr	r10, r10, #24\n\t"
23413#else
23414        "uxtb	r10, r5, ror #16\n\t"
23415#endif
23416#else
23417        "ubfx	r10, r5, #16, #8\n\t"
23418#endif
23419        "eor	r9, r9, r11, ror #24\n\t"
23420        "lsr	r11, r6, #24\n\t"
23421        "eor	r9, r9, r12, ror #8\n\t"
23422#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23423#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23424        "lsl	r12, r4, #16\n\t"
23425        "lsr	r12, r12, #24\n\t"
23426#else
23427        "uxtb	r12, r4, ror #8\n\t"
23428#endif
23429#else
23430        "ubfx	r12, r4, #8, #8\n\t"
23431#endif
23432        "eor	r9, r9, lr, ror #16\n\t"
23433#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23434#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23435        "lsl	lr, r7, #24\n\t"
23436        "lsr	lr, lr, #24\n\t"
23437#else
23438        "uxtb	lr, r7\n\t"
23439#endif
23440#else
23441        "ubfx	lr, r7, #0, #8\n\t"
23442#endif
23443        "ldr	r10, [r0, r10, lsl #2]\n\t"
23444        "ldr	r11, [r0, r11, lsl #2]\n\t"
23445        "ldr	r12, [r0, r12, lsl #2]\n\t"
23446        "ldr	lr, [r0, lr, lsl #2]\n\t"
23447#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23448#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23449        "lsl	r4, r4, #24\n\t"
23450        "lsr	r4, r4, #24\n\t"
23451#else
23452        "uxtb	r4, r4\n\t"
23453#endif
23454#else
23455        "ubfx	r4, r4, #0, #8\n\t"
23456#endif
23457        "eor	r10, r10, r11, ror #24\n\t"
23458#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23459#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23460        "lsl	r11, r6, #8\n\t"
23461        "lsr	r11, r11, #24\n\t"
23462#else
23463        "uxtb	r11, r6, ror #16\n\t"
23464#endif
23465#else
23466        "ubfx	r11, r6, #16, #8\n\t"
23467#endif
23468        "eor	r10, r10, r12, ror #8\n\t"
23469        "lsr	r12, r7, #24\n\t"
23470        "eor	r10, r10, lr, ror #16\n\t"
23471#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23472#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23473        "lsl	lr, r5, #16\n\t"
23474        "lsr	lr, lr, #24\n\t"
23475#else
23476        "uxtb	lr, r5, ror #8\n\t"
23477#endif
23478#else
23479        "ubfx	lr, r5, #8, #8\n\t"
23480#endif
23481        "ldr	r4, [r0, r4, lsl #2]\n\t"
23482        "ldr	r12, [r0, r12, lsl #2]\n\t"
23483        "ldr	r11, [r0, r11, lsl #2]\n\t"
23484        "ldr	lr, [r0, lr, lsl #2]\n\t"
23485        "eor	r12, r12, r4, ror #24\n\t"
23486        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
23487        "eor	r11, r11, lr, ror #8\n\t"
23488        "eor	r11, r11, r12, ror #24\n\t"
23489        /*   XOR in Key Schedule */
23490        "eor	r8, r8, r4\n\t"
23491        "eor	r9, r9, r5\n\t"
23492        "eor	r10, r10, r6\n\t"
23493        "eor	r11, r11, r7\n\t"
23494#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23496        "lsl	r4, r11, #8\n\t"
23497        "lsr	r4, r4, #24\n\t"
23498#else
23499        "uxtb	r4, r11, ror #16\n\t"
23500#endif
23501#else
23502        "ubfx	r4, r11, #16, #8\n\t"
23503#endif
23504        "lsr	r7, r8, #24\n\t"
23505#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23506#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23507        "lsl	r12, r10, #16\n\t"
23508        "lsr	r12, r12, #24\n\t"
23509#else
23510        "uxtb	r12, r10, ror #8\n\t"
23511#endif
23512#else
23513        "ubfx	r12, r10, #8, #8\n\t"
23514#endif
23515#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23516#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23517        "lsl	lr, r9, #24\n\t"
23518        "lsr	lr, lr, #24\n\t"
23519#else
23520        "uxtb	lr, r9\n\t"
23521#endif
23522#else
23523        "ubfx	lr, r9, #0, #8\n\t"
23524#endif
23525        "ldr	r4, [r0, r4, lsl #2]\n\t"
23526        "ldr	r7, [r0, r7, lsl #2]\n\t"
23527        "ldr	r12, [r0, r12, lsl #2]\n\t"
23528        "ldr	lr, [r0, lr, lsl #2]\n\t"
23529#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23530#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23531        "lsl	r5, r8, #8\n\t"
23532        "lsr	r5, r5, #24\n\t"
23533#else
23534        "uxtb	r5, r8, ror #16\n\t"
23535#endif
23536#else
23537        "ubfx	r5, r8, #16, #8\n\t"
23538#endif
23539        "eor	r4, r4, r7, ror #24\n\t"
23540        "lsr	r7, r9, #24\n\t"
23541        "eor	r4, r4, r12, ror #8\n\t"
23542#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23543#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23544        "lsl	r12, r11, #16\n\t"
23545        "lsr	r12, r12, #24\n\t"
23546#else
23547        "uxtb	r12, r11, ror #8\n\t"
23548#endif
23549#else
23550        "ubfx	r12, r11, #8, #8\n\t"
23551#endif
23552        "eor	r4, r4, lr, ror #16\n\t"
23553#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23554#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23555        "lsl	lr, r10, #24\n\t"
23556        "lsr	lr, lr, #24\n\t"
23557#else
23558        "uxtb	lr, r10\n\t"
23559#endif
23560#else
23561        "ubfx	lr, r10, #0, #8\n\t"
23562#endif
23563        "ldr	r5, [r0, r5, lsl #2]\n\t"
23564        "ldr	r7, [r0, r7, lsl #2]\n\t"
23565        "ldr	r12, [r0, r12, lsl #2]\n\t"
23566        "ldr	lr, [r0, lr, lsl #2]\n\t"
23567#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23568#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23569        "lsl	r6, r9, #8\n\t"
23570        "lsr	r6, r6, #24\n\t"
23571#else
23572        "uxtb	r6, r9, ror #16\n\t"
23573#endif
23574#else
23575        "ubfx	r6, r9, #16, #8\n\t"
23576#endif
23577        "eor	r5, r5, r7, ror #24\n\t"
23578        "lsr	r7, r10, #24\n\t"
23579        "eor	r5, r5, r12, ror #8\n\t"
23580#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23581#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23582        "lsl	r12, r8, #16\n\t"
23583        "lsr	r12, r12, #24\n\t"
23584#else
23585        "uxtb	r12, r8, ror #8\n\t"
23586#endif
23587#else
23588        "ubfx	r12, r8, #8, #8\n\t"
23589#endif
23590        "eor	r5, r5, lr, ror #16\n\t"
23591#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23592#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23593        "lsl	lr, r11, #24\n\t"
23594        "lsr	lr, lr, #24\n\t"
23595#else
23596        "uxtb	lr, r11\n\t"
23597#endif
23598#else
23599        "ubfx	lr, r11, #0, #8\n\t"
23600#endif
23601        "ldr	r6, [r0, r6, lsl #2]\n\t"
23602        "ldr	r7, [r0, r7, lsl #2]\n\t"
23603        "ldr	r12, [r0, r12, lsl #2]\n\t"
23604        "ldr	lr, [r0, lr, lsl #2]\n\t"
23605#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23606#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23607        "lsl	r8, r8, #24\n\t"
23608        "lsr	r8, r8, #24\n\t"
23609#else
23610        "uxtb	r8, r8\n\t"
23611#endif
23612#else
23613        "ubfx	r8, r8, #0, #8\n\t"
23614#endif
23615        "eor	r6, r6, r7, ror #24\n\t"
23616#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23617#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23618        "lsl	r7, r10, #8\n\t"
23619        "lsr	r7, r7, #24\n\t"
23620#else
23621        "uxtb	r7, r10, ror #16\n\t"
23622#endif
23623#else
23624        "ubfx	r7, r10, #16, #8\n\t"
23625#endif
23626        "eor	r6, r6, r12, ror #8\n\t"
23627        "lsr	r12, r11, #24\n\t"
23628        "eor	r6, r6, lr, ror #16\n\t"
23629#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23630#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23631        "lsl	lr, r9, #16\n\t"
23632        "lsr	lr, lr, #24\n\t"
23633#else
23634        "uxtb	lr, r9, ror #8\n\t"
23635#endif
23636#else
23637        "ubfx	lr, r9, #8, #8\n\t"
23638#endif
23639        "ldr	r8, [r0, r8, lsl #2]\n\t"
23640        "ldr	r12, [r0, r12, lsl #2]\n\t"
23641        "ldr	r7, [r0, r7, lsl #2]\n\t"
23642        "ldr	lr, [r0, lr, lsl #2]\n\t"
23643        "eor	r12, r12, r8, ror #24\n\t"
23644        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
23645        "eor	r7, r7, lr, ror #8\n\t"
23646        "eor	r7, r7, r12, ror #24\n\t"
23647        /*   XOR in Key Schedule */
23648        "eor	r4, r4, r8\n\t"
23649        "eor	r5, r5, r9\n\t"
23650        "eor	r6, r6, r10\n\t"
23651        "eor	r7, r7, r11\n\t"
23652        "subs	r1, r1, #1\n\t"
23653        "bne	L_AES_CBC_decrypt_block_nr_128_even_%=\n\t"
23654#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23655#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23656        "lsl	r8, r7, #8\n\t"
23657        "lsr	r8, r8, #24\n\t"
23658#else
23659        "uxtb	r8, r7, ror #16\n\t"
23660#endif
23661#else
23662        "ubfx	r8, r7, #16, #8\n\t"
23663#endif
23664        "lsr	r11, r4, #24\n\t"
23665#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23666#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23667        "lsl	r12, r6, #16\n\t"
23668        "lsr	r12, r12, #24\n\t"
23669#else
23670        "uxtb	r12, r6, ror #8\n\t"
23671#endif
23672#else
23673        "ubfx	r12, r6, #8, #8\n\t"
23674#endif
23675#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23676#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23677        "lsl	lr, r5, #24\n\t"
23678        "lsr	lr, lr, #24\n\t"
23679#else
23680        "uxtb	lr, r5\n\t"
23681#endif
23682#else
23683        "ubfx	lr, r5, #0, #8\n\t"
23684#endif
23685        "ldr	r8, [r0, r8, lsl #2]\n\t"
23686        "ldr	r11, [r0, r11, lsl #2]\n\t"
23687        "ldr	r12, [r0, r12, lsl #2]\n\t"
23688        "ldr	lr, [r0, lr, lsl #2]\n\t"
23689#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23690#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23691        "lsl	r9, r4, #8\n\t"
23692        "lsr	r9, r9, #24\n\t"
23693#else
23694        "uxtb	r9, r4, ror #16\n\t"
23695#endif
23696#else
23697        "ubfx	r9, r4, #16, #8\n\t"
23698#endif
23699        "eor	r8, r8, r11, ror #24\n\t"
23700        "lsr	r11, r5, #24\n\t"
23701        "eor	r8, r8, r12, ror #8\n\t"
23702#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23703#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23704        "lsl	r12, r7, #16\n\t"
23705        "lsr	r12, r12, #24\n\t"
23706#else
23707        "uxtb	r12, r7, ror #8\n\t"
23708#endif
23709#else
23710        "ubfx	r12, r7, #8, #8\n\t"
23711#endif
23712        "eor	r8, r8, lr, ror #16\n\t"
23713#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23714#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23715        "lsl	lr, r6, #24\n\t"
23716        "lsr	lr, lr, #24\n\t"
23717#else
23718        "uxtb	lr, r6\n\t"
23719#endif
23720#else
23721        "ubfx	lr, r6, #0, #8\n\t"
23722#endif
23723        "ldr	r9, [r0, r9, lsl #2]\n\t"
23724        "ldr	r11, [r0, r11, lsl #2]\n\t"
23725        "ldr	r12, [r0, r12, lsl #2]\n\t"
23726        "ldr	lr, [r0, lr, lsl #2]\n\t"
23727#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23728#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23729        "lsl	r10, r5, #8\n\t"
23730        "lsr	r10, r10, #24\n\t"
23731#else
23732        "uxtb	r10, r5, ror #16\n\t"
23733#endif
23734#else
23735        "ubfx	r10, r5, #16, #8\n\t"
23736#endif
23737        "eor	r9, r9, r11, ror #24\n\t"
23738        "lsr	r11, r6, #24\n\t"
23739        "eor	r9, r9, r12, ror #8\n\t"
23740#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23741#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23742        "lsl	r12, r4, #16\n\t"
23743        "lsr	r12, r12, #24\n\t"
23744#else
23745        "uxtb	r12, r4, ror #8\n\t"
23746#endif
23747#else
23748        "ubfx	r12, r4, #8, #8\n\t"
23749#endif
23750        "eor	r9, r9, lr, ror #16\n\t"
23751#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23752#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23753        "lsl	lr, r7, #24\n\t"
23754        "lsr	lr, lr, #24\n\t"
23755#else
23756        "uxtb	lr, r7\n\t"
23757#endif
23758#else
23759        "ubfx	lr, r7, #0, #8\n\t"
23760#endif
23761        "ldr	r10, [r0, r10, lsl #2]\n\t"
23762        "ldr	r11, [r0, r11, lsl #2]\n\t"
23763        "ldr	r12, [r0, r12, lsl #2]\n\t"
23764        "ldr	lr, [r0, lr, lsl #2]\n\t"
23765#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23766#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23767        "lsl	r4, r4, #24\n\t"
23768        "lsr	r4, r4, #24\n\t"
23769#else
23770        "uxtb	r4, r4\n\t"
23771#endif
23772#else
23773        "ubfx	r4, r4, #0, #8\n\t"
23774#endif
23775        "eor	r10, r10, r11, ror #24\n\t"
23776#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23777#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23778        "lsl	r11, r6, #8\n\t"
23779        "lsr	r11, r11, #24\n\t"
23780#else
23781        "uxtb	r11, r6, ror #16\n\t"
23782#endif
23783#else
23784        "ubfx	r11, r6, #16, #8\n\t"
23785#endif
23786        "eor	r10, r10, r12, ror #8\n\t"
23787        "lsr	r12, r7, #24\n\t"
23788        "eor	r10, r10, lr, ror #16\n\t"
23789#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23790#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23791        "lsl	lr, r5, #16\n\t"
23792        "lsr	lr, lr, #24\n\t"
23793#else
23794        "uxtb	lr, r5, ror #8\n\t"
23795#endif
23796#else
23797        "ubfx	lr, r5, #8, #8\n\t"
23798#endif
23799        "ldr	r4, [r0, r4, lsl #2]\n\t"
23800        "ldr	r12, [r0, r12, lsl #2]\n\t"
23801        "ldr	r11, [r0, r11, lsl #2]\n\t"
23802        "ldr	lr, [r0, lr, lsl #2]\n\t"
23803        "eor	r12, r12, r4, ror #24\n\t"
23804        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
23805        "eor	r11, r11, lr, ror #8\n\t"
23806        "eor	r11, r11, r12, ror #24\n\t"
23807        /*   XOR in Key Schedule */
23808        "eor	r8, r8, r4\n\t"
23809        "eor	r9, r9, r5\n\t"
23810        "eor	r10, r10, r6\n\t"
23811        "eor	r11, r11, r7\n\t"
23812#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23813#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23814        "lsl	r4, r9, #24\n\t"
23815        "lsr	r4, r4, #24\n\t"
23816#else
23817        "uxtb	r4, r9\n\t"
23818#endif
23819#else
23820        "ubfx	r4, r9, #0, #8\n\t"
23821#endif
23822#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23823#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23824        "lsl	r7, r10, #16\n\t"
23825        "lsr	r7, r7, #24\n\t"
23826#else
23827        "uxtb	r7, r10, ror #8\n\t"
23828#endif
23829#else
23830        "ubfx	r7, r10, #8, #8\n\t"
23831#endif
23832#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23833#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23834        "lsl	r12, r11, #8\n\t"
23835        "lsr	r12, r12, #24\n\t"
23836#else
23837        "uxtb	r12, r11, ror #16\n\t"
23838#endif
23839#else
23840        "ubfx	r12, r11, #16, #8\n\t"
23841#endif
23842        "lsr	lr, r8, #24\n\t"
23843        "ldrb	r4, [r2, r4]\n\t"
23844        "ldrb	r7, [r2, r7]\n\t"
23845        "ldrb	r12, [r2, r12]\n\t"
23846        "ldrb	lr, [r2, lr]\n\t"
23847#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23848#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23849        "lsl	r5, r10, #24\n\t"
23850        "lsr	r5, r5, #24\n\t"
23851#else
23852        "uxtb	r5, r10\n\t"
23853#endif
23854#else
23855        "ubfx	r5, r10, #0, #8\n\t"
23856#endif
23857        "eor	r4, r4, r7, lsl #8\n\t"
23858#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23859#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23860        "lsl	r7, r11, #16\n\t"
23861        "lsr	r7, r7, #24\n\t"
23862#else
23863        "uxtb	r7, r11, ror #8\n\t"
23864#endif
23865#else
23866        "ubfx	r7, r11, #8, #8\n\t"
23867#endif
23868        "eor	r4, r4, r12, lsl #16\n\t"
23869#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23871        "lsl	r12, r8, #8\n\t"
23872        "lsr	r12, r12, #24\n\t"
23873#else
23874        "uxtb	r12, r8, ror #16\n\t"
23875#endif
23876#else
23877        "ubfx	r12, r8, #16, #8\n\t"
23878#endif
23879        "eor	r4, r4, lr, lsl #24\n\t"
23880        "lsr	lr, r9, #24\n\t"
23881        "ldrb	r7, [r2, r7]\n\t"
23882        "ldrb	lr, [r2, lr]\n\t"
23883        "ldrb	r5, [r2, r5]\n\t"
23884        "ldrb	r12, [r2, r12]\n\t"
23885#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23886#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23887        "lsl	r6, r11, #24\n\t"
23888        "lsr	r6, r6, #24\n\t"
23889#else
23890        "uxtb	r6, r11\n\t"
23891#endif
23892#else
23893        "ubfx	r6, r11, #0, #8\n\t"
23894#endif
23895        "eor	r5, r5, r7, lsl #8\n\t"
23896#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23897#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23898        "lsl	r7, r8, #16\n\t"
23899        "lsr	r7, r7, #24\n\t"
23900#else
23901        "uxtb	r7, r8, ror #8\n\t"
23902#endif
23903#else
23904        "ubfx	r7, r8, #8, #8\n\t"
23905#endif
23906        "eor	r5, r5, r12, lsl #16\n\t"
23907#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23908#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23909        "lsl	r12, r9, #8\n\t"
23910        "lsr	r12, r12, #24\n\t"
23911#else
23912        "uxtb	r12, r9, ror #16\n\t"
23913#endif
23914#else
23915        "ubfx	r12, r9, #16, #8\n\t"
23916#endif
23917        "eor	r5, r5, lr, lsl #24\n\t"
23918        "lsr	lr, r10, #24\n\t"
23919        "ldrb	r7, [r2, r7]\n\t"
23920        "ldrb	lr, [r2, lr]\n\t"
23921        "ldrb	r6, [r2, r6]\n\t"
23922        "ldrb	r12, [r2, r12]\n\t"
23923        "lsr	r11, r11, #24\n\t"
23924        "eor	r6, r6, r7, lsl #8\n\t"
23925#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23926#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23927        "lsl	r7, r8, #24\n\t"
23928        "lsr	r7, r7, #24\n\t"
23929#else
23930        "uxtb	r7, r8\n\t"
23931#endif
23932#else
23933        "ubfx	r7, r8, #0, #8\n\t"
23934#endif
23935        "eor	r6, r6, r12, lsl #16\n\t"
23936#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23937#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23938        "lsl	r12, r9, #16\n\t"
23939        "lsr	r12, r12, #24\n\t"
23940#else
23941        "uxtb	r12, r9, ror #8\n\t"
23942#endif
23943#else
23944        "ubfx	r12, r9, #8, #8\n\t"
23945#endif
23946        "eor	r6, r6, lr, lsl #24\n\t"
23947#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23948#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23949        "lsl	lr, r10, #8\n\t"
23950        "lsr	lr, lr, #24\n\t"
23951#else
23952        "uxtb	lr, r10, ror #16\n\t"
23953#endif
23954#else
23955        "ubfx	lr, r10, #16, #8\n\t"
23956#endif
23957        "ldrb	r11, [r2, r11]\n\t"
23958        "ldrb	r12, [r2, r12]\n\t"
23959        "ldrb	r7, [r2, r7]\n\t"
23960        "ldrb	lr, [r2, lr]\n\t"
23961        "eor	r12, r12, r11, lsl #16\n\t"
23962        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
23963        "eor	r7, r7, r12, lsl #8\n\t"
23964        "eor	r7, r7, lr, lsl #16\n\t"
23965        /*   XOR in Key Schedule */
23966        "eor	r4, r4, r8\n\t"
23967        "eor	r5, r5, r9\n\t"
23968        "eor	r6, r6, r10\n\t"
23969        "eor	r7, r7, r11\n\t"
23970#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
23971        "ldr	lr, [sp, #16]\n\t"
23972#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23973        "eor	r8, r4, r4, ror #16\n\t"
23974        "eor	r9, r5, r5, ror #16\n\t"
23975        "eor	r10, r6, r6, ror #16\n\t"
23976        "eor	r11, r7, r7, ror #16\n\t"
23977        "bic	r8, r8, #0xff0000\n\t"
23978        "bic	r9, r9, #0xff0000\n\t"
23979        "bic	r10, r10, #0xff0000\n\t"
23980        "bic	r11, r11, #0xff0000\n\t"
23981        "ror	r4, r4, #8\n\t"
23982        "ror	r5, r5, #8\n\t"
23983        "ror	r6, r6, #8\n\t"
23984        "ror	r7, r7, #8\n\t"
23985        "eor	r4, r4, r8, lsr #8\n\t"
23986        "eor	r5, r5, r9, lsr #8\n\t"
23987        "eor	r6, r6, r10, lsr #8\n\t"
23988        "eor	r7, r7, r11, lsr #8\n\t"
23989#else
23990        "rev	r4, r4\n\t"
23991        "rev	r5, r5\n\t"
23992        "rev	r6, r6\n\t"
23993        "rev	r7, r7\n\t"
23994#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
23995#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23996        "ldr	r8, [lr, #16]\n\t"
23997        "ldr	r9, [lr, #20]\n\t"
23998#else
23999        "ldrd	r8, r9, [lr, #16]\n\t"
24000#endif
24001#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24002        "ldr	r10, [lr, #24]\n\t"
24003        "ldr	r11, [lr, #28]\n\t"
24004#else
24005        "ldrd	r10, r11, [lr, #24]\n\t"
24006#endif
24007        "pop	{r1, r12, lr}\n\t"
24008        "ldr	%[ks], [sp]\n\t"
24009        "eor	r4, r4, r8\n\t"
24010        "eor	r5, r5, r9\n\t"
24011        "eor	r6, r6, r10\n\t"
24012        "eor	r7, r7, r11\n\t"
24013        "str	r4, [%[out]]\n\t"
24014        "str	r5, [%[out], #4]\n\t"
24015        "str	r6, [%[out], #8]\n\t"
24016        "str	r7, [%[out], #12]\n\t"
24017        "subs	r12, r12, #16\n\t"
24018        "add	lr, lr, #16\n\t"
24019        "add	%[out], %[out], #16\n\t"
24020        "bne	L_AES_CBC_decrypt_loop_block_128_%=\n\t"
24021        "b	L_AES_CBC_decrypt_end_%=\n\t"
24022        "\n"
24023    "L_AES_CBC_decrypt_end_odd_%=:\n\t"
24024        "ldr	r4, [sp, #4]\n\t"
24025#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24026        "ldr	r8, [r4, #16]\n\t"
24027        "ldr	r9, [r4, #20]\n\t"
24028#else
24029        "ldrd	r8, r9, [r4, #16]\n\t"
24030#endif
24031#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24032        "ldr	r10, [r4, #24]\n\t"
24033        "ldr	r11, [r4, #28]\n\t"
24034#else
24035        "ldrd	r10, r11, [r4, #24]\n\t"
24036#endif
24037#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24038        "stm	r4, {r8, r9}\n\t"
24039#else
24040        "strd	r8, r9, [r4]\n\t"
24041#endif
24042#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24043        "str	r10, [r4, #8]\n\t"
24044        "str	r11, [r4, #12]\n\t"
24045#else
24046        "strd	r10, r11, [r4, #8]\n\t"
24047#endif
24048        "\n"
24049    "L_AES_CBC_decrypt_end_%=:\n\t"
24050        "pop	{%[ks]-r4}\n\t"
24051        "pop	{%[nr], %[iv]}\n\t"
24052        "pop	{%[L_AES_ARM32_td_ecb], %[L_AES_ARM32_cbc_td4]}\n\t"
24053#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24054        : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
24055          [nr] "+r" (nr), [iv] "+r" (iv),
24056          [L_AES_ARM32_td_ecb] "+r" (L_AES_ARM32_td_ecb_c),
24057          [L_AES_ARM32_cbc_td4] "+r" (L_AES_ARM32_cbc_td4_c)
24058        :
24059#else
24060        :
24061        : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
24062          [nr] "r" (nr), [iv] "r" (iv),
24063          [L_AES_ARM32_td_ecb] "r" (L_AES_ARM32_td_ecb_c),
24064          [L_AES_ARM32_cbc_td4] "r" (L_AES_ARM32_cbc_td4_c)
24065#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
24066        : "memory", "cc", "r6", "r7", "r8", "r9", "r10", "r11"
24067    );
24068}
24069
24070#endif /* HAVE_AES_CBC */
24071#endif /* WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER || HAVE_AES_CBC
24072        * HAVE_AES_ECB */
24073#endif /* HAVE_AES_DECRYPT */
24074#ifdef HAVE_AESGCM
24075XALIGNED(8) static const word32 L_GCM_gmult_len_r[] = {
24076    0x00000000, 0x1c200000, 0x38400000, 0x24600000,
24077    0x70800000, 0x6ca00000, 0x48c00000, 0x54e00000,
24078    0xe1000000, 0xfd200000, 0xd9400000, 0xc5600000,
24079    0x91800000, 0x8da00000, 0xa9c00000, 0xb5e00000,
24080};
24081
24082void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p,
24083    const unsigned char* data_p, unsigned long len_p);
24084#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24085WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x_p,
24086    const unsigned char** m_p, const unsigned char* data_p, unsigned long len_p)
24087#else
24088WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x,
24089    const unsigned char** m, const unsigned char* data, unsigned long len)
24090#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
24091{
24092#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24093    register unsigned char* x __asm__ ("r0") = (unsigned char*)x_p;
24094    register const unsigned char** m __asm__ ("r1") =
24095        (const unsigned char**)m_p;
24096    register const unsigned char* data __asm__ ("r2") =
24097        (const unsigned char*)data_p;
24098    register unsigned long len __asm__ ("r3") = (unsigned long)len_p;
24099    register word32* L_GCM_gmult_len_r_c __asm__ ("r12") =
24100        (word32*)&L_GCM_gmult_len_r;
24101#else
24102    register word32* L_GCM_gmult_len_r_c = (word32*)&L_GCM_gmult_len_r;
24103#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
24104
24105    __asm__ __volatile__ (
24106        "push	{%[L_GCM_gmult_len_r]}\n\t"
24107        "mov	lr, %[L_GCM_gmult_len_r]\n\t"
24108        "\n"
24109    "L_GCM_gmult_len_start_block_%=:\n\t"
24110        "push	{r3}\n\t"
24111        "ldr	r12, [r0, #12]\n\t"
24112        "ldr	%[len], [r2, #12]\n\t"
24113        "eor	r12, r12, %[len]\n\t"
24114        "lsr	%[len], r12, #24\n\t"
24115        "and	%[len], %[len], #15\n\t"
24116        "add	%[len], %[m], %[len], lsl #4\n\t"
24117        "ldm	%[len], {r8, r9, r10, r11}\n\t"
24118        "lsr	r6, r10, #4\n\t"
24119        "and	%[len], r11, #15\n\t"
24120        "lsr	r11, r11, #4\n\t"
24121        "lsr	r4, r12, #28\n\t"
24122        "eor	r11, r11, r10, lsl #28\n\t"
24123        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24124        "add	r4, %[m], r4, lsl #4\n\t"
24125        "eor	r10, r6, r9, lsl #28\n\t"
24126        "lsr	r9, r9, #4\n\t"
24127        "ldm	r4, {r4, r5, r6, r7}\n\t"
24128        "eor	r9, r9, r8, lsl #28\n\t"
24129        "eor	r8, %[len], r8, lsr #4\n\t"
24130        "eor	r8, r8, r4\n\t"
24131        "eor	r9, r9, r5\n\t"
24132        "eor	r10, r10, r6\n\t"
24133        "eor	r11, r11, r7\n\t"
24134        "lsr	r6, r10, #4\n\t"
24135        "and	%[len], r11, #15\n\t"
24136        "lsr	r11, r11, #4\n\t"
24137        "lsr	r4, r12, #16\n\t"
24138        "eor	r11, r11, r10, lsl #28\n\t"
24139        "and	r4, r4, #15\n\t"
24140        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24141        "add	r4, %[m], r4, lsl #4\n\t"
24142        "eor	r10, r6, r9, lsl #28\n\t"
24143        "lsr	r9, r9, #4\n\t"
24144        "ldm	r4, {r4, r5, r6, r7}\n\t"
24145        "eor	r9, r9, r8, lsl #28\n\t"
24146        "eor	r8, %[len], r8, lsr #4\n\t"
24147        "eor	r8, r8, r4\n\t"
24148        "eor	r9, r9, r5\n\t"
24149        "eor	r10, r10, r6\n\t"
24150        "eor	r11, r11, r7\n\t"
24151        "lsr	r6, r10, #4\n\t"
24152        "and	%[len], r11, #15\n\t"
24153        "lsr	r11, r11, #4\n\t"
24154        "lsr	r4, r12, #20\n\t"
24155        "eor	r11, r11, r10, lsl #28\n\t"
24156        "and	r4, r4, #15\n\t"
24157        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24158        "add	r4, %[m], r4, lsl #4\n\t"
24159        "eor	r10, r6, r9, lsl #28\n\t"
24160        "lsr	r9, r9, #4\n\t"
24161        "ldm	r4, {r4, r5, r6, r7}\n\t"
24162        "eor	r9, r9, r8, lsl #28\n\t"
24163        "eor	r8, %[len], r8, lsr #4\n\t"
24164        "eor	r8, r8, r4\n\t"
24165        "eor	r9, r9, r5\n\t"
24166        "eor	r10, r10, r6\n\t"
24167        "eor	r11, r11, r7\n\t"
24168        "lsr	r6, r10, #4\n\t"
24169        "and	%[len], r11, #15\n\t"
24170        "lsr	r11, r11, #4\n\t"
24171        "lsr	r4, r12, #8\n\t"
24172        "eor	r11, r11, r10, lsl #28\n\t"
24173        "and	r4, r4, #15\n\t"
24174        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24175        "add	r4, %[m], r4, lsl #4\n\t"
24176        "eor	r10, r6, r9, lsl #28\n\t"
24177        "lsr	r9, r9, #4\n\t"
24178        "ldm	r4, {r4, r5, r6, r7}\n\t"
24179        "eor	r9, r9, r8, lsl #28\n\t"
24180        "eor	r8, %[len], r8, lsr #4\n\t"
24181        "eor	r8, r8, r4\n\t"
24182        "eor	r9, r9, r5\n\t"
24183        "eor	r10, r10, r6\n\t"
24184        "eor	r11, r11, r7\n\t"
24185        "lsr	r6, r10, #4\n\t"
24186        "and	%[len], r11, #15\n\t"
24187        "lsr	r11, r11, #4\n\t"
24188        "lsr	r4, r12, #12\n\t"
24189        "eor	r11, r11, r10, lsl #28\n\t"
24190        "and	r4, r4, #15\n\t"
24191        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24192        "add	r4, %[m], r4, lsl #4\n\t"
24193        "eor	r10, r6, r9, lsl #28\n\t"
24194        "lsr	r9, r9, #4\n\t"
24195        "ldm	r4, {r4, r5, r6, r7}\n\t"
24196        "eor	r9, r9, r8, lsl #28\n\t"
24197        "eor	r8, %[len], r8, lsr #4\n\t"
24198        "eor	r8, r8, r4\n\t"
24199        "eor	r9, r9, r5\n\t"
24200        "eor	r10, r10, r6\n\t"
24201        "eor	r11, r11, r7\n\t"
24202        "lsr	r6, r10, #4\n\t"
24203        "and	%[len], r11, #15\n\t"
24204        "lsr	r11, r11, #4\n\t"
24205        "and	r4, r12, #15\n\t"
24206        "eor	r11, r11, r10, lsl #28\n\t"
24207        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24208        "add	r4, %[m], r4, lsl #4\n\t"
24209        "eor	r10, r6, r9, lsl #28\n\t"
24210        "lsr	r9, r9, #4\n\t"
24211        "ldm	r4, {r4, r5, r6, r7}\n\t"
24212        "eor	r9, r9, r8, lsl #28\n\t"
24213        "eor	r8, %[len], r8, lsr #4\n\t"
24214        "eor	r8, r8, r4\n\t"
24215        "eor	r9, r9, r5\n\t"
24216        "eor	r10, r10, r6\n\t"
24217        "eor	r11, r11, r7\n\t"
24218        "lsr	r6, r10, #4\n\t"
24219        "and	%[len], r11, #15\n\t"
24220        "lsr	r11, r11, #4\n\t"
24221        "lsr	r4, r12, #4\n\t"
24222        "eor	r11, r11, r10, lsl #28\n\t"
24223        "and	r4, r4, #15\n\t"
24224        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24225        "add	r4, %[m], r4, lsl #4\n\t"
24226        "eor	r10, r6, r9, lsl #28\n\t"
24227        "lsr	r9, r9, #4\n\t"
24228        "ldm	r4, {r4, r5, r6, r7}\n\t"
24229        "eor	r9, r9, r8, lsl #28\n\t"
24230        "eor	r8, %[len], r8, lsr #4\n\t"
24231        "eor	r8, r8, r4\n\t"
24232        "eor	r9, r9, r5\n\t"
24233        "eor	r10, r10, r6\n\t"
24234        "eor	r11, r11, r7\n\t"
24235        "lsr	r6, r10, #4\n\t"
24236        "and	%[len], r11, #15\n\t"
24237        "lsr	r11, r11, #4\n\t"
24238        "eor	r11, r11, r10, lsl #28\n\t"
24239        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24240        "eor	r10, r6, r9, lsl #28\n\t"
24241        "lsr	r9, r9, #4\n\t"
24242        "eor	r9, r9, r8, lsl #28\n\t"
24243        "eor	r8, %[len], r8, lsr #4\n\t"
24244        "ldr	r12, [r0, #8]\n\t"
24245        "ldr	%[len], [r2, #8]\n\t"
24246        "eor	r12, r12, %[len]\n\t"
24247        "lsr	%[len], r12, #24\n\t"
24248        "and	%[len], %[len], #15\n\t"
24249        "add	%[len], %[m], %[len], lsl #4\n\t"
24250        "ldm	%[len], {r4, r5, r6, r7}\n\t"
24251        "eor	r8, r8, r4\n\t"
24252        "eor	r9, r9, r5\n\t"
24253        "eor	r10, r10, r6\n\t"
24254        "eor	r11, r11, r7\n\t"
24255        "lsr	r6, r10, #4\n\t"
24256        "and	%[len], r11, #15\n\t"
24257        "lsr	r11, r11, #4\n\t"
24258        "lsr	r4, r12, #28\n\t"
24259        "eor	r11, r11, r10, lsl #28\n\t"
24260        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24261        "add	r4, %[m], r4, lsl #4\n\t"
24262        "eor	r10, r6, r9, lsl #28\n\t"
24263        "lsr	r9, r9, #4\n\t"
24264        "ldm	r4, {r4, r5, r6, r7}\n\t"
24265        "eor	r9, r9, r8, lsl #28\n\t"
24266        "eor	r8, %[len], r8, lsr #4\n\t"
24267        "eor	r8, r8, r4\n\t"
24268        "eor	r9, r9, r5\n\t"
24269        "eor	r10, r10, r6\n\t"
24270        "eor	r11, r11, r7\n\t"
24271        "lsr	r6, r10, #4\n\t"
24272        "and	%[len], r11, #15\n\t"
24273        "lsr	r11, r11, #4\n\t"
24274        "lsr	r4, r12, #16\n\t"
24275        "eor	r11, r11, r10, lsl #28\n\t"
24276        "and	r4, r4, #15\n\t"
24277        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24278        "add	r4, %[m], r4, lsl #4\n\t"
24279        "eor	r10, r6, r9, lsl #28\n\t"
24280        "lsr	r9, r9, #4\n\t"
24281        "ldm	r4, {r4, r5, r6, r7}\n\t"
24282        "eor	r9, r9, r8, lsl #28\n\t"
24283        "eor	r8, %[len], r8, lsr #4\n\t"
24284        "eor	r8, r8, r4\n\t"
24285        "eor	r9, r9, r5\n\t"
24286        "eor	r10, r10, r6\n\t"
24287        "eor	r11, r11, r7\n\t"
24288        "lsr	r6, r10, #4\n\t"
24289        "and	%[len], r11, #15\n\t"
24290        "lsr	r11, r11, #4\n\t"
24291        "lsr	r4, r12, #20\n\t"
24292        "eor	r11, r11, r10, lsl #28\n\t"
24293        "and	r4, r4, #15\n\t"
24294        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24295        "add	r4, %[m], r4, lsl #4\n\t"
24296        "eor	r10, r6, r9, lsl #28\n\t"
24297        "lsr	r9, r9, #4\n\t"
24298        "ldm	r4, {r4, r5, r6, r7}\n\t"
24299        "eor	r9, r9, r8, lsl #28\n\t"
24300        "eor	r8, %[len], r8, lsr #4\n\t"
24301        "eor	r8, r8, r4\n\t"
24302        "eor	r9, r9, r5\n\t"
24303        "eor	r10, r10, r6\n\t"
24304        "eor	r11, r11, r7\n\t"
24305        "lsr	r6, r10, #4\n\t"
24306        "and	%[len], r11, #15\n\t"
24307        "lsr	r11, r11, #4\n\t"
24308        "lsr	r4, r12, #8\n\t"
24309        "eor	r11, r11, r10, lsl #28\n\t"
24310        "and	r4, r4, #15\n\t"
24311        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24312        "add	r4, %[m], r4, lsl #4\n\t"
24313        "eor	r10, r6, r9, lsl #28\n\t"
24314        "lsr	r9, r9, #4\n\t"
24315        "ldm	r4, {r4, r5, r6, r7}\n\t"
24316        "eor	r9, r9, r8, lsl #28\n\t"
24317        "eor	r8, %[len], r8, lsr #4\n\t"
24318        "eor	r8, r8, r4\n\t"
24319        "eor	r9, r9, r5\n\t"
24320        "eor	r10, r10, r6\n\t"
24321        "eor	r11, r11, r7\n\t"
24322        "lsr	r6, r10, #4\n\t"
24323        "and	%[len], r11, #15\n\t"
24324        "lsr	r11, r11, #4\n\t"
24325        "lsr	r4, r12, #12\n\t"
24326        "eor	r11, r11, r10, lsl #28\n\t"
24327        "and	r4, r4, #15\n\t"
24328        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24329        "add	r4, %[m], r4, lsl #4\n\t"
24330        "eor	r10, r6, r9, lsl #28\n\t"
24331        "lsr	r9, r9, #4\n\t"
24332        "ldm	r4, {r4, r5, r6, r7}\n\t"
24333        "eor	r9, r9, r8, lsl #28\n\t"
24334        "eor	r8, %[len], r8, lsr #4\n\t"
24335        "eor	r8, r8, r4\n\t"
24336        "eor	r9, r9, r5\n\t"
24337        "eor	r10, r10, r6\n\t"
24338        "eor	r11, r11, r7\n\t"
24339        "lsr	r6, r10, #4\n\t"
24340        "and	%[len], r11, #15\n\t"
24341        "lsr	r11, r11, #4\n\t"
24342        "and	r4, r12, #15\n\t"
24343        "eor	r11, r11, r10, lsl #28\n\t"
24344        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24345        "add	r4, %[m], r4, lsl #4\n\t"
24346        "eor	r10, r6, r9, lsl #28\n\t"
24347        "lsr	r9, r9, #4\n\t"
24348        "ldm	r4, {r4, r5, r6, r7}\n\t"
24349        "eor	r9, r9, r8, lsl #28\n\t"
24350        "eor	r8, %[len], r8, lsr #4\n\t"
24351        "eor	r8, r8, r4\n\t"
24352        "eor	r9, r9, r5\n\t"
24353        "eor	r10, r10, r6\n\t"
24354        "eor	r11, r11, r7\n\t"
24355        "lsr	r6, r10, #4\n\t"
24356        "and	%[len], r11, #15\n\t"
24357        "lsr	r11, r11, #4\n\t"
24358        "lsr	r4, r12, #4\n\t"
24359        "eor	r11, r11, r10, lsl #28\n\t"
24360        "and	r4, r4, #15\n\t"
24361        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24362        "add	r4, %[m], r4, lsl #4\n\t"
24363        "eor	r10, r6, r9, lsl #28\n\t"
24364        "lsr	r9, r9, #4\n\t"
24365        "ldm	r4, {r4, r5, r6, r7}\n\t"
24366        "eor	r9, r9, r8, lsl #28\n\t"
24367        "eor	r8, %[len], r8, lsr #4\n\t"
24368        "eor	r8, r8, r4\n\t"
24369        "eor	r9, r9, r5\n\t"
24370        "eor	r10, r10, r6\n\t"
24371        "eor	r11, r11, r7\n\t"
24372        "lsr	r6, r10, #4\n\t"
24373        "and	%[len], r11, #15\n\t"
24374        "lsr	r11, r11, #4\n\t"
24375        "eor	r11, r11, r10, lsl #28\n\t"
24376        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24377        "eor	r10, r6, r9, lsl #28\n\t"
24378        "lsr	r9, r9, #4\n\t"
24379        "eor	r9, r9, r8, lsl #28\n\t"
24380        "eor	r8, %[len], r8, lsr #4\n\t"
24381        "ldr	r12, [r0, #4]\n\t"
24382        "ldr	%[len], [r2, #4]\n\t"
24383        "eor	r12, r12, %[len]\n\t"
24384        "lsr	%[len], r12, #24\n\t"
24385        "and	%[len], %[len], #15\n\t"
24386        "add	%[len], %[m], %[len], lsl #4\n\t"
24387        "ldm	%[len], {r4, r5, r6, r7}\n\t"
24388        "eor	r8, r8, r4\n\t"
24389        "eor	r9, r9, r5\n\t"
24390        "eor	r10, r10, r6\n\t"
24391        "eor	r11, r11, r7\n\t"
24392        "lsr	r6, r10, #4\n\t"
24393        "and	%[len], r11, #15\n\t"
24394        "lsr	r11, r11, #4\n\t"
24395        "lsr	r4, r12, #28\n\t"
24396        "eor	r11, r11, r10, lsl #28\n\t"
24397        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24398        "add	r4, %[m], r4, lsl #4\n\t"
24399        "eor	r10, r6, r9, lsl #28\n\t"
24400        "lsr	r9, r9, #4\n\t"
24401        "ldm	r4, {r4, r5, r6, r7}\n\t"
24402        "eor	r9, r9, r8, lsl #28\n\t"
24403        "eor	r8, %[len], r8, lsr #4\n\t"
24404        "eor	r8, r8, r4\n\t"
24405        "eor	r9, r9, r5\n\t"
24406        "eor	r10, r10, r6\n\t"
24407        "eor	r11, r11, r7\n\t"
24408        "lsr	r6, r10, #4\n\t"
24409        "and	%[len], r11, #15\n\t"
24410        "lsr	r11, r11, #4\n\t"
24411        "lsr	r4, r12, #16\n\t"
24412        "eor	r11, r11, r10, lsl #28\n\t"
24413        "and	r4, r4, #15\n\t"
24414        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24415        "add	r4, %[m], r4, lsl #4\n\t"
24416        "eor	r10, r6, r9, lsl #28\n\t"
24417        "lsr	r9, r9, #4\n\t"
24418        "ldm	r4, {r4, r5, r6, r7}\n\t"
24419        "eor	r9, r9, r8, lsl #28\n\t"
24420        "eor	r8, %[len], r8, lsr #4\n\t"
24421        "eor	r8, r8, r4\n\t"
24422        "eor	r9, r9, r5\n\t"
24423        "eor	r10, r10, r6\n\t"
24424        "eor	r11, r11, r7\n\t"
24425        "lsr	r6, r10, #4\n\t"
24426        "and	%[len], r11, #15\n\t"
24427        "lsr	r11, r11, #4\n\t"
24428        "lsr	r4, r12, #20\n\t"
24429        "eor	r11, r11, r10, lsl #28\n\t"
24430        "and	r4, r4, #15\n\t"
24431        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24432        "add	r4, %[m], r4, lsl #4\n\t"
24433        "eor	r10, r6, r9, lsl #28\n\t"
24434        "lsr	r9, r9, #4\n\t"
24435        "ldm	r4, {r4, r5, r6, r7}\n\t"
24436        "eor	r9, r9, r8, lsl #28\n\t"
24437        "eor	r8, %[len], r8, lsr #4\n\t"
24438        "eor	r8, r8, r4\n\t"
24439        "eor	r9, r9, r5\n\t"
24440        "eor	r10, r10, r6\n\t"
24441        "eor	r11, r11, r7\n\t"
24442        "lsr	r6, r10, #4\n\t"
24443        "and	%[len], r11, #15\n\t"
24444        "lsr	r11, r11, #4\n\t"
24445        "lsr	r4, r12, #8\n\t"
24446        "eor	r11, r11, r10, lsl #28\n\t"
24447        "and	r4, r4, #15\n\t"
24448        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24449        "add	r4, %[m], r4, lsl #4\n\t"
24450        "eor	r10, r6, r9, lsl #28\n\t"
24451        "lsr	r9, r9, #4\n\t"
24452        "ldm	r4, {r4, r5, r6, r7}\n\t"
24453        "eor	r9, r9, r8, lsl #28\n\t"
24454        "eor	r8, %[len], r8, lsr #4\n\t"
24455        "eor	r8, r8, r4\n\t"
24456        "eor	r9, r9, r5\n\t"
24457        "eor	r10, r10, r6\n\t"
24458        "eor	r11, r11, r7\n\t"
24459        "lsr	r6, r10, #4\n\t"
24460        "and	%[len], r11, #15\n\t"
24461        "lsr	r11, r11, #4\n\t"
24462        "lsr	r4, r12, #12\n\t"
24463        "eor	r11, r11, r10, lsl #28\n\t"
24464        "and	r4, r4, #15\n\t"
24465        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24466        "add	r4, %[m], r4, lsl #4\n\t"
24467        "eor	r10, r6, r9, lsl #28\n\t"
24468        "lsr	r9, r9, #4\n\t"
24469        "ldm	r4, {r4, r5, r6, r7}\n\t"
24470        "eor	r9, r9, r8, lsl #28\n\t"
24471        "eor	r8, %[len], r8, lsr #4\n\t"
24472        "eor	r8, r8, r4\n\t"
24473        "eor	r9, r9, r5\n\t"
24474        "eor	r10, r10, r6\n\t"
24475        "eor	r11, r11, r7\n\t"
24476        "lsr	r6, r10, #4\n\t"
24477        "and	%[len], r11, #15\n\t"
24478        "lsr	r11, r11, #4\n\t"
24479        "and	r4, r12, #15\n\t"
24480        "eor	r11, r11, r10, lsl #28\n\t"
24481        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24482        "add	r4, %[m], r4, lsl #4\n\t"
24483        "eor	r10, r6, r9, lsl #28\n\t"
24484        "lsr	r9, r9, #4\n\t"
24485        "ldm	r4, {r4, r5, r6, r7}\n\t"
24486        "eor	r9, r9, r8, lsl #28\n\t"
24487        "eor	r8, %[len], r8, lsr #4\n\t"
24488        "eor	r8, r8, r4\n\t"
24489        "eor	r9, r9, r5\n\t"
24490        "eor	r10, r10, r6\n\t"
24491        "eor	r11, r11, r7\n\t"
24492        "lsr	r6, r10, #4\n\t"
24493        "and	%[len], r11, #15\n\t"
24494        "lsr	r11, r11, #4\n\t"
24495        "lsr	r4, r12, #4\n\t"
24496        "eor	r11, r11, r10, lsl #28\n\t"
24497        "and	r4, r4, #15\n\t"
24498        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24499        "add	r4, %[m], r4, lsl #4\n\t"
24500        "eor	r10, r6, r9, lsl #28\n\t"
24501        "lsr	r9, r9, #4\n\t"
24502        "ldm	r4, {r4, r5, r6, r7}\n\t"
24503        "eor	r9, r9, r8, lsl #28\n\t"
24504        "eor	r8, %[len], r8, lsr #4\n\t"
24505        "eor	r8, r8, r4\n\t"
24506        "eor	r9, r9, r5\n\t"
24507        "eor	r10, r10, r6\n\t"
24508        "eor	r11, r11, r7\n\t"
24509        "lsr	r6, r10, #4\n\t"
24510        "and	%[len], r11, #15\n\t"
24511        "lsr	r11, r11, #4\n\t"
24512        "eor	r11, r11, r10, lsl #28\n\t"
24513        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24514        "eor	r10, r6, r9, lsl #28\n\t"
24515        "lsr	r9, r9, #4\n\t"
24516        "eor	r9, r9, r8, lsl #28\n\t"
24517        "eor	r8, %[len], r8, lsr #4\n\t"
24518        "ldr	r12, [r0]\n\t"
24519        "ldr	%[len], [r2]\n\t"
24520        "eor	r12, r12, %[len]\n\t"
24521        "lsr	%[len], r12, #24\n\t"
24522        "and	%[len], %[len], #15\n\t"
24523        "add	%[len], %[m], %[len], lsl #4\n\t"
24524        "ldm	%[len], {r4, r5, r6, r7}\n\t"
24525        "eor	r8, r8, r4\n\t"
24526        "eor	r9, r9, r5\n\t"
24527        "eor	r10, r10, r6\n\t"
24528        "eor	r11, r11, r7\n\t"
24529        "lsr	r6, r10, #4\n\t"
24530        "and	%[len], r11, #15\n\t"
24531        "lsr	r11, r11, #4\n\t"
24532        "lsr	r4, r12, #28\n\t"
24533        "eor	r11, r11, r10, lsl #28\n\t"
24534        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24535        "add	r4, %[m], r4, lsl #4\n\t"
24536        "eor	r10, r6, r9, lsl #28\n\t"
24537        "lsr	r9, r9, #4\n\t"
24538        "ldm	r4, {r4, r5, r6, r7}\n\t"
24539        "eor	r9, r9, r8, lsl #28\n\t"
24540        "eor	r8, %[len], r8, lsr #4\n\t"
24541        "eor	r8, r8, r4\n\t"
24542        "eor	r9, r9, r5\n\t"
24543        "eor	r10, r10, r6\n\t"
24544        "eor	r11, r11, r7\n\t"
24545        "lsr	r6, r10, #4\n\t"
24546        "and	%[len], r11, #15\n\t"
24547        "lsr	r11, r11, #4\n\t"
24548        "lsr	r4, r12, #16\n\t"
24549        "eor	r11, r11, r10, lsl #28\n\t"
24550        "and	r4, r4, #15\n\t"
24551        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24552        "add	r4, %[m], r4, lsl #4\n\t"
24553        "eor	r10, r6, r9, lsl #28\n\t"
24554        "lsr	r9, r9, #4\n\t"
24555        "ldm	r4, {r4, r5, r6, r7}\n\t"
24556        "eor	r9, r9, r8, lsl #28\n\t"
24557        "eor	r8, %[len], r8, lsr #4\n\t"
24558        "eor	r8, r8, r4\n\t"
24559        "eor	r9, r9, r5\n\t"
24560        "eor	r10, r10, r6\n\t"
24561        "eor	r11, r11, r7\n\t"
24562        "lsr	r6, r10, #4\n\t"
24563        "and	%[len], r11, #15\n\t"
24564        "lsr	r11, r11, #4\n\t"
24565        "lsr	r4, r12, #20\n\t"
24566        "eor	r11, r11, r10, lsl #28\n\t"
24567        "and	r4, r4, #15\n\t"
24568        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24569        "add	r4, %[m], r4, lsl #4\n\t"
24570        "eor	r10, r6, r9, lsl #28\n\t"
24571        "lsr	r9, r9, #4\n\t"
24572        "ldm	r4, {r4, r5, r6, r7}\n\t"
24573        "eor	r9, r9, r8, lsl #28\n\t"
24574        "eor	r8, %[len], r8, lsr #4\n\t"
24575        "eor	r8, r8, r4\n\t"
24576        "eor	r9, r9, r5\n\t"
24577        "eor	r10, r10, r6\n\t"
24578        "eor	r11, r11, r7\n\t"
24579        "lsr	r6, r10, #4\n\t"
24580        "and	%[len], r11, #15\n\t"
24581        "lsr	r11, r11, #4\n\t"
24582        "lsr	r4, r12, #8\n\t"
24583        "eor	r11, r11, r10, lsl #28\n\t"
24584        "and	r4, r4, #15\n\t"
24585        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24586        "add	r4, %[m], r4, lsl #4\n\t"
24587        "eor	r10, r6, r9, lsl #28\n\t"
24588        "lsr	r9, r9, #4\n\t"
24589        "ldm	r4, {r4, r5, r6, r7}\n\t"
24590        "eor	r9, r9, r8, lsl #28\n\t"
24591        "eor	r8, %[len], r8, lsr #4\n\t"
24592        "eor	r8, r8, r4\n\t"
24593        "eor	r9, r9, r5\n\t"
24594        "eor	r10, r10, r6\n\t"
24595        "eor	r11, r11, r7\n\t"
24596        "lsr	r6, r10, #4\n\t"
24597        "and	%[len], r11, #15\n\t"
24598        "lsr	r11, r11, #4\n\t"
24599        "lsr	r4, r12, #12\n\t"
24600        "eor	r11, r11, r10, lsl #28\n\t"
24601        "and	r4, r4, #15\n\t"
24602        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24603        "add	r4, %[m], r4, lsl #4\n\t"
24604        "eor	r10, r6, r9, lsl #28\n\t"
24605        "lsr	r9, r9, #4\n\t"
24606        "ldm	r4, {r4, r5, r6, r7}\n\t"
24607        "eor	r9, r9, r8, lsl #28\n\t"
24608        "eor	r8, %[len], r8, lsr #4\n\t"
24609        "eor	r8, r8, r4\n\t"
24610        "eor	r9, r9, r5\n\t"
24611        "eor	r10, r10, r6\n\t"
24612        "eor	r11, r11, r7\n\t"
24613        "lsr	r6, r10, #4\n\t"
24614        "and	%[len], r11, #15\n\t"
24615        "lsr	r11, r11, #4\n\t"
24616        "and	r4, r12, #15\n\t"
24617        "eor	r11, r11, r10, lsl #28\n\t"
24618        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24619        "add	r4, %[m], r4, lsl #4\n\t"
24620        "eor	r10, r6, r9, lsl #28\n\t"
24621        "lsr	r9, r9, #4\n\t"
24622        "ldm	r4, {r4, r5, r6, r7}\n\t"
24623        "eor	r9, r9, r8, lsl #28\n\t"
24624        "eor	r8, %[len], r8, lsr #4\n\t"
24625        "eor	r8, r8, r4\n\t"
24626        "eor	r9, r9, r5\n\t"
24627        "eor	r10, r10, r6\n\t"
24628        "eor	r11, r11, r7\n\t"
24629        "lsr	r6, r10, #4\n\t"
24630        "and	%[len], r11, #15\n\t"
24631        "lsr	r11, r11, #4\n\t"
24632        "lsr	r4, r12, #4\n\t"
24633        "eor	r11, r11, r10, lsl #28\n\t"
24634        "and	r4, r4, #15\n\t"
24635        "ldr	%[len], [lr, r3, lsl #2]\n\t"
24636        "add	r4, %[m], r4, lsl #4\n\t"
24637        "eor	r10, r6, r9, lsl #28\n\t"
24638        "lsr	r9, r9, #4\n\t"
24639        "ldm	r4, {r4, r5, r6, r7}\n\t"
24640        "eor	r9, r9, r8, lsl #28\n\t"
24641        "eor	r8, %[len], r8, lsr #4\n\t"
24642        "eor	r8, r8, r4\n\t"
24643        "eor	r9, r9, r5\n\t"
24644        "eor	r10, r10, r6\n\t"
24645        "eor	r11, r11, r7\n\t"
24646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24647        /* REV r8, r8 */
24648        "eor	%[len], r8, r8, ror #16\n\t"
24649        "bic	%[len], %[len], #0xff0000\n\t"
24650        "ror	r8, r8, #8\n\t"
24651        "eor	r8, r8, %[len], lsr #8\n\t"
24652        /* REV r9, r9 */
24653        "eor	%[len], r9, r9, ror #16\n\t"
24654        "bic	%[len], %[len], #0xff0000\n\t"
24655        "ror	r9, r9, #8\n\t"
24656        "eor	r9, r9, %[len], lsr #8\n\t"
24657        /* REV r10, r10 */
24658        "eor	%[len], r10, r10, ror #16\n\t"
24659        "bic	%[len], %[len], #0xff0000\n\t"
24660        "ror	r10, r10, #8\n\t"
24661        "eor	r10, r10, %[len], lsr #8\n\t"
24662        /* REV r11, r11 */
24663        "eor	%[len], r11, r11, ror #16\n\t"
24664        "bic	%[len], %[len], #0xff0000\n\t"
24665        "ror	r11, r11, #8\n\t"
24666        "eor	r11, r11, %[len], lsr #8\n\t"
24667#else
24668        "rev	r8, r8\n\t"
24669        "rev	r9, r9\n\t"
24670        "rev	r10, r10\n\t"
24671        "rev	r11, r11\n\t"
24672#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
24673        "stm	%[x], {r8, r9, r10, r11}\n\t"
24674        "pop	{r3}\n\t"
24675        "subs	%[len], %[len], #16\n\t"
24676        "add	%[data], %[data], #16\n\t"
24677        "bne	L_GCM_gmult_len_start_block_%=\n\t"
24678        "pop	{%[L_GCM_gmult_len_r]}\n\t"
24679#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24680        : [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len),
24681          [L_GCM_gmult_len_r] "+r" (L_GCM_gmult_len_r_c)
24682        :
24683#else
24684        :
24685        : [x] "r" (x), [m] "r" (m), [data] "r" (data), [len] "r" (len),
24686          [L_GCM_gmult_len_r] "r" (L_GCM_gmult_len_r_c)
24687#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
24688        : "memory", "cc", "lr", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
24689            "r11"
24690    );
24691}
24692
24693static const word32* L_AES_ARM32_te_gcm = L_AES_ARM32_te_data;
24694void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p,
24695    unsigned long len_p, const unsigned char* ks_p, int nr_p,
24696    unsigned char* ctr_p);
24697#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24698WC_OMIT_FRAME_POINTER void AES_GCM_encrypt(const unsigned char* in_p,
24699    unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
24700    int nr_p, unsigned char* ctr_p)
24701#else
24702WC_OMIT_FRAME_POINTER void AES_GCM_encrypt(const unsigned char* in,
24703    unsigned char* out, unsigned long len, const unsigned char* ks, int nr,
24704    unsigned char* ctr)
24705#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
24706{
24707#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24708    register const unsigned char* in __asm__ ("r0") =
24709        (const unsigned char*)in_p;
24710    register unsigned char* out __asm__ ("r1") = (unsigned char*)out_p;
24711    register unsigned long len __asm__ ("r2") = (unsigned long)len_p;
24712    register const unsigned char* ks __asm__ ("r3") =
24713        (const unsigned char*)ks_p;
24714    register int nr __asm__ ("r12") = (int)nr_p;
24715    register unsigned char* ctr __asm__ ("lr") = (unsigned char*)ctr_p;
24716    register word32* L_AES_ARM32_te_gcm_c __asm__ ("r4") =
24717        (word32*)L_AES_ARM32_te_gcm;
24718#else
24719    register word32* L_AES_ARM32_te_gcm_c = (word32*)L_AES_ARM32_te_gcm;
24720#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
24721
24722    __asm__ __volatile__ (
24723        "push	{%[L_AES_ARM32_te_gcm]}\n\t"
24724        "push	{%[nr], %[ctr]}\n\t"
24725        "ldr	r12, [sp]\n\t"
24726        "ldr	r8, [sp, #4]\n\t"
24727        "mov	lr, %[in]\n\t"
24728        "ldr	r0, [sp, #8]\n\t"
24729        "ldm	r8, {r4, r5, r6, r7}\n\t"
24730#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24731        "eor	r10, r4, r4, ror #16\n\t"
24732        "eor	r11, r5, r5, ror #16\n\t"
24733        "bic	r10, r10, #0xff0000\n\t"
24734        "bic	r11, r11, #0xff0000\n\t"
24735        "ror	r4, r4, #8\n\t"
24736        "ror	r5, r5, #8\n\t"
24737        "eor	r4, r4, r10, lsr #8\n\t"
24738        "eor	r5, r5, r11, lsr #8\n\t"
24739        "eor	r10, r6, r6, ror #16\n\t"
24740        "eor	r11, r7, r7, ror #16\n\t"
24741        "bic	r10, r10, #0xff0000\n\t"
24742        "bic	r11, r11, #0xff0000\n\t"
24743        "ror	r6, r6, #8\n\t"
24744        "ror	r7, r7, #8\n\t"
24745        "eor	r6, r6, r10, lsr #8\n\t"
24746        "eor	r7, r7, r11, lsr #8\n\t"
24747#else
24748        "rev	r4, r4\n\t"
24749        "rev	r5, r5\n\t"
24750        "rev	r6, r6\n\t"
24751        "rev	r7, r7\n\t"
24752#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
24753        "stm	r8, {r4, r5, r6, r7}\n\t"
24754        "push	{%[ks], r8}\n\t"
24755        "cmp	r12, #10\n\t"
24756        "beq	L_AES_GCM_encrypt_start_block_128_%=\n\t"
24757        "cmp	r12, #12\n\t"
24758        "beq	L_AES_GCM_encrypt_start_block_192_%=\n\t"
24759        "\n"
24760    "L_AES_GCM_encrypt_loop_block_256_%=:\n\t"
24761        "push	{r1, %[len], lr}\n\t"
24762        "ldr	lr, [sp, #16]\n\t"
24763        "add	r7, r7, #1\n\t"
24764        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
24765        "str	r7, [lr, #12]\n\t"
24766        /* Round: 0 - XOR in key schedule */
24767        "eor	r4, r4, r8\n\t"
24768        "eor	r5, r5, r9\n\t"
24769        "eor	r6, r6, r10\n\t"
24770        "eor	r7, r7, r11\n\t"
24771        "mov	r1, #6\n\t"
24772#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
24773        "bl	AES_encrypt_block\n\t"
24774#else
24775        "\n"
24776    "L_AES_GCM_encrypt_block_nr_256_%=:\n\t"
24777#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24778#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24779        "lsl	r8, r5, #8\n\t"
24780        "lsr	r8, r8, #24\n\t"
24781#else
24782        "uxtb	r8, r5, ror #16\n\t"
24783#endif
24784#else
24785        "ubfx	r8, r5, #16, #8\n\t"
24786#endif
24787        "lsr	r11, r4, #24\n\t"
24788#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24789#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24790        "lsl	lr, r6, #16\n\t"
24791        "lsr	lr, lr, #24\n\t"
24792#else
24793        "uxtb	lr, r6, ror #8\n\t"
24794#endif
24795#else
24796        "ubfx	lr, r6, #8, #8\n\t"
24797#endif
24798#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24799#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24800        "lsl	r2, r7, #24\n\t"
24801        "lsr	r2, r2, #24\n\t"
24802#else
24803        "uxtb	r2, r7\n\t"
24804#endif
24805#else
24806        "ubfx	r2, r7, #0, #8\n\t"
24807#endif
24808        "ldr	r8, [r0, r8, lsl #2]\n\t"
24809        "ldr	r11, [r0, r11, lsl #2]\n\t"
24810        "ldr	lr, [r0, lr, lsl #2]\n\t"
24811        "ldr	r2, [r0, r2, lsl #2]\n\t"
24812#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24813#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24814        "lsl	r9, r6, #8\n\t"
24815        "lsr	r9, r9, #24\n\t"
24816#else
24817        "uxtb	r9, r6, ror #16\n\t"
24818#endif
24819#else
24820        "ubfx	r9, r6, #16, #8\n\t"
24821#endif
24822        "eor	r8, r8, r11, ror #24\n\t"
24823        "lsr	r11, r5, #24\n\t"
24824        "eor	r8, r8, lr, ror #8\n\t"
24825#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24826#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24827        "lsl	lr, r7, #16\n\t"
24828        "lsr	lr, lr, #24\n\t"
24829#else
24830        "uxtb	lr, r7, ror #8\n\t"
24831#endif
24832#else
24833        "ubfx	lr, r7, #8, #8\n\t"
24834#endif
24835        "eor	r8, r8, r2, ror #16\n\t"
24836#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24837#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24838        "lsl	r2, r4, #24\n\t"
24839        "lsr	r2, r2, #24\n\t"
24840#else
24841        "uxtb	r2, r4\n\t"
24842#endif
24843#else
24844        "ubfx	r2, r4, #0, #8\n\t"
24845#endif
24846        "ldr	r9, [r0, r9, lsl #2]\n\t"
24847        "ldr	r11, [r0, r11, lsl #2]\n\t"
24848        "ldr	lr, [r0, lr, lsl #2]\n\t"
24849        "ldr	r2, [r0, r2, lsl #2]\n\t"
24850#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24851#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24852        "lsl	r10, r7, #8\n\t"
24853        "lsr	r10, r10, #24\n\t"
24854#else
24855        "uxtb	r10, r7, ror #16\n\t"
24856#endif
24857#else
24858        "ubfx	r10, r7, #16, #8\n\t"
24859#endif
24860        "eor	r9, r9, r11, ror #24\n\t"
24861        "lsr	r11, r6, #24\n\t"
24862        "eor	r9, r9, lr, ror #8\n\t"
24863#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24864#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24865        "lsl	lr, r4, #16\n\t"
24866        "lsr	lr, lr, #24\n\t"
24867#else
24868        "uxtb	lr, r4, ror #8\n\t"
24869#endif
24870#else
24871        "ubfx	lr, r4, #8, #8\n\t"
24872#endif
24873        "eor	r9, r9, r2, ror #16\n\t"
24874#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24875#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24876        "lsl	r2, r5, #24\n\t"
24877        "lsr	r2, r2, #24\n\t"
24878#else
24879        "uxtb	r2, r5\n\t"
24880#endif
24881#else
24882        "ubfx	r2, r5, #0, #8\n\t"
24883#endif
24884        "ldr	r10, [r0, r10, lsl #2]\n\t"
24885        "ldr	r11, [r0, r11, lsl #2]\n\t"
24886        "ldr	lr, [r0, lr, lsl #2]\n\t"
24887        "ldr	r2, [r0, r2, lsl #2]\n\t"
24888#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24889#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24890        "lsl	r6, r6, #24\n\t"
24891        "lsr	r6, r6, #24\n\t"
24892#else
24893        "uxtb	r6, r6\n\t"
24894#endif
24895#else
24896        "ubfx	r6, r6, #0, #8\n\t"
24897#endif
24898        "eor	r10, r10, r11, ror #24\n\t"
24899#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24900#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24901        "lsl	r11, r4, #8\n\t"
24902        "lsr	r11, r11, #24\n\t"
24903#else
24904        "uxtb	r11, r4, ror #16\n\t"
24905#endif
24906#else
24907        "ubfx	r11, r4, #16, #8\n\t"
24908#endif
24909        "eor	r10, r10, lr, ror #8\n\t"
24910        "lsr	lr, r7, #24\n\t"
24911        "eor	r10, r10, r2, ror #16\n\t"
24912#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24913#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24914        "lsl	r2, r5, #16\n\t"
24915        "lsr	r2, r2, #24\n\t"
24916#else
24917        "uxtb	r2, r5, ror #8\n\t"
24918#endif
24919#else
24920        "ubfx	r2, r5, #8, #8\n\t"
24921#endif
24922        "ldr	r6, [r0, r6, lsl #2]\n\t"
24923        "ldr	lr, [r0, lr, lsl #2]\n\t"
24924        "ldr	r11, [r0, r11, lsl #2]\n\t"
24925        "ldr	r2, [r0, r2, lsl #2]\n\t"
24926        "eor	lr, lr, r6, ror #24\n\t"
24927        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
24928        "eor	r11, r11, lr, ror #24\n\t"
24929        "eor	r11, r11, r2, ror #8\n\t"
24930        /*   XOR in Key Schedule */
24931        "eor	r8, r8, r4\n\t"
24932        "eor	r9, r9, r5\n\t"
24933        "eor	r10, r10, r6\n\t"
24934        "eor	r11, r11, r7\n\t"
24935#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24936#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24937        "lsl	r4, r9, #8\n\t"
24938        "lsr	r4, r4, #24\n\t"
24939#else
24940        "uxtb	r4, r9, ror #16\n\t"
24941#endif
24942#else
24943        "ubfx	r4, r9, #16, #8\n\t"
24944#endif
24945        "lsr	r7, r8, #24\n\t"
24946#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24947#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24948        "lsl	lr, r10, #16\n\t"
24949        "lsr	lr, lr, #24\n\t"
24950#else
24951        "uxtb	lr, r10, ror #8\n\t"
24952#endif
24953#else
24954        "ubfx	lr, r10, #8, #8\n\t"
24955#endif
24956#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24957#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24958        "lsl	r2, r11, #24\n\t"
24959        "lsr	r2, r2, #24\n\t"
24960#else
24961        "uxtb	r2, r11\n\t"
24962#endif
24963#else
24964        "ubfx	r2, r11, #0, #8\n\t"
24965#endif
24966        "ldr	r4, [r0, r4, lsl #2]\n\t"
24967        "ldr	r7, [r0, r7, lsl #2]\n\t"
24968        "ldr	lr, [r0, lr, lsl #2]\n\t"
24969        "ldr	r2, [r0, r2, lsl #2]\n\t"
24970#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24971#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24972        "lsl	r5, r10, #8\n\t"
24973        "lsr	r5, r5, #24\n\t"
24974#else
24975        "uxtb	r5, r10, ror #16\n\t"
24976#endif
24977#else
24978        "ubfx	r5, r10, #16, #8\n\t"
24979#endif
24980        "eor	r4, r4, r7, ror #24\n\t"
24981        "lsr	r7, r9, #24\n\t"
24982        "eor	r4, r4, lr, ror #8\n\t"
24983#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24984#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24985        "lsl	lr, r11, #16\n\t"
24986        "lsr	lr, lr, #24\n\t"
24987#else
24988        "uxtb	lr, r11, ror #8\n\t"
24989#endif
24990#else
24991        "ubfx	lr, r11, #8, #8\n\t"
24992#endif
24993        "eor	r4, r4, r2, ror #16\n\t"
24994#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24995#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24996        "lsl	r2, r8, #24\n\t"
24997        "lsr	r2, r2, #24\n\t"
24998#else
24999        "uxtb	r2, r8\n\t"
25000#endif
25001#else
25002        "ubfx	r2, r8, #0, #8\n\t"
25003#endif
25004        "ldr	r5, [r0, r5, lsl #2]\n\t"
25005        "ldr	r7, [r0, r7, lsl #2]\n\t"
25006        "ldr	lr, [r0, lr, lsl #2]\n\t"
25007        "ldr	r2, [r0, r2, lsl #2]\n\t"
25008#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25009#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25010        "lsl	r6, r11, #8\n\t"
25011        "lsr	r6, r6, #24\n\t"
25012#else
25013        "uxtb	r6, r11, ror #16\n\t"
25014#endif
25015#else
25016        "ubfx	r6, r11, #16, #8\n\t"
25017#endif
25018        "eor	r5, r5, r7, ror #24\n\t"
25019        "lsr	r7, r10, #24\n\t"
25020        "eor	r5, r5, lr, ror #8\n\t"
25021#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25022#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25023        "lsl	lr, r8, #16\n\t"
25024        "lsr	lr, lr, #24\n\t"
25025#else
25026        "uxtb	lr, r8, ror #8\n\t"
25027#endif
25028#else
25029        "ubfx	lr, r8, #8, #8\n\t"
25030#endif
25031        "eor	r5, r5, r2, ror #16\n\t"
25032#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25033#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25034        "lsl	r2, r9, #24\n\t"
25035        "lsr	r2, r2, #24\n\t"
25036#else
25037        "uxtb	r2, r9\n\t"
25038#endif
25039#else
25040        "ubfx	r2, r9, #0, #8\n\t"
25041#endif
25042        "ldr	r6, [r0, r6, lsl #2]\n\t"
25043        "ldr	r7, [r0, r7, lsl #2]\n\t"
25044        "ldr	lr, [r0, lr, lsl #2]\n\t"
25045        "ldr	r2, [r0, r2, lsl #2]\n\t"
25046#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25047#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25048        "lsl	r10, r10, #24\n\t"
25049        "lsr	r10, r10, #24\n\t"
25050#else
25051        "uxtb	r10, r10\n\t"
25052#endif
25053#else
25054        "ubfx	r10, r10, #0, #8\n\t"
25055#endif
25056        "eor	r6, r6, r7, ror #24\n\t"
25057#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25058#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25059        "lsl	r7, r8, #8\n\t"
25060        "lsr	r7, r7, #24\n\t"
25061#else
25062        "uxtb	r7, r8, ror #16\n\t"
25063#endif
25064#else
25065        "ubfx	r7, r8, #16, #8\n\t"
25066#endif
25067        "eor	r6, r6, lr, ror #8\n\t"
25068        "lsr	lr, r11, #24\n\t"
25069        "eor	r6, r6, r2, ror #16\n\t"
25070#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25071#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25072        "lsl	r2, r9, #16\n\t"
25073        "lsr	r2, r2, #24\n\t"
25074#else
25075        "uxtb	r2, r9, ror #8\n\t"
25076#endif
25077#else
25078        "ubfx	r2, r9, #8, #8\n\t"
25079#endif
25080        "ldr	r10, [r0, r10, lsl #2]\n\t"
25081        "ldr	lr, [r0, lr, lsl #2]\n\t"
25082        "ldr	r7, [r0, r7, lsl #2]\n\t"
25083        "ldr	r2, [r0, r2, lsl #2]\n\t"
25084        "eor	lr, lr, r10, ror #24\n\t"
25085        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
25086        "eor	r7, r7, lr, ror #24\n\t"
25087        "eor	r7, r7, r2, ror #8\n\t"
25088        /*   XOR in Key Schedule */
25089        "eor	r4, r4, r8\n\t"
25090        "eor	r5, r5, r9\n\t"
25091        "eor	r6, r6, r10\n\t"
25092        "eor	r7, r7, r11\n\t"
25093        "subs	r1, r1, #1\n\t"
25094        "bne	L_AES_GCM_encrypt_block_nr_256_%=\n\t"
25095#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25096#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25097        "lsl	r8, r5, #8\n\t"
25098        "lsr	r8, r8, #24\n\t"
25099#else
25100        "uxtb	r8, r5, ror #16\n\t"
25101#endif
25102#else
25103        "ubfx	r8, r5, #16, #8\n\t"
25104#endif
25105        "lsr	r11, r4, #24\n\t"
25106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25107#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25108        "lsl	lr, r6, #16\n\t"
25109        "lsr	lr, lr, #24\n\t"
25110#else
25111        "uxtb	lr, r6, ror #8\n\t"
25112#endif
25113#else
25114        "ubfx	lr, r6, #8, #8\n\t"
25115#endif
25116#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25117#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25118        "lsl	r2, r7, #24\n\t"
25119        "lsr	r2, r2, #24\n\t"
25120#else
25121        "uxtb	r2, r7\n\t"
25122#endif
25123#else
25124        "ubfx	r2, r7, #0, #8\n\t"
25125#endif
25126        "ldr	r8, [r0, r8, lsl #2]\n\t"
25127        "ldr	r11, [r0, r11, lsl #2]\n\t"
25128        "ldr	lr, [r0, lr, lsl #2]\n\t"
25129        "ldr	r2, [r0, r2, lsl #2]\n\t"
25130#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25131#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25132        "lsl	r9, r6, #8\n\t"
25133        "lsr	r9, r9, #24\n\t"
25134#else
25135        "uxtb	r9, r6, ror #16\n\t"
25136#endif
25137#else
25138        "ubfx	r9, r6, #16, #8\n\t"
25139#endif
25140        "eor	r8, r8, r11, ror #24\n\t"
25141        "lsr	r11, r5, #24\n\t"
25142        "eor	r8, r8, lr, ror #8\n\t"
25143#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25144#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25145        "lsl	lr, r7, #16\n\t"
25146        "lsr	lr, lr, #24\n\t"
25147#else
25148        "uxtb	lr, r7, ror #8\n\t"
25149#endif
25150#else
25151        "ubfx	lr, r7, #8, #8\n\t"
25152#endif
25153        "eor	r8, r8, r2, ror #16\n\t"
25154#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25155#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25156        "lsl	r2, r4, #24\n\t"
25157        "lsr	r2, r2, #24\n\t"
25158#else
25159        "uxtb	r2, r4\n\t"
25160#endif
25161#else
25162        "ubfx	r2, r4, #0, #8\n\t"
25163#endif
25164        "ldr	r9, [r0, r9, lsl #2]\n\t"
25165        "ldr	r11, [r0, r11, lsl #2]\n\t"
25166        "ldr	lr, [r0, lr, lsl #2]\n\t"
25167        "ldr	r2, [r0, r2, lsl #2]\n\t"
25168#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25169#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25170        "lsl	r10, r7, #8\n\t"
25171        "lsr	r10, r10, #24\n\t"
25172#else
25173        "uxtb	r10, r7, ror #16\n\t"
25174#endif
25175#else
25176        "ubfx	r10, r7, #16, #8\n\t"
25177#endif
25178        "eor	r9, r9, r11, ror #24\n\t"
25179        "lsr	r11, r6, #24\n\t"
25180        "eor	r9, r9, lr, ror #8\n\t"
25181#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25182#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25183        "lsl	lr, r4, #16\n\t"
25184        "lsr	lr, lr, #24\n\t"
25185#else
25186        "uxtb	lr, r4, ror #8\n\t"
25187#endif
25188#else
25189        "ubfx	lr, r4, #8, #8\n\t"
25190#endif
25191        "eor	r9, r9, r2, ror #16\n\t"
25192#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25193#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25194        "lsl	r2, r5, #24\n\t"
25195        "lsr	r2, r2, #24\n\t"
25196#else
25197        "uxtb	r2, r5\n\t"
25198#endif
25199#else
25200        "ubfx	r2, r5, #0, #8\n\t"
25201#endif
25202        "ldr	r10, [r0, r10, lsl #2]\n\t"
25203        "ldr	r11, [r0, r11, lsl #2]\n\t"
25204        "ldr	lr, [r0, lr, lsl #2]\n\t"
25205        "ldr	r2, [r0, r2, lsl #2]\n\t"
25206#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25207#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25208        "lsl	r6, r6, #24\n\t"
25209        "lsr	r6, r6, #24\n\t"
25210#else
25211        "uxtb	r6, r6\n\t"
25212#endif
25213#else
25214        "ubfx	r6, r6, #0, #8\n\t"
25215#endif
25216        "eor	r10, r10, r11, ror #24\n\t"
25217#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25218#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25219        "lsl	r11, r4, #8\n\t"
25220        "lsr	r11, r11, #24\n\t"
25221#else
25222        "uxtb	r11, r4, ror #16\n\t"
25223#endif
25224#else
25225        "ubfx	r11, r4, #16, #8\n\t"
25226#endif
25227        "eor	r10, r10, lr, ror #8\n\t"
25228        "lsr	lr, r7, #24\n\t"
25229        "eor	r10, r10, r2, ror #16\n\t"
25230#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25231#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25232        "lsl	r2, r5, #16\n\t"
25233        "lsr	r2, r2, #24\n\t"
25234#else
25235        "uxtb	r2, r5, ror #8\n\t"
25236#endif
25237#else
25238        "ubfx	r2, r5, #8, #8\n\t"
25239#endif
25240        "ldr	r6, [r0, r6, lsl #2]\n\t"
25241        "ldr	lr, [r0, lr, lsl #2]\n\t"
25242        "ldr	r11, [r0, r11, lsl #2]\n\t"
25243        "ldr	r2, [r0, r2, lsl #2]\n\t"
25244        "eor	lr, lr, r6, ror #24\n\t"
25245        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
25246        "eor	r11, r11, lr, ror #24\n\t"
25247        "eor	r11, r11, r2, ror #8\n\t"
25248        /*   XOR in Key Schedule */
25249        "eor	r8, r8, r4\n\t"
25250        "eor	r9, r9, r5\n\t"
25251        "eor	r10, r10, r6\n\t"
25252        "eor	r11, r11, r7\n\t"
25253#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25254#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25255        "lsl	r4, r11, #24\n\t"
25256        "lsr	r4, r4, #24\n\t"
25257#else
25258        "uxtb	r4, r11\n\t"
25259#endif
25260#else
25261        "ubfx	r4, r11, #0, #8\n\t"
25262#endif
25263#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25264#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25265        "lsl	r7, r10, #16\n\t"
25266        "lsr	r7, r7, #24\n\t"
25267#else
25268        "uxtb	r7, r10, ror #8\n\t"
25269#endif
25270#else
25271        "ubfx	r7, r10, #8, #8\n\t"
25272#endif
25273#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25274#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25275        "lsl	lr, r9, #8\n\t"
25276        "lsr	lr, lr, #24\n\t"
25277#else
25278        "uxtb	lr, r9, ror #16\n\t"
25279#endif
25280#else
25281        "ubfx	lr, r9, #16, #8\n\t"
25282#endif
25283        "lsr	r2, r8, #24\n\t"
25284        "ldrb	r4, [r0, r4, lsl #2]\n\t"
25285        "ldrb	r7, [r0, r7, lsl #2]\n\t"
25286        "ldrb	lr, [r0, lr, lsl #2]\n\t"
25287        "ldrb	r2, [r0, r2, lsl #2]\n\t"
25288#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25289#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25290        "lsl	r5, r8, #24\n\t"
25291        "lsr	r5, r5, #24\n\t"
25292#else
25293        "uxtb	r5, r8\n\t"
25294#endif
25295#else
25296        "ubfx	r5, r8, #0, #8\n\t"
25297#endif
25298        "eor	r4, r4, r7, lsl #8\n\t"
25299#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25300#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25301        "lsl	r7, r11, #16\n\t"
25302        "lsr	r7, r7, #24\n\t"
25303#else
25304        "uxtb	r7, r11, ror #8\n\t"
25305#endif
25306#else
25307        "ubfx	r7, r11, #8, #8\n\t"
25308#endif
25309        "eor	r4, r4, lr, lsl #16\n\t"
25310#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25311#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25312        "lsl	lr, r10, #8\n\t"
25313        "lsr	lr, lr, #24\n\t"
25314#else
25315        "uxtb	lr, r10, ror #16\n\t"
25316#endif
25317#else
25318        "ubfx	lr, r10, #16, #8\n\t"
25319#endif
25320        "eor	r4, r4, r2, lsl #24\n\t"
25321        "lsr	r2, r9, #24\n\t"
25322        "ldrb	r5, [r0, r5, lsl #2]\n\t"
25323        "ldrb	r7, [r0, r7, lsl #2]\n\t"
25324        "ldrb	lr, [r0, lr, lsl #2]\n\t"
25325        "ldrb	r2, [r0, r2, lsl #2]\n\t"
25326#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25327#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25328        "lsl	r6, r9, #24\n\t"
25329        "lsr	r6, r6, #24\n\t"
25330#else
25331        "uxtb	r6, r9\n\t"
25332#endif
25333#else
25334        "ubfx	r6, r9, #0, #8\n\t"
25335#endif
25336        "eor	r5, r5, r7, lsl #8\n\t"
25337#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25338#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25339        "lsl	r7, r8, #16\n\t"
25340        "lsr	r7, r7, #24\n\t"
25341#else
25342        "uxtb	r7, r8, ror #8\n\t"
25343#endif
25344#else
25345        "ubfx	r7, r8, #8, #8\n\t"
25346#endif
25347        "eor	r5, r5, lr, lsl #16\n\t"
25348#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25349#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25350        "lsl	lr, r11, #8\n\t"
25351        "lsr	lr, lr, #24\n\t"
25352#else
25353        "uxtb	lr, r11, ror #16\n\t"
25354#endif
25355#else
25356        "ubfx	lr, r11, #16, #8\n\t"
25357#endif
25358        "eor	r5, r5, r2, lsl #24\n\t"
25359        "lsr	r2, r10, #24\n\t"
25360        "ldrb	r6, [r0, r6, lsl #2]\n\t"
25361        "ldrb	r7, [r0, r7, lsl #2]\n\t"
25362        "ldrb	lr, [r0, lr, lsl #2]\n\t"
25363        "ldrb	r2, [r0, r2, lsl #2]\n\t"
25364        "lsr	r11, r11, #24\n\t"
25365        "eor	r6, r6, r7, lsl #8\n\t"
25366#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25367#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25368        "lsl	r7, r10, #24\n\t"
25369        "lsr	r7, r7, #24\n\t"
25370#else
25371        "uxtb	r7, r10\n\t"
25372#endif
25373#else
25374        "ubfx	r7, r10, #0, #8\n\t"
25375#endif
25376        "eor	r6, r6, lr, lsl #16\n\t"
25377#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25378#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25379        "lsl	lr, r9, #16\n\t"
25380        "lsr	lr, lr, #24\n\t"
25381#else
25382        "uxtb	lr, r9, ror #8\n\t"
25383#endif
25384#else
25385        "ubfx	lr, r9, #8, #8\n\t"
25386#endif
25387        "eor	r6, r6, r2, lsl #24\n\t"
25388#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25389#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25390        "lsl	r2, r8, #8\n\t"
25391        "lsr	r2, r2, #24\n\t"
25392#else
25393        "uxtb	r2, r8, ror #16\n\t"
25394#endif
25395#else
25396        "ubfx	r2, r8, #16, #8\n\t"
25397#endif
25398        "ldrb	r11, [r0, r11, lsl #2]\n\t"
25399        "ldrb	r7, [r0, r7, lsl #2]\n\t"
25400        "ldrb	lr, [r0, lr, lsl #2]\n\t"
25401        "ldrb	r2, [r0, r2, lsl #2]\n\t"
25402        "eor	lr, lr, r11, lsl #16\n\t"
25403        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
25404        "eor	r7, r7, lr, lsl #8\n\t"
25405        "eor	r7, r7, r2, lsl #16\n\t"
25406        /*   XOR in Key Schedule */
25407        "eor	r4, r4, r8\n\t"
25408        "eor	r5, r5, r9\n\t"
25409        "eor	r6, r6, r10\n\t"
25410        "eor	r7, r7, r11\n\t"
25411#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
25412        "pop	{r1, %[len], lr}\n\t"
25413        "ldr	%[ks], [sp]\n\t"
25414#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25415        "eor	r8, r4, r4, ror #16\n\t"
25416        "eor	r9, r5, r5, ror #16\n\t"
25417        "eor	r10, r6, r6, ror #16\n\t"
25418        "eor	r11, r7, r7, ror #16\n\t"
25419        "bic	r8, r8, #0xff0000\n\t"
25420        "bic	r9, r9, #0xff0000\n\t"
25421        "bic	r10, r10, #0xff0000\n\t"
25422        "bic	r11, r11, #0xff0000\n\t"
25423        "ror	r4, r4, #8\n\t"
25424        "ror	r5, r5, #8\n\t"
25425        "ror	r6, r6, #8\n\t"
25426        "ror	r7, r7, #8\n\t"
25427        "eor	r4, r4, r8, lsr #8\n\t"
25428        "eor	r5, r5, r9, lsr #8\n\t"
25429        "eor	r6, r6, r10, lsr #8\n\t"
25430        "eor	r7, r7, r11, lsr #8\n\t"
25431#else
25432        "rev	r4, r4\n\t"
25433        "rev	r5, r5\n\t"
25434        "rev	r6, r6\n\t"
25435        "rev	r7, r7\n\t"
25436#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
25437        "ldr	r8, [lr]\n\t"
25438        "ldr	r9, [lr, #4]\n\t"
25439        "ldr	r10, [lr, #8]\n\t"
25440        "ldr	r11, [lr, #12]\n\t"
25441        "eor	r4, r4, r8\n\t"
25442        "eor	r5, r5, r9\n\t"
25443        "eor	r6, r6, r10\n\t"
25444        "eor	r7, r7, r11\n\t"
25445        "ldr	r8, [sp, #4]\n\t"
25446        "str	r4, [%[out]]\n\t"
25447        "str	r5, [%[out], #4]\n\t"
25448        "str	r6, [%[out], #8]\n\t"
25449        "str	r7, [%[out], #12]\n\t"
25450        "ldm	r8, {r4, r5, r6, r7}\n\t"
25451        "subs	%[len], %[len], #16\n\t"
25452        "add	lr, lr, #16\n\t"
25453        "add	%[out], %[out], #16\n\t"
25454        "bne	L_AES_GCM_encrypt_loop_block_256_%=\n\t"
25455        "b	L_AES_GCM_encrypt_end_%=\n\t"
25456        "\n"
25457    "L_AES_GCM_encrypt_start_block_192_%=:\n\t"
25458        "\n"
25459    "L_AES_GCM_encrypt_loop_block_192_%=:\n\t"
25460        "push	{r1, %[len], lr}\n\t"
25461        "ldr	lr, [sp, #16]\n\t"
25462        "add	r7, r7, #1\n\t"
25463        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
25464        "str	r7, [lr, #12]\n\t"
25465        /* Round: 0 - XOR in key schedule */
25466        "eor	r4, r4, r8\n\t"
25467        "eor	r5, r5, r9\n\t"
25468        "eor	r6, r6, r10\n\t"
25469        "eor	r7, r7, r11\n\t"
25470        "mov	r1, #5\n\t"
25471#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
25472        "bl	AES_encrypt_block\n\t"
25473#else
25474        "\n"
25475    "L_AES_GCM_encrypt_block_nr_192_%=:\n\t"
25476#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25477#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25478        "lsl	r8, r5, #8\n\t"
25479        "lsr	r8, r8, #24\n\t"
25480#else
25481        "uxtb	r8, r5, ror #16\n\t"
25482#endif
25483#else
25484        "ubfx	r8, r5, #16, #8\n\t"
25485#endif
25486        "lsr	r11, r4, #24\n\t"
25487#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25488#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25489        "lsl	lr, r6, #16\n\t"
25490        "lsr	lr, lr, #24\n\t"
25491#else
25492        "uxtb	lr, r6, ror #8\n\t"
25493#endif
25494#else
25495        "ubfx	lr, r6, #8, #8\n\t"
25496#endif
25497#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25498#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25499        "lsl	r2, r7, #24\n\t"
25500        "lsr	r2, r2, #24\n\t"
25501#else
25502        "uxtb	r2, r7\n\t"
25503#endif
25504#else
25505        "ubfx	r2, r7, #0, #8\n\t"
25506#endif
25507        "ldr	r8, [r0, r8, lsl #2]\n\t"
25508        "ldr	r11, [r0, r11, lsl #2]\n\t"
25509        "ldr	lr, [r0, lr, lsl #2]\n\t"
25510        "ldr	r2, [r0, r2, lsl #2]\n\t"
25511#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25512#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25513        "lsl	r9, r6, #8\n\t"
25514        "lsr	r9, r9, #24\n\t"
25515#else
25516        "uxtb	r9, r6, ror #16\n\t"
25517#endif
25518#else
25519        "ubfx	r9, r6, #16, #8\n\t"
25520#endif
25521        "eor	r8, r8, r11, ror #24\n\t"
25522        "lsr	r11, r5, #24\n\t"
25523        "eor	r8, r8, lr, ror #8\n\t"
25524#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25525#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25526        "lsl	lr, r7, #16\n\t"
25527        "lsr	lr, lr, #24\n\t"
25528#else
25529        "uxtb	lr, r7, ror #8\n\t"
25530#endif
25531#else
25532        "ubfx	lr, r7, #8, #8\n\t"
25533#endif
25534        "eor	r8, r8, r2, ror #16\n\t"
25535#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25536#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25537        "lsl	r2, r4, #24\n\t"
25538        "lsr	r2, r2, #24\n\t"
25539#else
25540        "uxtb	r2, r4\n\t"
25541#endif
25542#else
25543        "ubfx	r2, r4, #0, #8\n\t"
25544#endif
25545        "ldr	r9, [r0, r9, lsl #2]\n\t"
25546        "ldr	r11, [r0, r11, lsl #2]\n\t"
25547        "ldr	lr, [r0, lr, lsl #2]\n\t"
25548        "ldr	r2, [r0, r2, lsl #2]\n\t"
25549#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25550#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25551        "lsl	r10, r7, #8\n\t"
25552        "lsr	r10, r10, #24\n\t"
25553#else
25554        "uxtb	r10, r7, ror #16\n\t"
25555#endif
25556#else
25557        "ubfx	r10, r7, #16, #8\n\t"
25558#endif
25559        "eor	r9, r9, r11, ror #24\n\t"
25560        "lsr	r11, r6, #24\n\t"
25561        "eor	r9, r9, lr, ror #8\n\t"
25562#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25563#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25564        "lsl	lr, r4, #16\n\t"
25565        "lsr	lr, lr, #24\n\t"
25566#else
25567        "uxtb	lr, r4, ror #8\n\t"
25568#endif
25569#else
25570        "ubfx	lr, r4, #8, #8\n\t"
25571#endif
25572        "eor	r9, r9, r2, ror #16\n\t"
25573#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25574#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25575        "lsl	r2, r5, #24\n\t"
25576        "lsr	r2, r2, #24\n\t"
25577#else
25578        "uxtb	r2, r5\n\t"
25579#endif
25580#else
25581        "ubfx	r2, r5, #0, #8\n\t"
25582#endif
25583        "ldr	r10, [r0, r10, lsl #2]\n\t"
25584        "ldr	r11, [r0, r11, lsl #2]\n\t"
25585        "ldr	lr, [r0, lr, lsl #2]\n\t"
25586        "ldr	r2, [r0, r2, lsl #2]\n\t"
25587#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25588#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25589        "lsl	r6, r6, #24\n\t"
25590        "lsr	r6, r6, #24\n\t"
25591#else
25592        "uxtb	r6, r6\n\t"
25593#endif
25594#else
25595        "ubfx	r6, r6, #0, #8\n\t"
25596#endif
25597        "eor	r10, r10, r11, ror #24\n\t"
25598#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25599#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25600        "lsl	r11, r4, #8\n\t"
25601        "lsr	r11, r11, #24\n\t"
25602#else
25603        "uxtb	r11, r4, ror #16\n\t"
25604#endif
25605#else
25606        "ubfx	r11, r4, #16, #8\n\t"
25607#endif
25608        "eor	r10, r10, lr, ror #8\n\t"
25609        "lsr	lr, r7, #24\n\t"
25610        "eor	r10, r10, r2, ror #16\n\t"
25611#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25612#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25613        "lsl	r2, r5, #16\n\t"
25614        "lsr	r2, r2, #24\n\t"
25615#else
25616        "uxtb	r2, r5, ror #8\n\t"
25617#endif
25618#else
25619        "ubfx	r2, r5, #8, #8\n\t"
25620#endif
25621        "ldr	r6, [r0, r6, lsl #2]\n\t"
25622        "ldr	lr, [r0, lr, lsl #2]\n\t"
25623        "ldr	r11, [r0, r11, lsl #2]\n\t"
25624        "ldr	r2, [r0, r2, lsl #2]\n\t"
25625        "eor	lr, lr, r6, ror #24\n\t"
25626        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
25627        "eor	r11, r11, lr, ror #24\n\t"
25628        "eor	r11, r11, r2, ror #8\n\t"
25629        /*   XOR in Key Schedule */
25630        "eor	r8, r8, r4\n\t"
25631        "eor	r9, r9, r5\n\t"
25632        "eor	r10, r10, r6\n\t"
25633        "eor	r11, r11, r7\n\t"
25634#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25635#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25636        "lsl	r4, r9, #8\n\t"
25637        "lsr	r4, r4, #24\n\t"
25638#else
25639        "uxtb	r4, r9, ror #16\n\t"
25640#endif
25641#else
25642        "ubfx	r4, r9, #16, #8\n\t"
25643#endif
25644        "lsr	r7, r8, #24\n\t"
25645#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25647        "lsl	lr, r10, #16\n\t"
25648        "lsr	lr, lr, #24\n\t"
25649#else
25650        "uxtb	lr, r10, ror #8\n\t"
25651#endif
25652#else
25653        "ubfx	lr, r10, #8, #8\n\t"
25654#endif
25655#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25656#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25657        "lsl	r2, r11, #24\n\t"
25658        "lsr	r2, r2, #24\n\t"
25659#else
25660        "uxtb	r2, r11\n\t"
25661#endif
25662#else
25663        "ubfx	r2, r11, #0, #8\n\t"
25664#endif
25665        "ldr	r4, [r0, r4, lsl #2]\n\t"
25666        "ldr	r7, [r0, r7, lsl #2]\n\t"
25667        "ldr	lr, [r0, lr, lsl #2]\n\t"
25668        "ldr	r2, [r0, r2, lsl #2]\n\t"
25669#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25670#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25671        "lsl	r5, r10, #8\n\t"
25672        "lsr	r5, r5, #24\n\t"
25673#else
25674        "uxtb	r5, r10, ror #16\n\t"
25675#endif
25676#else
25677        "ubfx	r5, r10, #16, #8\n\t"
25678#endif
25679        "eor	r4, r4, r7, ror #24\n\t"
25680        "lsr	r7, r9, #24\n\t"
25681        "eor	r4, r4, lr, ror #8\n\t"
25682#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25683#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25684        "lsl	lr, r11, #16\n\t"
25685        "lsr	lr, lr, #24\n\t"
25686#else
25687        "uxtb	lr, r11, ror #8\n\t"
25688#endif
25689#else
25690        "ubfx	lr, r11, #8, #8\n\t"
25691#endif
25692        "eor	r4, r4, r2, ror #16\n\t"
25693#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25694#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25695        "lsl	r2, r8, #24\n\t"
25696        "lsr	r2, r2, #24\n\t"
25697#else
25698        "uxtb	r2, r8\n\t"
25699#endif
25700#else
25701        "ubfx	r2, r8, #0, #8\n\t"
25702#endif
25703        "ldr	r5, [r0, r5, lsl #2]\n\t"
25704        "ldr	r7, [r0, r7, lsl #2]\n\t"
25705        "ldr	lr, [r0, lr, lsl #2]\n\t"
25706        "ldr	r2, [r0, r2, lsl #2]\n\t"
25707#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25708#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25709        "lsl	r6, r11, #8\n\t"
25710        "lsr	r6, r6, #24\n\t"
25711#else
25712        "uxtb	r6, r11, ror #16\n\t"
25713#endif
25714#else
25715        "ubfx	r6, r11, #16, #8\n\t"
25716#endif
25717        "eor	r5, r5, r7, ror #24\n\t"
25718        "lsr	r7, r10, #24\n\t"
25719        "eor	r5, r5, lr, ror #8\n\t"
25720#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25721#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25722        "lsl	lr, r8, #16\n\t"
25723        "lsr	lr, lr, #24\n\t"
25724#else
25725        "uxtb	lr, r8, ror #8\n\t"
25726#endif
25727#else
25728        "ubfx	lr, r8, #8, #8\n\t"
25729#endif
25730        "eor	r5, r5, r2, ror #16\n\t"
25731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25733        "lsl	r2, r9, #24\n\t"
25734        "lsr	r2, r2, #24\n\t"
25735#else
25736        "uxtb	r2, r9\n\t"
25737#endif
25738#else
25739        "ubfx	r2, r9, #0, #8\n\t"
25740#endif
25741        "ldr	r6, [r0, r6, lsl #2]\n\t"
25742        "ldr	r7, [r0, r7, lsl #2]\n\t"
25743        "ldr	lr, [r0, lr, lsl #2]\n\t"
25744        "ldr	r2, [r0, r2, lsl #2]\n\t"
25745#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25746#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25747        "lsl	r10, r10, #24\n\t"
25748        "lsr	r10, r10, #24\n\t"
25749#else
25750        "uxtb	r10, r10\n\t"
25751#endif
25752#else
25753        "ubfx	r10, r10, #0, #8\n\t"
25754#endif
25755        "eor	r6, r6, r7, ror #24\n\t"
25756#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25757#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25758        "lsl	r7, r8, #8\n\t"
25759        "lsr	r7, r7, #24\n\t"
25760#else
25761        "uxtb	r7, r8, ror #16\n\t"
25762#endif
25763#else
25764        "ubfx	r7, r8, #16, #8\n\t"
25765#endif
25766        "eor	r6, r6, lr, ror #8\n\t"
25767        "lsr	lr, r11, #24\n\t"
25768        "eor	r6, r6, r2, ror #16\n\t"
25769#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25770#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25771        "lsl	r2, r9, #16\n\t"
25772        "lsr	r2, r2, #24\n\t"
25773#else
25774        "uxtb	r2, r9, ror #8\n\t"
25775#endif
25776#else
25777        "ubfx	r2, r9, #8, #8\n\t"
25778#endif
25779        "ldr	r10, [r0, r10, lsl #2]\n\t"
25780        "ldr	lr, [r0, lr, lsl #2]\n\t"
25781        "ldr	r7, [r0, r7, lsl #2]\n\t"
25782        "ldr	r2, [r0, r2, lsl #2]\n\t"
25783        "eor	lr, lr, r10, ror #24\n\t"
25784        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
25785        "eor	r7, r7, lr, ror #24\n\t"
25786        "eor	r7, r7, r2, ror #8\n\t"
25787        /*   XOR in Key Schedule */
25788        "eor	r4, r4, r8\n\t"
25789        "eor	r5, r5, r9\n\t"
25790        "eor	r6, r6, r10\n\t"
25791        "eor	r7, r7, r11\n\t"
25792        "subs	r1, r1, #1\n\t"
25793        "bne	L_AES_GCM_encrypt_block_nr_192_%=\n\t"
25794#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25795#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25796        "lsl	r8, r5, #8\n\t"
25797        "lsr	r8, r8, #24\n\t"
25798#else
25799        "uxtb	r8, r5, ror #16\n\t"
25800#endif
25801#else
25802        "ubfx	r8, r5, #16, #8\n\t"
25803#endif
25804        "lsr	r11, r4, #24\n\t"
25805#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25806#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25807        "lsl	lr, r6, #16\n\t"
25808        "lsr	lr, lr, #24\n\t"
25809#else
25810        "uxtb	lr, r6, ror #8\n\t"
25811#endif
25812#else
25813        "ubfx	lr, r6, #8, #8\n\t"
25814#endif
25815#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25816#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25817        "lsl	r2, r7, #24\n\t"
25818        "lsr	r2, r2, #24\n\t"
25819#else
25820        "uxtb	r2, r7\n\t"
25821#endif
25822#else
25823        "ubfx	r2, r7, #0, #8\n\t"
25824#endif
25825        "ldr	r8, [r0, r8, lsl #2]\n\t"
25826        "ldr	r11, [r0, r11, lsl #2]\n\t"
25827        "ldr	lr, [r0, lr, lsl #2]\n\t"
25828        "ldr	r2, [r0, r2, lsl #2]\n\t"
25829#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25830#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25831        "lsl	r9, r6, #8\n\t"
25832        "lsr	r9, r9, #24\n\t"
25833#else
25834        "uxtb	r9, r6, ror #16\n\t"
25835#endif
25836#else
25837        "ubfx	r9, r6, #16, #8\n\t"
25838#endif
25839        "eor	r8, r8, r11, ror #24\n\t"
25840        "lsr	r11, r5, #24\n\t"
25841        "eor	r8, r8, lr, ror #8\n\t"
25842#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25843#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25844        "lsl	lr, r7, #16\n\t"
25845        "lsr	lr, lr, #24\n\t"
25846#else
25847        "uxtb	lr, r7, ror #8\n\t"
25848#endif
25849#else
25850        "ubfx	lr, r7, #8, #8\n\t"
25851#endif
25852        "eor	r8, r8, r2, ror #16\n\t"
25853#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25854#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25855        "lsl	r2, r4, #24\n\t"
25856        "lsr	r2, r2, #24\n\t"
25857#else
25858        "uxtb	r2, r4\n\t"
25859#endif
25860#else
25861        "ubfx	r2, r4, #0, #8\n\t"
25862#endif
25863        "ldr	r9, [r0, r9, lsl #2]\n\t"
25864        "ldr	r11, [r0, r11, lsl #2]\n\t"
25865        "ldr	lr, [r0, lr, lsl #2]\n\t"
25866        "ldr	r2, [r0, r2, lsl #2]\n\t"
25867#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25868#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25869        "lsl	r10, r7, #8\n\t"
25870        "lsr	r10, r10, #24\n\t"
25871#else
25872        "uxtb	r10, r7, ror #16\n\t"
25873#endif
25874#else
25875        "ubfx	r10, r7, #16, #8\n\t"
25876#endif
25877        "eor	r9, r9, r11, ror #24\n\t"
25878        "lsr	r11, r6, #24\n\t"
25879        "eor	r9, r9, lr, ror #8\n\t"
25880#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25881#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25882        "lsl	lr, r4, #16\n\t"
25883        "lsr	lr, lr, #24\n\t"
25884#else
25885        "uxtb	lr, r4, ror #8\n\t"
25886#endif
25887#else
25888        "ubfx	lr, r4, #8, #8\n\t"
25889#endif
25890        "eor	r9, r9, r2, ror #16\n\t"
25891#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25892#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25893        "lsl	r2, r5, #24\n\t"
25894        "lsr	r2, r2, #24\n\t"
25895#else
25896        "uxtb	r2, r5\n\t"
25897#endif
25898#else
25899        "ubfx	r2, r5, #0, #8\n\t"
25900#endif
25901        "ldr	r10, [r0, r10, lsl #2]\n\t"
25902        "ldr	r11, [r0, r11, lsl #2]\n\t"
25903        "ldr	lr, [r0, lr, lsl #2]\n\t"
25904        "ldr	r2, [r0, r2, lsl #2]\n\t"
25905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25906#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25907        "lsl	r6, r6, #24\n\t"
25908        "lsr	r6, r6, #24\n\t"
25909#else
25910        "uxtb	r6, r6\n\t"
25911#endif
25912#else
25913        "ubfx	r6, r6, #0, #8\n\t"
25914#endif
25915        "eor	r10, r10, r11, ror #24\n\t"
25916#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25917#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25918        "lsl	r11, r4, #8\n\t"
25919        "lsr	r11, r11, #24\n\t"
25920#else
25921        "uxtb	r11, r4, ror #16\n\t"
25922#endif
25923#else
25924        "ubfx	r11, r4, #16, #8\n\t"
25925#endif
25926        "eor	r10, r10, lr, ror #8\n\t"
25927        "lsr	lr, r7, #24\n\t"
25928        "eor	r10, r10, r2, ror #16\n\t"
25929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25930#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25931        "lsl	r2, r5, #16\n\t"
25932        "lsr	r2, r2, #24\n\t"
25933#else
25934        "uxtb	r2, r5, ror #8\n\t"
25935#endif
25936#else
25937        "ubfx	r2, r5, #8, #8\n\t"
25938#endif
25939        "ldr	r6, [r0, r6, lsl #2]\n\t"
25940        "ldr	lr, [r0, lr, lsl #2]\n\t"
25941        "ldr	r11, [r0, r11, lsl #2]\n\t"
25942        "ldr	r2, [r0, r2, lsl #2]\n\t"
25943        "eor	lr, lr, r6, ror #24\n\t"
25944        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
25945        "eor	r11, r11, lr, ror #24\n\t"
25946        "eor	r11, r11, r2, ror #8\n\t"
25947        /*   XOR in Key Schedule */
25948        "eor	r8, r8, r4\n\t"
25949        "eor	r9, r9, r5\n\t"
25950        "eor	r10, r10, r6\n\t"
25951        "eor	r11, r11, r7\n\t"
25952#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25953#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25954        "lsl	r4, r11, #24\n\t"
25955        "lsr	r4, r4, #24\n\t"
25956#else
25957        "uxtb	r4, r11\n\t"
25958#endif
25959#else
25960        "ubfx	r4, r11, #0, #8\n\t"
25961#endif
25962#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25964        "lsl	r7, r10, #16\n\t"
25965        "lsr	r7, r7, #24\n\t"
25966#else
25967        "uxtb	r7, r10, ror #8\n\t"
25968#endif
25969#else
25970        "ubfx	r7, r10, #8, #8\n\t"
25971#endif
25972#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25973#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25974        "lsl	lr, r9, #8\n\t"
25975        "lsr	lr, lr, #24\n\t"
25976#else
25977        "uxtb	lr, r9, ror #16\n\t"
25978#endif
25979#else
25980        "ubfx	lr, r9, #16, #8\n\t"
25981#endif
25982        "lsr	r2, r8, #24\n\t"
25983        "ldrb	r4, [r0, r4, lsl #2]\n\t"
25984        "ldrb	r7, [r0, r7, lsl #2]\n\t"
25985        "ldrb	lr, [r0, lr, lsl #2]\n\t"
25986        "ldrb	r2, [r0, r2, lsl #2]\n\t"
25987#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25988#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25989        "lsl	r5, r8, #24\n\t"
25990        "lsr	r5, r5, #24\n\t"
25991#else
25992        "uxtb	r5, r8\n\t"
25993#endif
25994#else
25995        "ubfx	r5, r8, #0, #8\n\t"
25996#endif
25997        "eor	r4, r4, r7, lsl #8\n\t"
25998#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25999#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26000        "lsl	r7, r11, #16\n\t"
26001        "lsr	r7, r7, #24\n\t"
26002#else
26003        "uxtb	r7, r11, ror #8\n\t"
26004#endif
26005#else
26006        "ubfx	r7, r11, #8, #8\n\t"
26007#endif
26008        "eor	r4, r4, lr, lsl #16\n\t"
26009#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26010#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26011        "lsl	lr, r10, #8\n\t"
26012        "lsr	lr, lr, #24\n\t"
26013#else
26014        "uxtb	lr, r10, ror #16\n\t"
26015#endif
26016#else
26017        "ubfx	lr, r10, #16, #8\n\t"
26018#endif
26019        "eor	r4, r4, r2, lsl #24\n\t"
26020        "lsr	r2, r9, #24\n\t"
26021        "ldrb	r5, [r0, r5, lsl #2]\n\t"
26022        "ldrb	r7, [r0, r7, lsl #2]\n\t"
26023        "ldrb	lr, [r0, lr, lsl #2]\n\t"
26024        "ldrb	r2, [r0, r2, lsl #2]\n\t"
26025#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26026#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26027        "lsl	r6, r9, #24\n\t"
26028        "lsr	r6, r6, #24\n\t"
26029#else
26030        "uxtb	r6, r9\n\t"
26031#endif
26032#else
26033        "ubfx	r6, r9, #0, #8\n\t"
26034#endif
26035        "eor	r5, r5, r7, lsl #8\n\t"
26036#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26037#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26038        "lsl	r7, r8, #16\n\t"
26039        "lsr	r7, r7, #24\n\t"
26040#else
26041        "uxtb	r7, r8, ror #8\n\t"
26042#endif
26043#else
26044        "ubfx	r7, r8, #8, #8\n\t"
26045#endif
26046        "eor	r5, r5, lr, lsl #16\n\t"
26047#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26048#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26049        "lsl	lr, r11, #8\n\t"
26050        "lsr	lr, lr, #24\n\t"
26051#else
26052        "uxtb	lr, r11, ror #16\n\t"
26053#endif
26054#else
26055        "ubfx	lr, r11, #16, #8\n\t"
26056#endif
26057        "eor	r5, r5, r2, lsl #24\n\t"
26058        "lsr	r2, r10, #24\n\t"
26059        "ldrb	r6, [r0, r6, lsl #2]\n\t"
26060        "ldrb	r7, [r0, r7, lsl #2]\n\t"
26061        "ldrb	lr, [r0, lr, lsl #2]\n\t"
26062        "ldrb	r2, [r0, r2, lsl #2]\n\t"
26063        "lsr	r11, r11, #24\n\t"
26064        "eor	r6, r6, r7, lsl #8\n\t"
26065#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26066#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26067        "lsl	r7, r10, #24\n\t"
26068        "lsr	r7, r7, #24\n\t"
26069#else
26070        "uxtb	r7, r10\n\t"
26071#endif
26072#else
26073        "ubfx	r7, r10, #0, #8\n\t"
26074#endif
26075        "eor	r6, r6, lr, lsl #16\n\t"
26076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26077#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26078        "lsl	lr, r9, #16\n\t"
26079        "lsr	lr, lr, #24\n\t"
26080#else
26081        "uxtb	lr, r9, ror #8\n\t"
26082#endif
26083#else
26084        "ubfx	lr, r9, #8, #8\n\t"
26085#endif
26086        "eor	r6, r6, r2, lsl #24\n\t"
26087#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26088#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26089        "lsl	r2, r8, #8\n\t"
26090        "lsr	r2, r2, #24\n\t"
26091#else
26092        "uxtb	r2, r8, ror #16\n\t"
26093#endif
26094#else
26095        "ubfx	r2, r8, #16, #8\n\t"
26096#endif
26097        "ldrb	r11, [r0, r11, lsl #2]\n\t"
26098        "ldrb	r7, [r0, r7, lsl #2]\n\t"
26099        "ldrb	lr, [r0, lr, lsl #2]\n\t"
26100        "ldrb	r2, [r0, r2, lsl #2]\n\t"
26101        "eor	lr, lr, r11, lsl #16\n\t"
26102        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
26103        "eor	r7, r7, lr, lsl #8\n\t"
26104        "eor	r7, r7, r2, lsl #16\n\t"
26105        /*   XOR in Key Schedule */
26106        "eor	r4, r4, r8\n\t"
26107        "eor	r5, r5, r9\n\t"
26108        "eor	r6, r6, r10\n\t"
26109        "eor	r7, r7, r11\n\t"
26110#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
26111        "pop	{r1, %[len], lr}\n\t"
26112        "ldr	%[ks], [sp]\n\t"
26113#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26114        "eor	r8, r4, r4, ror #16\n\t"
26115        "eor	r9, r5, r5, ror #16\n\t"
26116        "eor	r10, r6, r6, ror #16\n\t"
26117        "eor	r11, r7, r7, ror #16\n\t"
26118        "bic	r8, r8, #0xff0000\n\t"
26119        "bic	r9, r9, #0xff0000\n\t"
26120        "bic	r10, r10, #0xff0000\n\t"
26121        "bic	r11, r11, #0xff0000\n\t"
26122        "ror	r4, r4, #8\n\t"
26123        "ror	r5, r5, #8\n\t"
26124        "ror	r6, r6, #8\n\t"
26125        "ror	r7, r7, #8\n\t"
26126        "eor	r4, r4, r8, lsr #8\n\t"
26127        "eor	r5, r5, r9, lsr #8\n\t"
26128        "eor	r6, r6, r10, lsr #8\n\t"
26129        "eor	r7, r7, r11, lsr #8\n\t"
26130#else
26131        "rev	r4, r4\n\t"
26132        "rev	r5, r5\n\t"
26133        "rev	r6, r6\n\t"
26134        "rev	r7, r7\n\t"
26135#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
26136        "ldr	r8, [lr]\n\t"
26137        "ldr	r9, [lr, #4]\n\t"
26138        "ldr	r10, [lr, #8]\n\t"
26139        "ldr	r11, [lr, #12]\n\t"
26140        "eor	r4, r4, r8\n\t"
26141        "eor	r5, r5, r9\n\t"
26142        "eor	r6, r6, r10\n\t"
26143        "eor	r7, r7, r11\n\t"
26144        "ldr	r8, [sp, #4]\n\t"
26145        "str	r4, [%[out]]\n\t"
26146        "str	r5, [%[out], #4]\n\t"
26147        "str	r6, [%[out], #8]\n\t"
26148        "str	r7, [%[out], #12]\n\t"
26149        "ldm	r8, {r4, r5, r6, r7}\n\t"
26150        "subs	%[len], %[len], #16\n\t"
26151        "add	lr, lr, #16\n\t"
26152        "add	%[out], %[out], #16\n\t"
26153        "bne	L_AES_GCM_encrypt_loop_block_192_%=\n\t"
26154        "b	L_AES_GCM_encrypt_end_%=\n\t"
26155        "\n"
26156    "L_AES_GCM_encrypt_start_block_128_%=:\n\t"
26157        "\n"
26158    "L_AES_GCM_encrypt_loop_block_128_%=:\n\t"
26159        "push	{r1, %[len], lr}\n\t"
26160        "ldr	lr, [sp, #16]\n\t"
26161        "add	r7, r7, #1\n\t"
26162        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
26163        "str	r7, [lr, #12]\n\t"
26164        /* Round: 0 - XOR in key schedule */
26165        "eor	r4, r4, r8\n\t"
26166        "eor	r5, r5, r9\n\t"
26167        "eor	r6, r6, r10\n\t"
26168        "eor	r7, r7, r11\n\t"
26169        "mov	r1, #4\n\t"
26170#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
26171        "bl	AES_encrypt_block\n\t"
26172#else
26173        "\n"
26174    "L_AES_GCM_encrypt_block_nr_128_%=:\n\t"
26175#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26176#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26177        "lsl	r8, r5, #8\n\t"
26178        "lsr	r8, r8, #24\n\t"
26179#else
26180        "uxtb	r8, r5, ror #16\n\t"
26181#endif
26182#else
26183        "ubfx	r8, r5, #16, #8\n\t"
26184#endif
26185        "lsr	r11, r4, #24\n\t"
26186#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26188        "lsl	lr, r6, #16\n\t"
26189        "lsr	lr, lr, #24\n\t"
26190#else
26191        "uxtb	lr, r6, ror #8\n\t"
26192#endif
26193#else
26194        "ubfx	lr, r6, #8, #8\n\t"
26195#endif
26196#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26197#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26198        "lsl	r2, r7, #24\n\t"
26199        "lsr	r2, r2, #24\n\t"
26200#else
26201        "uxtb	r2, r7\n\t"
26202#endif
26203#else
26204        "ubfx	r2, r7, #0, #8\n\t"
26205#endif
26206        "ldr	r8, [r0, r8, lsl #2]\n\t"
26207        "ldr	r11, [r0, r11, lsl #2]\n\t"
26208        "ldr	lr, [r0, lr, lsl #2]\n\t"
26209        "ldr	r2, [r0, r2, lsl #2]\n\t"
26210#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26211#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26212        "lsl	r9, r6, #8\n\t"
26213        "lsr	r9, r9, #24\n\t"
26214#else
26215        "uxtb	r9, r6, ror #16\n\t"
26216#endif
26217#else
26218        "ubfx	r9, r6, #16, #8\n\t"
26219#endif
26220        "eor	r8, r8, r11, ror #24\n\t"
26221        "lsr	r11, r5, #24\n\t"
26222        "eor	r8, r8, lr, ror #8\n\t"
26223#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26224#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26225        "lsl	lr, r7, #16\n\t"
26226        "lsr	lr, lr, #24\n\t"
26227#else
26228        "uxtb	lr, r7, ror #8\n\t"
26229#endif
26230#else
26231        "ubfx	lr, r7, #8, #8\n\t"
26232#endif
26233        "eor	r8, r8, r2, ror #16\n\t"
26234#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26235#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26236        "lsl	r2, r4, #24\n\t"
26237        "lsr	r2, r2, #24\n\t"
26238#else
26239        "uxtb	r2, r4\n\t"
26240#endif
26241#else
26242        "ubfx	r2, r4, #0, #8\n\t"
26243#endif
26244        "ldr	r9, [r0, r9, lsl #2]\n\t"
26245        "ldr	r11, [r0, r11, lsl #2]\n\t"
26246        "ldr	lr, [r0, lr, lsl #2]\n\t"
26247        "ldr	r2, [r0, r2, lsl #2]\n\t"
26248#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26249#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26250        "lsl	r10, r7, #8\n\t"
26251        "lsr	r10, r10, #24\n\t"
26252#else
26253        "uxtb	r10, r7, ror #16\n\t"
26254#endif
26255#else
26256        "ubfx	r10, r7, #16, #8\n\t"
26257#endif
26258        "eor	r9, r9, r11, ror #24\n\t"
26259        "lsr	r11, r6, #24\n\t"
26260        "eor	r9, r9, lr, ror #8\n\t"
26261#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26262#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26263        "lsl	lr, r4, #16\n\t"
26264        "lsr	lr, lr, #24\n\t"
26265#else
26266        "uxtb	lr, r4, ror #8\n\t"
26267#endif
26268#else
26269        "ubfx	lr, r4, #8, #8\n\t"
26270#endif
26271        "eor	r9, r9, r2, ror #16\n\t"
26272#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26273#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26274        "lsl	r2, r5, #24\n\t"
26275        "lsr	r2, r2, #24\n\t"
26276#else
26277        "uxtb	r2, r5\n\t"
26278#endif
26279#else
26280        "ubfx	r2, r5, #0, #8\n\t"
26281#endif
26282        "ldr	r10, [r0, r10, lsl #2]\n\t"
26283        "ldr	r11, [r0, r11, lsl #2]\n\t"
26284        "ldr	lr, [r0, lr, lsl #2]\n\t"
26285        "ldr	r2, [r0, r2, lsl #2]\n\t"
26286#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26287#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26288        "lsl	r6, r6, #24\n\t"
26289        "lsr	r6, r6, #24\n\t"
26290#else
26291        "uxtb	r6, r6\n\t"
26292#endif
26293#else
26294        "ubfx	r6, r6, #0, #8\n\t"
26295#endif
26296        "eor	r10, r10, r11, ror #24\n\t"
26297#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26298#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26299        "lsl	r11, r4, #8\n\t"
26300        "lsr	r11, r11, #24\n\t"
26301#else
26302        "uxtb	r11, r4, ror #16\n\t"
26303#endif
26304#else
26305        "ubfx	r11, r4, #16, #8\n\t"
26306#endif
26307        "eor	r10, r10, lr, ror #8\n\t"
26308        "lsr	lr, r7, #24\n\t"
26309        "eor	r10, r10, r2, ror #16\n\t"
26310#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26311#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26312        "lsl	r2, r5, #16\n\t"
26313        "lsr	r2, r2, #24\n\t"
26314#else
26315        "uxtb	r2, r5, ror #8\n\t"
26316#endif
26317#else
26318        "ubfx	r2, r5, #8, #8\n\t"
26319#endif
26320        "ldr	r6, [r0, r6, lsl #2]\n\t"
26321        "ldr	lr, [r0, lr, lsl #2]\n\t"
26322        "ldr	r11, [r0, r11, lsl #2]\n\t"
26323        "ldr	r2, [r0, r2, lsl #2]\n\t"
26324        "eor	lr, lr, r6, ror #24\n\t"
26325        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
26326        "eor	r11, r11, lr, ror #24\n\t"
26327        "eor	r11, r11, r2, ror #8\n\t"
26328        /*   XOR in Key Schedule */
26329        "eor	r8, r8, r4\n\t"
26330        "eor	r9, r9, r5\n\t"
26331        "eor	r10, r10, r6\n\t"
26332        "eor	r11, r11, r7\n\t"
26333#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26334#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26335        "lsl	r4, r9, #8\n\t"
26336        "lsr	r4, r4, #24\n\t"
26337#else
26338        "uxtb	r4, r9, ror #16\n\t"
26339#endif
26340#else
26341        "ubfx	r4, r9, #16, #8\n\t"
26342#endif
26343        "lsr	r7, r8, #24\n\t"
26344#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26345#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26346        "lsl	lr, r10, #16\n\t"
26347        "lsr	lr, lr, #24\n\t"
26348#else
26349        "uxtb	lr, r10, ror #8\n\t"
26350#endif
26351#else
26352        "ubfx	lr, r10, #8, #8\n\t"
26353#endif
26354#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26355#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26356        "lsl	r2, r11, #24\n\t"
26357        "lsr	r2, r2, #24\n\t"
26358#else
26359        "uxtb	r2, r11\n\t"
26360#endif
26361#else
26362        "ubfx	r2, r11, #0, #8\n\t"
26363#endif
26364        "ldr	r4, [r0, r4, lsl #2]\n\t"
26365        "ldr	r7, [r0, r7, lsl #2]\n\t"
26366        "ldr	lr, [r0, lr, lsl #2]\n\t"
26367        "ldr	r2, [r0, r2, lsl #2]\n\t"
26368#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26369#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26370        "lsl	r5, r10, #8\n\t"
26371        "lsr	r5, r5, #24\n\t"
26372#else
26373        "uxtb	r5, r10, ror #16\n\t"
26374#endif
26375#else
26376        "ubfx	r5, r10, #16, #8\n\t"
26377#endif
26378        "eor	r4, r4, r7, ror #24\n\t"
26379        "lsr	r7, r9, #24\n\t"
26380        "eor	r4, r4, lr, ror #8\n\t"
26381#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26382#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26383        "lsl	lr, r11, #16\n\t"
26384        "lsr	lr, lr, #24\n\t"
26385#else
26386        "uxtb	lr, r11, ror #8\n\t"
26387#endif
26388#else
26389        "ubfx	lr, r11, #8, #8\n\t"
26390#endif
26391        "eor	r4, r4, r2, ror #16\n\t"
26392#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26393#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26394        "lsl	r2, r8, #24\n\t"
26395        "lsr	r2, r2, #24\n\t"
26396#else
26397        "uxtb	r2, r8\n\t"
26398#endif
26399#else
26400        "ubfx	r2, r8, #0, #8\n\t"
26401#endif
26402        "ldr	r5, [r0, r5, lsl #2]\n\t"
26403        "ldr	r7, [r0, r7, lsl #2]\n\t"
26404        "ldr	lr, [r0, lr, lsl #2]\n\t"
26405        "ldr	r2, [r0, r2, lsl #2]\n\t"
26406#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26407#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26408        "lsl	r6, r11, #8\n\t"
26409        "lsr	r6, r6, #24\n\t"
26410#else
26411        "uxtb	r6, r11, ror #16\n\t"
26412#endif
26413#else
26414        "ubfx	r6, r11, #16, #8\n\t"
26415#endif
26416        "eor	r5, r5, r7, ror #24\n\t"
26417        "lsr	r7, r10, #24\n\t"
26418        "eor	r5, r5, lr, ror #8\n\t"
26419#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26420#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26421        "lsl	lr, r8, #16\n\t"
26422        "lsr	lr, lr, #24\n\t"
26423#else
26424        "uxtb	lr, r8, ror #8\n\t"
26425#endif
26426#else
26427        "ubfx	lr, r8, #8, #8\n\t"
26428#endif
26429        "eor	r5, r5, r2, ror #16\n\t"
26430#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26431#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26432        "lsl	r2, r9, #24\n\t"
26433        "lsr	r2, r2, #24\n\t"
26434#else
26435        "uxtb	r2, r9\n\t"
26436#endif
26437#else
26438        "ubfx	r2, r9, #0, #8\n\t"
26439#endif
26440        "ldr	r6, [r0, r6, lsl #2]\n\t"
26441        "ldr	r7, [r0, r7, lsl #2]\n\t"
26442        "ldr	lr, [r0, lr, lsl #2]\n\t"
26443        "ldr	r2, [r0, r2, lsl #2]\n\t"
26444#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26445#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26446        "lsl	r10, r10, #24\n\t"
26447        "lsr	r10, r10, #24\n\t"
26448#else
26449        "uxtb	r10, r10\n\t"
26450#endif
26451#else
26452        "ubfx	r10, r10, #0, #8\n\t"
26453#endif
26454        "eor	r6, r6, r7, ror #24\n\t"
26455#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26456#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26457        "lsl	r7, r8, #8\n\t"
26458        "lsr	r7, r7, #24\n\t"
26459#else
26460        "uxtb	r7, r8, ror #16\n\t"
26461#endif
26462#else
26463        "ubfx	r7, r8, #16, #8\n\t"
26464#endif
26465        "eor	r6, r6, lr, ror #8\n\t"
26466        "lsr	lr, r11, #24\n\t"
26467        "eor	r6, r6, r2, ror #16\n\t"
26468#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26469#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26470        "lsl	r2, r9, #16\n\t"
26471        "lsr	r2, r2, #24\n\t"
26472#else
26473        "uxtb	r2, r9, ror #8\n\t"
26474#endif
26475#else
26476        "ubfx	r2, r9, #8, #8\n\t"
26477#endif
26478        "ldr	r10, [r0, r10, lsl #2]\n\t"
26479        "ldr	lr, [r0, lr, lsl #2]\n\t"
26480        "ldr	r7, [r0, r7, lsl #2]\n\t"
26481        "ldr	r2, [r0, r2, lsl #2]\n\t"
26482        "eor	lr, lr, r10, ror #24\n\t"
26483        "ldm	%[ks]!, {r8, r9, r10, r11}\n\t"
26484        "eor	r7, r7, lr, ror #24\n\t"
26485        "eor	r7, r7, r2, ror #8\n\t"
26486        /*   XOR in Key Schedule */
26487        "eor	r4, r4, r8\n\t"
26488        "eor	r5, r5, r9\n\t"
26489        "eor	r6, r6, r10\n\t"
26490        "eor	r7, r7, r11\n\t"
26491        "subs	r1, r1, #1\n\t"
26492        "bne	L_AES_GCM_encrypt_block_nr_128_%=\n\t"
26493#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26494#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26495        "lsl	r8, r5, #8\n\t"
26496        "lsr	r8, r8, #24\n\t"
26497#else
26498        "uxtb	r8, r5, ror #16\n\t"
26499#endif
26500#else
26501        "ubfx	r8, r5, #16, #8\n\t"
26502#endif
26503        "lsr	r11, r4, #24\n\t"
26504#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26505#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26506        "lsl	lr, r6, #16\n\t"
26507        "lsr	lr, lr, #24\n\t"
26508#else
26509        "uxtb	lr, r6, ror #8\n\t"
26510#endif
26511#else
26512        "ubfx	lr, r6, #8, #8\n\t"
26513#endif
26514#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26515#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26516        "lsl	r2, r7, #24\n\t"
26517        "lsr	r2, r2, #24\n\t"
26518#else
26519        "uxtb	r2, r7\n\t"
26520#endif
26521#else
26522        "ubfx	r2, r7, #0, #8\n\t"
26523#endif
26524        "ldr	r8, [r0, r8, lsl #2]\n\t"
26525        "ldr	r11, [r0, r11, lsl #2]\n\t"
26526        "ldr	lr, [r0, lr, lsl #2]\n\t"
26527        "ldr	r2, [r0, r2, lsl #2]\n\t"
26528#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26529#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26530        "lsl	r9, r6, #8\n\t"
26531        "lsr	r9, r9, #24\n\t"
26532#else
26533        "uxtb	r9, r6, ror #16\n\t"
26534#endif
26535#else
26536        "ubfx	r9, r6, #16, #8\n\t"
26537#endif
26538        "eor	r8, r8, r11, ror #24\n\t"
26539        "lsr	r11, r5, #24\n\t"
26540        "eor	r8, r8, lr, ror #8\n\t"
26541#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26542#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26543        "lsl	lr, r7, #16\n\t"
26544        "lsr	lr, lr, #24\n\t"
26545#else
26546        "uxtb	lr, r7, ror #8\n\t"
26547#endif
26548#else
26549        "ubfx	lr, r7, #8, #8\n\t"
26550#endif
26551        "eor	r8, r8, r2, ror #16\n\t"
26552#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26553#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26554        "lsl	r2, r4, #24\n\t"
26555        "lsr	r2, r2, #24\n\t"
26556#else
26557        "uxtb	r2, r4\n\t"
26558#endif
26559#else
26560        "ubfx	r2, r4, #0, #8\n\t"
26561#endif
26562        "ldr	r9, [r0, r9, lsl #2]\n\t"
26563        "ldr	r11, [r0, r11, lsl #2]\n\t"
26564        "ldr	lr, [r0, lr, lsl #2]\n\t"
26565        "ldr	r2, [r0, r2, lsl #2]\n\t"
26566#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26567#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26568        "lsl	r10, r7, #8\n\t"
26569        "lsr	r10, r10, #24\n\t"
26570#else
26571        "uxtb	r10, r7, ror #16\n\t"
26572#endif
26573#else
26574        "ubfx	r10, r7, #16, #8\n\t"
26575#endif
26576        "eor	r9, r9, r11, ror #24\n\t"
26577        "lsr	r11, r6, #24\n\t"
26578        "eor	r9, r9, lr, ror #8\n\t"
26579#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26580#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26581        "lsl	lr, r4, #16\n\t"
26582        "lsr	lr, lr, #24\n\t"
26583#else
26584        "uxtb	lr, r4, ror #8\n\t"
26585#endif
26586#else
26587        "ubfx	lr, r4, #8, #8\n\t"
26588#endif
26589        "eor	r9, r9, r2, ror #16\n\t"
26590#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26591#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26592        "lsl	r2, r5, #24\n\t"
26593        "lsr	r2, r2, #24\n\t"
26594#else
26595        "uxtb	r2, r5\n\t"
26596#endif
26597#else
26598        "ubfx	r2, r5, #0, #8\n\t"
26599#endif
26600        "ldr	r10, [r0, r10, lsl #2]\n\t"
26601        "ldr	r11, [r0, r11, lsl #2]\n\t"
26602        "ldr	lr, [r0, lr, lsl #2]\n\t"
26603        "ldr	r2, [r0, r2, lsl #2]\n\t"
26604#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26605#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26606        "lsl	r6, r6, #24\n\t"
26607        "lsr	r6, r6, #24\n\t"
26608#else
26609        "uxtb	r6, r6\n\t"
26610#endif
26611#else
26612        "ubfx	r6, r6, #0, #8\n\t"
26613#endif
26614        "eor	r10, r10, r11, ror #24\n\t"
26615#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26616#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26617        "lsl	r11, r4, #8\n\t"
26618        "lsr	r11, r11, #24\n\t"
26619#else
26620        "uxtb	r11, r4, ror #16\n\t"
26621#endif
26622#else
26623        "ubfx	r11, r4, #16, #8\n\t"
26624#endif
26625        "eor	r10, r10, lr, ror #8\n\t"
26626        "lsr	lr, r7, #24\n\t"
26627        "eor	r10, r10, r2, ror #16\n\t"
26628#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26629#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26630        "lsl	r2, r5, #16\n\t"
26631        "lsr	r2, r2, #24\n\t"
26632#else
26633        "uxtb	r2, r5, ror #8\n\t"
26634#endif
26635#else
26636        "ubfx	r2, r5, #8, #8\n\t"
26637#endif
26638        "ldr	r6, [r0, r6, lsl #2]\n\t"
26639        "ldr	lr, [r0, lr, lsl #2]\n\t"
26640        "ldr	r11, [r0, r11, lsl #2]\n\t"
26641        "ldr	r2, [r0, r2, lsl #2]\n\t"
26642        "eor	lr, lr, r6, ror #24\n\t"
26643        "ldm	%[ks]!, {r4, r5, r6, r7}\n\t"
26644        "eor	r11, r11, lr, ror #24\n\t"
26645        "eor	r11, r11, r2, ror #8\n\t"
26646        /*   XOR in Key Schedule */
26647        "eor	r8, r8, r4\n\t"
26648        "eor	r9, r9, r5\n\t"
26649        "eor	r10, r10, r6\n\t"
26650        "eor	r11, r11, r7\n\t"
26651#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26652#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26653        "lsl	r4, r11, #24\n\t"
26654        "lsr	r4, r4, #24\n\t"
26655#else
26656        "uxtb	r4, r11\n\t"
26657#endif
26658#else
26659        "ubfx	r4, r11, #0, #8\n\t"
26660#endif
26661#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26662#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26663        "lsl	r7, r10, #16\n\t"
26664        "lsr	r7, r7, #24\n\t"
26665#else
26666        "uxtb	r7, r10, ror #8\n\t"
26667#endif
26668#else
26669        "ubfx	r7, r10, #8, #8\n\t"
26670#endif
26671#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26672#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26673        "lsl	lr, r9, #8\n\t"
26674        "lsr	lr, lr, #24\n\t"
26675#else
26676        "uxtb	lr, r9, ror #16\n\t"
26677#endif
26678#else
26679        "ubfx	lr, r9, #16, #8\n\t"
26680#endif
26681        "lsr	r2, r8, #24\n\t"
26682        "ldrb	r4, [r0, r4, lsl #2]\n\t"
26683        "ldrb	r7, [r0, r7, lsl #2]\n\t"
26684        "ldrb	lr, [r0, lr, lsl #2]\n\t"
26685        "ldrb	r2, [r0, r2, lsl #2]\n\t"
26686#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26687#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26688        "lsl	r5, r8, #24\n\t"
26689        "lsr	r5, r5, #24\n\t"
26690#else
26691        "uxtb	r5, r8\n\t"
26692#endif
26693#else
26694        "ubfx	r5, r8, #0, #8\n\t"
26695#endif
26696        "eor	r4, r4, r7, lsl #8\n\t"
26697#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26698#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26699        "lsl	r7, r11, #16\n\t"
26700        "lsr	r7, r7, #24\n\t"
26701#else
26702        "uxtb	r7, r11, ror #8\n\t"
26703#endif
26704#else
26705        "ubfx	r7, r11, #8, #8\n\t"
26706#endif
26707        "eor	r4, r4, lr, lsl #16\n\t"
26708#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26709#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26710        "lsl	lr, r10, #8\n\t"
26711        "lsr	lr, lr, #24\n\t"
26712#else
26713        "uxtb	lr, r10, ror #16\n\t"
26714#endif
26715#else
26716        "ubfx	lr, r10, #16, #8\n\t"
26717#endif
26718        "eor	r4, r4, r2, lsl #24\n\t"
26719        "lsr	r2, r9, #24\n\t"
26720        "ldrb	r5, [r0, r5, lsl #2]\n\t"
26721        "ldrb	r7, [r0, r7, lsl #2]\n\t"
26722        "ldrb	lr, [r0, lr, lsl #2]\n\t"
26723        "ldrb	r2, [r0, r2, lsl #2]\n\t"
26724#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26725#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26726        "lsl	r6, r9, #24\n\t"
26727        "lsr	r6, r6, #24\n\t"
26728#else
26729        "uxtb	r6, r9\n\t"
26730#endif
26731#else
26732        "ubfx	r6, r9, #0, #8\n\t"
26733#endif
26734        "eor	r5, r5, r7, lsl #8\n\t"
26735#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26736#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26737        "lsl	r7, r8, #16\n\t"
26738        "lsr	r7, r7, #24\n\t"
26739#else
26740        "uxtb	r7, r8, ror #8\n\t"
26741#endif
26742#else
26743        "ubfx	r7, r8, #8, #8\n\t"
26744#endif
26745        "eor	r5, r5, lr, lsl #16\n\t"
26746#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26747#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26748        "lsl	lr, r11, #8\n\t"
26749        "lsr	lr, lr, #24\n\t"
26750#else
26751        "uxtb	lr, r11, ror #16\n\t"
26752#endif
26753#else
26754        "ubfx	lr, r11, #16, #8\n\t"
26755#endif
26756        "eor	r5, r5, r2, lsl #24\n\t"
26757        "lsr	r2, r10, #24\n\t"
26758        "ldrb	r6, [r0, r6, lsl #2]\n\t"
26759        "ldrb	r7, [r0, r7, lsl #2]\n\t"
26760        "ldrb	lr, [r0, lr, lsl #2]\n\t"
26761        "ldrb	r2, [r0, r2, lsl #2]\n\t"
26762        "lsr	r11, r11, #24\n\t"
26763        "eor	r6, r6, r7, lsl #8\n\t"
26764#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26765#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26766        "lsl	r7, r10, #24\n\t"
26767        "lsr	r7, r7, #24\n\t"
26768#else
26769        "uxtb	r7, r10\n\t"
26770#endif
26771#else
26772        "ubfx	r7, r10, #0, #8\n\t"
26773#endif
26774        "eor	r6, r6, lr, lsl #16\n\t"
26775#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26776#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26777        "lsl	lr, r9, #16\n\t"
26778        "lsr	lr, lr, #24\n\t"
26779#else
26780        "uxtb	lr, r9, ror #8\n\t"
26781#endif
26782#else
26783        "ubfx	lr, r9, #8, #8\n\t"
26784#endif
26785        "eor	r6, r6, r2, lsl #24\n\t"
26786#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26787#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26788        "lsl	r2, r8, #8\n\t"
26789        "lsr	r2, r2, #24\n\t"
26790#else
26791        "uxtb	r2, r8, ror #16\n\t"
26792#endif
26793#else
26794        "ubfx	r2, r8, #16, #8\n\t"
26795#endif
26796        "ldrb	r11, [r0, r11, lsl #2]\n\t"
26797        "ldrb	r7, [r0, r7, lsl #2]\n\t"
26798        "ldrb	lr, [r0, lr, lsl #2]\n\t"
26799        "ldrb	r2, [r0, r2, lsl #2]\n\t"
26800        "eor	lr, lr, r11, lsl #16\n\t"
26801        "ldm	%[ks], {r8, r9, r10, r11}\n\t"
26802        "eor	r7, r7, lr, lsl #8\n\t"
26803        "eor	r7, r7, r2, lsl #16\n\t"
26804        /*   XOR in Key Schedule */
26805        "eor	r4, r4, r8\n\t"
26806        "eor	r5, r5, r9\n\t"
26807        "eor	r6, r6, r10\n\t"
26808        "eor	r7, r7, r11\n\t"
26809#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
26810        "pop	{r1, %[len], lr}\n\t"
26811        "ldr	%[ks], [sp]\n\t"
26812#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26813        "eor	r8, r4, r4, ror #16\n\t"
26814        "eor	r9, r5, r5, ror #16\n\t"
26815        "eor	r10, r6, r6, ror #16\n\t"
26816        "eor	r11, r7, r7, ror #16\n\t"
26817        "bic	r8, r8, #0xff0000\n\t"
26818        "bic	r9, r9, #0xff0000\n\t"
26819        "bic	r10, r10, #0xff0000\n\t"
26820        "bic	r11, r11, #0xff0000\n\t"
26821        "ror	r4, r4, #8\n\t"
26822        "ror	r5, r5, #8\n\t"
26823        "ror	r6, r6, #8\n\t"
26824        "ror	r7, r7, #8\n\t"
26825        "eor	r4, r4, r8, lsr #8\n\t"
26826        "eor	r5, r5, r9, lsr #8\n\t"
26827        "eor	r6, r6, r10, lsr #8\n\t"
26828        "eor	r7, r7, r11, lsr #8\n\t"
26829#else
26830        "rev	r4, r4\n\t"
26831        "rev	r5, r5\n\t"
26832        "rev	r6, r6\n\t"
26833        "rev	r7, r7\n\t"
26834#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
26835        "ldr	r8, [lr]\n\t"
26836        "ldr	r9, [lr, #4]\n\t"
26837        "ldr	r10, [lr, #8]\n\t"
26838        "ldr	r11, [lr, #12]\n\t"
26839        "eor	r4, r4, r8\n\t"
26840        "eor	r5, r5, r9\n\t"
26841        "eor	r6, r6, r10\n\t"
26842        "eor	r7, r7, r11\n\t"
26843        "ldr	r8, [sp, #4]\n\t"
26844        "str	r4, [%[out]]\n\t"
26845        "str	r5, [%[out], #4]\n\t"
26846        "str	r6, [%[out], #8]\n\t"
26847        "str	r7, [%[out], #12]\n\t"
26848        "ldm	r8, {r4, r5, r6, r7}\n\t"
26849        "subs	%[len], %[len], #16\n\t"
26850        "add	lr, lr, #16\n\t"
26851        "add	%[out], %[out], #16\n\t"
26852        "bne	L_AES_GCM_encrypt_loop_block_128_%=\n\t"
26853        "\n"
26854    "L_AES_GCM_encrypt_end_%=:\n\t"
26855        "pop	{%[ks], r8}\n\t"
26856#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26857        "eor	r10, r4, r4, ror #16\n\t"
26858        "eor	r11, r5, r5, ror #16\n\t"
26859        "bic	r10, r10, #0xff0000\n\t"
26860        "bic	r11, r11, #0xff0000\n\t"
26861        "ror	r4, r4, #8\n\t"
26862        "ror	r5, r5, #8\n\t"
26863        "eor	r4, r4, r10, lsr #8\n\t"
26864        "eor	r5, r5, r11, lsr #8\n\t"
26865        "eor	r10, r6, r6, ror #16\n\t"
26866        "eor	r11, r7, r7, ror #16\n\t"
26867        "bic	r10, r10, #0xff0000\n\t"
26868        "bic	r11, r11, #0xff0000\n\t"
26869        "ror	r6, r6, #8\n\t"
26870        "ror	r7, r7, #8\n\t"
26871        "eor	r6, r6, r10, lsr #8\n\t"
26872        "eor	r7, r7, r11, lsr #8\n\t"
26873#else
26874        "rev	r4, r4\n\t"
26875        "rev	r5, r5\n\t"
26876        "rev	r6, r6\n\t"
26877        "rev	r7, r7\n\t"
26878#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
26879        "stm	r8, {r4, r5, r6, r7}\n\t"
26880        "pop	{%[nr], %[ctr]}\n\t"
26881        "pop	{%[L_AES_ARM32_te_gcm]}\n\t"
26882#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
26883        : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
26884          [nr] "+r" (nr), [ctr] "+r" (ctr),
26885          [L_AES_ARM32_te_gcm] "+r" (L_AES_ARM32_te_gcm_c)
26886        :
26887#else
26888        :
26889        : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
26890          [nr] "r" (nr), [ctr] "r" (ctr),
26891          [L_AES_ARM32_te_gcm] "r" (L_AES_ARM32_te_gcm_c)
26892#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
26893        : "memory", "cc", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
26894    );
26895}
26896
26897#endif /* HAVE_AESGCM */
26898#endif /* !WOLFSSL_ARMASM_NO_HW_CRYPTO */
26899#endif /* !NO_AES */
26900#endif /* !__aarch64__ && !WOLFSSL_ARMASM_THUMB2 */
26901#endif /* WOLFSSL_ARMASM */
26902
26903#endif /* WOLFSSL_ARMASM_INLINE */