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.S 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.S
   26 */
   27
   28#include <wolfssl/wolfcrypt/libwolfssl_sources_asm.h>
   29
   30#ifdef WOLFSSL_ARMASM
   31#if !defined(__aarch64__) && !defined(WOLFSSL_ARMASM_THUMB2)
   32#ifndef WOLFSSL_ARMASM_INLINE
   33#ifndef NO_AES
   34#ifndef WOLFSSL_ARMASM_NO_HW_CRYPTO
   35	.text
   36	.align	4
   37	.globl	AES_set_key_AARCH32
   38	.type	AES_set_key_AARCH32, %function
   39AES_set_key_AARCH32:
   40	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
   41	cmp	r1, #24
   42	blt	L_aes_set_key_arm32_crypto_start_128
   43	bgt	L_aes_set_key_arm32_crypto_start_256
   44	ldr	r4, [r0], #4
   45	ldr	r5, [r0], #4
   46	ldr	r6, [r0], #4
   47	ldr	r7, [r0], #4
   48	ldr	r8, [r0], #4
   49	ldr	r9, [r0], #4
   50#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
   51	stm	r2!, {r4, r5}
   52#else
   53	strd	r4, r5, [r2], #8
   54#endif
   55#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
   56	stm	r2!, {r6, r7}
   57#else
   58	strd	r6, r7, [r2], #8
   59#endif
   60#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
   61	stm	r2!, {r8, r9}
   62#else
   63	strd	r8, r9, [r2], #8
   64#endif
   65	vdup.32	q1, r9
   66	vmov.i32	q0, #0
   67	aese.8	q0, q1
   68	vmov.i32	r12, s0
   69	ror	r12, r12, #8
   70	eor	r4, r4, #1
   71	eor	r4, r4, r12
   72	eor	r5, r5, r4
   73	eor	r6, r6, r5
   74	eor	r7, r7, r6
   75	eor	r8, r8, r7
   76	eor	r9, r9, r8
   77#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
   78	stm	r2!, {r4, r5}
   79#else
   80	strd	r4, r5, [r2], #8
   81#endif
   82#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
   83	stm	r2!, {r6, r7}
   84#else
   85	strd	r6, r7, [r2], #8
   86#endif
   87#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
   88	stm	r2!, {r8, r9}
   89#else
   90	strd	r8, r9, [r2], #8
   91#endif
   92	vdup.32	q1, r9
   93	vmov.i32	q0, #0
   94	aese.8	q0, q1
   95	vmov.i32	r12, s0
   96	ror	r12, r12, #8
   97	eor	r4, r4, #2
   98	eor	r4, r4, r12
   99	eor	r5, r5, r4
  100	eor	r6, r6, r5
  101	eor	r7, r7, r6
  102	eor	r8, r8, r7
  103	eor	r9, r9, r8
  104#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  105	stm	r2!, {r4, r5}
  106#else
  107	strd	r4, r5, [r2], #8
  108#endif
  109#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  110	stm	r2!, {r6, r7}
  111#else
  112	strd	r6, r7, [r2], #8
  113#endif
  114#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  115	stm	r2!, {r8, r9}
  116#else
  117	strd	r8, r9, [r2], #8
  118#endif
  119	vdup.32	q1, r9
  120	vmov.i32	q0, #0
  121	aese.8	q0, q1
  122	vmov.i32	r12, s0
  123	ror	r12, r12, #8
  124	eor	r4, r4, #4
  125	eor	r4, r4, r12
  126	eor	r5, r5, r4
  127	eor	r6, r6, r5
  128	eor	r7, r7, r6
  129	eor	r8, r8, r7
  130	eor	r9, r9, r8
  131#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  132	stm	r2!, {r4, r5}
  133#else
  134	strd	r4, r5, [r2], #8
  135#endif
  136#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  137	stm	r2!, {r6, r7}
  138#else
  139	strd	r6, r7, [r2], #8
  140#endif
  141#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  142	stm	r2!, {r8, r9}
  143#else
  144	strd	r8, r9, [r2], #8
  145#endif
  146	vdup.32	q1, r9
  147	vmov.i32	q0, #0
  148	aese.8	q0, q1
  149	vmov.i32	r12, s0
  150	ror	r12, r12, #8
  151	eor	r4, r4, #8
  152	eor	r4, r4, r12
  153	eor	r5, r5, r4
  154	eor	r6, r6, r5
  155	eor	r7, r7, r6
  156	eor	r8, r8, r7
  157	eor	r9, r9, r8
  158#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  159	stm	r2!, {r4, r5}
  160#else
  161	strd	r4, r5, [r2], #8
  162#endif
  163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  164	stm	r2!, {r6, r7}
  165#else
  166	strd	r6, r7, [r2], #8
  167#endif
  168#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  169	stm	r2!, {r8, r9}
  170#else
  171	strd	r8, r9, [r2], #8
  172#endif
  173	vdup.32	q1, r9
  174	vmov.i32	q0, #0
  175	aese.8	q0, q1
  176	vmov.i32	r12, s0
  177	ror	r12, r12, #8
  178	eor	r4, r4, #16
  179	eor	r4, r4, r12
  180	eor	r5, r5, r4
  181	eor	r6, r6, r5
  182	eor	r7, r7, r6
  183	eor	r8, r8, r7
  184	eor	r9, r9, r8
  185#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  186	stm	r2!, {r4, r5}
  187#else
  188	strd	r4, r5, [r2], #8
  189#endif
  190#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  191	stm	r2!, {r6, r7}
  192#else
  193	strd	r6, r7, [r2], #8
  194#endif
  195#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  196	stm	r2!, {r8, r9}
  197#else
  198	strd	r8, r9, [r2], #8
  199#endif
  200	vdup.32	q1, r9
  201	vmov.i32	q0, #0
  202	aese.8	q0, q1
  203	vmov.i32	r12, s0
  204	ror	r12, r12, #8
  205	eor	r4, r4, #32
  206	eor	r4, r4, r12
  207	eor	r5, r5, r4
  208	eor	r6, r6, r5
  209	eor	r7, r7, r6
  210	eor	r8, r8, r7
  211	eor	r9, r9, r8
  212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  213	stm	r2!, {r4, r5}
  214#else
  215	strd	r4, r5, [r2], #8
  216#endif
  217#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  218	stm	r2!, {r6, r7}
  219#else
  220	strd	r6, r7, [r2], #8
  221#endif
  222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  223	stm	r2!, {r8, r9}
  224#else
  225	strd	r8, r9, [r2], #8
  226#endif
  227	vdup.32	q1, r9
  228	vmov.i32	q0, #0
  229	aese.8	q0, q1
  230	vmov.i32	r12, s0
  231	ror	r12, r12, #8
  232	eor	r4, r4, #0x40
  233	eor	r4, r4, r12
  234	eor	r5, r5, r4
  235	eor	r6, r6, r5
  236	eor	r7, r7, r6
  237	eor	r8, r8, r7
  238	eor	r9, r9, r8
  239#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  240	stm	r2!, {r4, r5}
  241#else
  242	strd	r4, r5, [r2], #8
  243#endif
  244#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  245	stm	r2!, {r6, r7}
  246#else
  247	strd	r6, r7, [r2], #8
  248#endif
  249#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  250	stm	r2!, {r8, r9}
  251#else
  252	strd	r8, r9, [r2], #8
  253#endif
  254	vdup.32	q1, r9
  255	vmov.i32	q0, #0
  256	aese.8	q0, q1
  257	vmov.i32	r12, s0
  258	ror	r12, r12, #8
  259	eor	r4, r4, #0x80
  260	eor	r4, r4, r12
  261	eor	r5, r5, r4
  262	eor	r6, r6, r5
  263	eor	r7, r7, r6
  264#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  265	stm	r2!, {r4, r5}
  266#else
  267	strd	r4, r5, [r2], #8
  268#endif
  269#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  270	stm	r2!, {r6, r7}
  271#else
  272	strd	r6, r7, [r2], #8
  273#endif
  274	cmp	r3, #0
  275	beq	L_aes_set_key_arm32_crypto_done
  276	sub	r2, r2, #0xd0
  277	vld1.32	{q0}, [r2]
  278	add	r2, r2, #0xc0
  279	vld1.32	{q1}, [r2]
  280	sub	r2, r2, #0xc0
  281	vst1.32	{q1}, [r2]
  282	add	r2, r2, #0xc0
  283	vst1.32	{q0}, [r2]
  284	sub	r2, r2, #0xb0
  285	vld1.32	{q0}, [r2]
  286	add	r2, r2, #0xa0
  287	vld1.32	{q1}, [r2]
  288	sub	r2, r2, #0xa0
  289	aesimc.8	q0, q0
  290	aesimc.8	q1, q1
  291	vst1.32	{q1}, [r2]
  292	add	r2, r2, #0xa0
  293	vst1.32	{q0}, [r2]
  294	sub	r2, r2, #0x90
  295	vld1.32	{q0}, [r2]
  296	add	r2, r2, #0x80
  297	vld1.32	{q1}, [r2]
  298	sub	r2, r2, #0x80
  299	aesimc.8	q0, q0
  300	aesimc.8	q1, q1
  301	vst1.32	{q1}, [r2]
  302	add	r2, r2, #0x80
  303	vst1.32	{q0}, [r2]
  304	sub	r2, r2, #0x70
  305	vld1.32	{q0}, [r2]
  306	add	r2, r2, #0x60
  307	vld1.32	{q1}, [r2]
  308	sub	r2, r2, #0x60
  309	aesimc.8	q0, q0
  310	aesimc.8	q1, q1
  311	vst1.32	{q1}, [r2]
  312	add	r2, r2, #0x60
  313	vst1.32	{q0}, [r2]
  314	sub	r2, r2, #0x50
  315	vld1.32	{q0}, [r2]
  316	add	r2, r2, #0x40
  317	vld1.32	{q1}, [r2]
  318	sub	r2, r2, #0x40
  319	aesimc.8	q0, q0
  320	aesimc.8	q1, q1
  321	vst1.32	{q1}, [r2]
  322	add	r2, r2, #0x40
  323	vst1.32	{q0}, [r2]
  324	sub	r2, r2, #48
  325	vld1.32	{q0}, [r2]
  326	add	r2, r2, #32
  327	vld1.32	{q1}, [r2]
  328	sub	r2, r2, #32
  329	aesimc.8	q0, q0
  330	aesimc.8	q1, q1
  331	vst1.32	{q1}, [r2]
  332	add	r2, r2, #32
  333	vst1.32	{q0}, [r2]
  334	sub	r2, r2, #16
  335	vld1.32	{q0}, [r2]
  336	aesimc.8	q0, q0
  337	vst1.32	{q0}, [r2]
  338	b	L_aes_set_key_arm32_crypto_done
  339L_aes_set_key_arm32_crypto_start_256:
  340	ldr	r4, [r0], #4
  341	ldr	r5, [r0], #4
  342	ldr	r6, [r0], #4
  343	ldr	r7, [r0], #4
  344	ldr	r8, [r0], #4
  345	ldr	r9, [r0], #4
  346	ldr	r10, [r0], #4
  347	ldr	r11, [r0], #4
  348#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  349	stm	r2!, {r4, r5}
  350#else
  351	strd	r4, r5, [r2], #8
  352#endif
  353#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  354	stm	r2!, {r6, r7}
  355#else
  356	strd	r6, r7, [r2], #8
  357#endif
  358#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  359	stm	r2!, {r8, r9}
  360#else
  361	strd	r8, r9, [r2], #8
  362#endif
  363#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  364	stm	r2!, {r10, r11}
  365#else
  366	strd	r10, r11, [r2], #8
  367#endif
  368	vdup.32	q1, r11
  369	vmov.i32	q0, #0
  370	aese.8	q0, q1
  371	vmov.i32	r12, s0
  372	ror	r12, r12, #8
  373	eor	r4, r4, #1
  374	eor	r4, r4, r12
  375	eor	r5, r5, r4
  376	eor	r6, r6, r5
  377	eor	r7, r7, r6
  378	vdup.32	q1, r7
  379	vmov.i32	q0, #0
  380	aese.8	q0, q1
  381	vmov.i32	r12, s0
  382	eor	r8, r8, r12
  383	eor	r9, r9, r8
  384	eor	r10, r10, r9
  385	eor	r11, r11, r10
  386#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  387	stm	r2!, {r4, r5}
  388#else
  389	strd	r4, r5, [r2], #8
  390#endif
  391#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  392	stm	r2!, {r6, r7}
  393#else
  394	strd	r6, r7, [r2], #8
  395#endif
  396#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  397	stm	r2!, {r8, r9}
  398#else
  399	strd	r8, r9, [r2], #8
  400#endif
  401#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  402	stm	r2!, {r10, r11}
  403#else
  404	strd	r10, r11, [r2], #8
  405#endif
  406	vdup.32	q1, r11
  407	vmov.i32	q0, #0
  408	aese.8	q0, q1
  409	vmov.i32	r12, s0
  410	ror	r12, r12, #8
  411	eor	r4, r4, #2
  412	eor	r4, r4, r12
  413	eor	r5, r5, r4
  414	eor	r6, r6, r5
  415	eor	r7, r7, r6
  416	vdup.32	q1, r7
  417	vmov.i32	q0, #0
  418	aese.8	q0, q1
  419	vmov.i32	r12, s0
  420	eor	r8, r8, r12
  421	eor	r9, r9, r8
  422	eor	r10, r10, r9
  423	eor	r11, r11, r10
  424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  425	stm	r2!, {r4, r5}
  426#else
  427	strd	r4, r5, [r2], #8
  428#endif
  429#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  430	stm	r2!, {r6, r7}
  431#else
  432	strd	r6, r7, [r2], #8
  433#endif
  434#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  435	stm	r2!, {r8, r9}
  436#else
  437	strd	r8, r9, [r2], #8
  438#endif
  439#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  440	stm	r2!, {r10, r11}
  441#else
  442	strd	r10, r11, [r2], #8
  443#endif
  444	vdup.32	q1, r11
  445	vmov.i32	q0, #0
  446	aese.8	q0, q1
  447	vmov.i32	r12, s0
  448	ror	r12, r12, #8
  449	eor	r4, r4, #4
  450	eor	r4, r4, r12
  451	eor	r5, r5, r4
  452	eor	r6, r6, r5
  453	eor	r7, r7, r6
  454	vdup.32	q1, r7
  455	vmov.i32	q0, #0
  456	aese.8	q0, q1
  457	vmov.i32	r12, s0
  458	eor	r8, r8, r12
  459	eor	r9, r9, r8
  460	eor	r10, r10, r9
  461	eor	r11, r11, r10
  462#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  463	stm	r2!, {r4, r5}
  464#else
  465	strd	r4, r5, [r2], #8
  466#endif
  467#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  468	stm	r2!, {r6, r7}
  469#else
  470	strd	r6, r7, [r2], #8
  471#endif
  472#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  473	stm	r2!, {r8, r9}
  474#else
  475	strd	r8, r9, [r2], #8
  476#endif
  477#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  478	stm	r2!, {r10, r11}
  479#else
  480	strd	r10, r11, [r2], #8
  481#endif
  482	vdup.32	q1, r11
  483	vmov.i32	q0, #0
  484	aese.8	q0, q1
  485	vmov.i32	r12, s0
  486	ror	r12, r12, #8
  487	eor	r4, r4, #8
  488	eor	r4, r4, r12
  489	eor	r5, r5, r4
  490	eor	r6, r6, r5
  491	eor	r7, r7, r6
  492	vdup.32	q1, r7
  493	vmov.i32	q0, #0
  494	aese.8	q0, q1
  495	vmov.i32	r12, s0
  496	eor	r8, r8, r12
  497	eor	r9, r9, r8
  498	eor	r10, r10, r9
  499	eor	r11, r11, r10
  500#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  501	stm	r2!, {r4, r5}
  502#else
  503	strd	r4, r5, [r2], #8
  504#endif
  505#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  506	stm	r2!, {r6, r7}
  507#else
  508	strd	r6, r7, [r2], #8
  509#endif
  510#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  511	stm	r2!, {r8, r9}
  512#else
  513	strd	r8, r9, [r2], #8
  514#endif
  515#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  516	stm	r2!, {r10, r11}
  517#else
  518	strd	r10, r11, [r2], #8
  519#endif
  520	vdup.32	q1, r11
  521	vmov.i32	q0, #0
  522	aese.8	q0, q1
  523	vmov.i32	r12, s0
  524	ror	r12, r12, #8
  525	eor	r4, r4, #16
  526	eor	r4, r4, r12
  527	eor	r5, r5, r4
  528	eor	r6, r6, r5
  529	eor	r7, r7, r6
  530	vdup.32	q1, r7
  531	vmov.i32	q0, #0
  532	aese.8	q0, q1
  533	vmov.i32	r12, s0
  534	eor	r8, r8, r12
  535	eor	r9, r9, r8
  536	eor	r10, r10, r9
  537	eor	r11, r11, r10
  538#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  539	stm	r2!, {r4, r5}
  540#else
  541	strd	r4, r5, [r2], #8
  542#endif
  543#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  544	stm	r2!, {r6, r7}
  545#else
  546	strd	r6, r7, [r2], #8
  547#endif
  548#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  549	stm	r2!, {r8, r9}
  550#else
  551	strd	r8, r9, [r2], #8
  552#endif
  553#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  554	stm	r2!, {r10, r11}
  555#else
  556	strd	r10, r11, [r2], #8
  557#endif
  558	vdup.32	q1, r11
  559	vmov.i32	q0, #0
  560	aese.8	q0, q1
  561	vmov.i32	r12, s0
  562	ror	r12, r12, #8
  563	eor	r4, r4, #32
  564	eor	r4, r4, r12
  565	eor	r5, r5, r4
  566	eor	r6, r6, r5
  567	eor	r7, r7, r6
  568	vdup.32	q1, r7
  569	vmov.i32	q0, #0
  570	aese.8	q0, q1
  571	vmov.i32	r12, s0
  572	eor	r8, r8, r12
  573	eor	r9, r9, r8
  574	eor	r10, r10, r9
  575	eor	r11, r11, r10
  576#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  577	stm	r2!, {r4, r5}
  578#else
  579	strd	r4, r5, [r2], #8
  580#endif
  581#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  582	stm	r2!, {r6, r7}
  583#else
  584	strd	r6, r7, [r2], #8
  585#endif
  586#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  587	stm	r2!, {r8, r9}
  588#else
  589	strd	r8, r9, [r2], #8
  590#endif
  591#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  592	stm	r2!, {r10, r11}
  593#else
  594	strd	r10, r11, [r2], #8
  595#endif
  596	vdup.32	q1, r11
  597	vmov.i32	q0, #0
  598	aese.8	q0, q1
  599	vmov.i32	r12, s0
  600	ror	r12, r12, #8
  601	eor	r4, r4, #0x40
  602	eor	r4, r4, r12
  603	eor	r5, r5, r4
  604	eor	r6, r6, r5
  605	eor	r7, r7, r6
  606#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  607	stm	r2!, {r4, r5}
  608#else
  609	strd	r4, r5, [r2], #8
  610#endif
  611#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  612	stm	r2!, {r6, r7}
  613#else
  614	strd	r6, r7, [r2], #8
  615#endif
  616	cmp	r3, #0
  617	beq	L_aes_set_key_arm32_crypto_done
  618	sub	r2, r2, #0xf0
  619	vld1.32	{q0}, [r2]
  620	add	r2, r2, #0xe0
  621	vld1.32	{q1}, [r2]
  622	sub	r2, r2, #0xe0
  623	vst1.32	{q1}, [r2]
  624	add	r2, r2, #0xe0
  625	vst1.32	{q0}, [r2]
  626	sub	r2, r2, #0xd0
  627	vld1.32	{q0}, [r2]
  628	add	r2, r2, #0xc0
  629	vld1.32	{q1}, [r2]
  630	sub	r2, r2, #0xc0
  631	aesimc.8	q0, q0
  632	aesimc.8	q1, q1
  633	vst1.32	{q1}, [r2]
  634	add	r2, r2, #0xc0
  635	vst1.32	{q0}, [r2]
  636	sub	r2, r2, #0xb0
  637	vld1.32	{q0}, [r2]
  638	add	r2, r2, #0xa0
  639	vld1.32	{q1}, [r2]
  640	sub	r2, r2, #0xa0
  641	aesimc.8	q0, q0
  642	aesimc.8	q1, q1
  643	vst1.32	{q1}, [r2]
  644	add	r2, r2, #0xa0
  645	vst1.32	{q0}, [r2]
  646	sub	r2, r2, #0x90
  647	vld1.32	{q0}, [r2]
  648	add	r2, r2, #0x80
  649	vld1.32	{q1}, [r2]
  650	sub	r2, r2, #0x80
  651	aesimc.8	q0, q0
  652	aesimc.8	q1, q1
  653	vst1.32	{q1}, [r2]
  654	add	r2, r2, #0x80
  655	vst1.32	{q0}, [r2]
  656	sub	r2, r2, #0x70
  657	vld1.32	{q0}, [r2]
  658	add	r2, r2, #0x60
  659	vld1.32	{q1}, [r2]
  660	sub	r2, r2, #0x60
  661	aesimc.8	q0, q0
  662	aesimc.8	q1, q1
  663	vst1.32	{q1}, [r2]
  664	add	r2, r2, #0x60
  665	vst1.32	{q0}, [r2]
  666	sub	r2, r2, #0x50
  667	vld1.32	{q0}, [r2]
  668	add	r2, r2, #0x40
  669	vld1.32	{q1}, [r2]
  670	sub	r2, r2, #0x40
  671	aesimc.8	q0, q0
  672	aesimc.8	q1, q1
  673	vst1.32	{q1}, [r2]
  674	add	r2, r2, #0x40
  675	vst1.32	{q0}, [r2]
  676	sub	r2, r2, #48
  677	vld1.32	{q0}, [r2]
  678	add	r2, r2, #32
  679	vld1.32	{q1}, [r2]
  680	sub	r2, r2, #32
  681	aesimc.8	q0, q0
  682	aesimc.8	q1, q1
  683	vst1.32	{q1}, [r2]
  684	add	r2, r2, #32
  685	vst1.32	{q0}, [r2]
  686	sub	r2, r2, #16
  687	vld1.32	{q0}, [r2]
  688	aesimc.8	q0, q0
  689	vst1.32	{q0}, [r2]
  690	b	L_aes_set_key_arm32_crypto_done
  691L_aes_set_key_arm32_crypto_start_128:
  692	ldr	r4, [r0], #4
  693	ldr	r5, [r0], #4
  694	ldr	r6, [r0], #4
  695	ldr	r7, [r0], #4
  696#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  697	stm	r2!, {r4, r5}
  698#else
  699	strd	r4, r5, [r2], #8
  700#endif
  701#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  702	stm	r2!, {r6, r7}
  703#else
  704	strd	r6, r7, [r2], #8
  705#endif
  706	vdup.32	q1, r7
  707	vmov.i32	q0, #0
  708	aese.8	q0, q1
  709	vmov.i32	r12, s0
  710	ror	r12, r12, #8
  711	eor	r4, r4, #1
  712	eor	r4, r4, r12
  713	eor	r5, r5, r4
  714	eor	r6, r6, r5
  715	eor	r7, r7, r6
  716#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  717	stm	r2!, {r4, r5}
  718#else
  719	strd	r4, r5, [r2], #8
  720#endif
  721#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  722	stm	r2!, {r6, r7}
  723#else
  724	strd	r6, r7, [r2], #8
  725#endif
  726	vdup.32	q1, r7
  727	vmov.i32	q0, #0
  728	aese.8	q0, q1
  729	vmov.i32	r12, s0
  730	ror	r12, r12, #8
  731	eor	r4, r4, #2
  732	eor	r4, r4, r12
  733	eor	r5, r5, r4
  734	eor	r6, r6, r5
  735	eor	r7, r7, r6
  736#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  737	stm	r2!, {r4, r5}
  738#else
  739	strd	r4, r5, [r2], #8
  740#endif
  741#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  742	stm	r2!, {r6, r7}
  743#else
  744	strd	r6, r7, [r2], #8
  745#endif
  746	vdup.32	q1, r7
  747	vmov.i32	q0, #0
  748	aese.8	q0, q1
  749	vmov.i32	r12, s0
  750	ror	r12, r12, #8
  751	eor	r4, r4, #4
  752	eor	r4, r4, r12
  753	eor	r5, r5, r4
  754	eor	r6, r6, r5
  755	eor	r7, r7, r6
  756#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  757	stm	r2!, {r4, r5}
  758#else
  759	strd	r4, r5, [r2], #8
  760#endif
  761#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  762	stm	r2!, {r6, r7}
  763#else
  764	strd	r6, r7, [r2], #8
  765#endif
  766	vdup.32	q1, r7
  767	vmov.i32	q0, #0
  768	aese.8	q0, q1
  769	vmov.i32	r12, s0
  770	ror	r12, r12, #8
  771	eor	r4, r4, #8
  772	eor	r4, r4, r12
  773	eor	r5, r5, r4
  774	eor	r6, r6, r5
  775	eor	r7, r7, r6
  776#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  777	stm	r2!, {r4, r5}
  778#else
  779	strd	r4, r5, [r2], #8
  780#endif
  781#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  782	stm	r2!, {r6, r7}
  783#else
  784	strd	r6, r7, [r2], #8
  785#endif
  786	vdup.32	q1, r7
  787	vmov.i32	q0, #0
  788	aese.8	q0, q1
  789	vmov.i32	r12, s0
  790	ror	r12, r12, #8
  791	eor	r4, r4, #16
  792	eor	r4, r4, r12
  793	eor	r5, r5, r4
  794	eor	r6, r6, r5
  795	eor	r7, r7, r6
  796#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  797	stm	r2!, {r4, r5}
  798#else
  799	strd	r4, r5, [r2], #8
  800#endif
  801#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  802	stm	r2!, {r6, r7}
  803#else
  804	strd	r6, r7, [r2], #8
  805#endif
  806	vdup.32	q1, r7
  807	vmov.i32	q0, #0
  808	aese.8	q0, q1
  809	vmov.i32	r12, s0
  810	ror	r12, r12, #8
  811	eor	r4, r4, #32
  812	eor	r4, r4, r12
  813	eor	r5, r5, r4
  814	eor	r6, r6, r5
  815	eor	r7, r7, r6
  816#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  817	stm	r2!, {r4, r5}
  818#else
  819	strd	r4, r5, [r2], #8
  820#endif
  821#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  822	stm	r2!, {r6, r7}
  823#else
  824	strd	r6, r7, [r2], #8
  825#endif
  826	vdup.32	q1, r7
  827	vmov.i32	q0, #0
  828	aese.8	q0, q1
  829	vmov.i32	r12, s0
  830	ror	r12, r12, #8
  831	eor	r4, r4, #0x40
  832	eor	r4, r4, r12
  833	eor	r5, r5, r4
  834	eor	r6, r6, r5
  835	eor	r7, r7, r6
  836#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  837	stm	r2!, {r4, r5}
  838#else
  839	strd	r4, r5, [r2], #8
  840#endif
  841#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  842	stm	r2!, {r6, r7}
  843#else
  844	strd	r6, r7, [r2], #8
  845#endif
  846	vdup.32	q1, r7
  847	vmov.i32	q0, #0
  848	aese.8	q0, q1
  849	vmov.i32	r12, s0
  850	ror	r12, r12, #8
  851	eor	r4, r4, #0x80
  852	eor	r4, r4, r12
  853	eor	r5, r5, r4
  854	eor	r6, r6, r5
  855	eor	r7, r7, r6
  856#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  857	stm	r2!, {r4, r5}
  858#else
  859	strd	r4, r5, [r2], #8
  860#endif
  861#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  862	stm	r2!, {r6, r7}
  863#else
  864	strd	r6, r7, [r2], #8
  865#endif
  866	vdup.32	q1, r7
  867	vmov.i32	q0, #0
  868	aese.8	q0, q1
  869	vmov.i32	r12, s0
  870	mov	lr, #27
  871	ror	r12, r12, #8
  872	eor	r4, r4, lr
  873	eor	r4, r4, r12
  874	eor	r5, r5, r4
  875	eor	r6, r6, r5
  876	eor	r7, r7, r6
  877#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  878	stm	r2!, {r4, r5}
  879#else
  880	strd	r4, r5, [r2], #8
  881#endif
  882#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  883	stm	r2!, {r6, r7}
  884#else
  885	strd	r6, r7, [r2], #8
  886#endif
  887	vdup.32	q1, r7
  888	vmov.i32	q0, #0
  889	aese.8	q0, q1
  890	vmov.i32	r12, s0
  891	mov	lr, #54
  892	ror	r12, r12, #8
  893	eor	r4, r4, lr
  894	eor	r4, r4, r12
  895	eor	r5, r5, r4
  896	eor	r6, r6, r5
  897	eor	r7, r7, r6
  898#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  899	stm	r2!, {r4, r5}
  900#else
  901	strd	r4, r5, [r2], #8
  902#endif
  903#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  904	stm	r2!, {r6, r7}
  905#else
  906	strd	r6, r7, [r2], #8
  907#endif
  908	cmp	r3, #0
  909	beq	L_aes_set_key_arm32_crypto_done
  910	sub	r2, r2, #0xb0
  911	vld1.32	{q0}, [r2]
  912	add	r2, r2, #0xa0
  913	vld1.32	{q1}, [r2]
  914	sub	r2, r2, #0xa0
  915	vst1.32	{q1}, [r2]
  916	add	r2, r2, #0xa0
  917	vst1.32	{q0}, [r2]
  918	sub	r2, r2, #0x90
  919	vld1.32	{q0}, [r2]
  920	add	r2, r2, #0x80
  921	vld1.32	{q1}, [r2]
  922	sub	r2, r2, #0x80
  923	aesimc.8	q0, q0
  924	aesimc.8	q1, q1
  925	vst1.32	{q1}, [r2]
  926	add	r2, r2, #0x80
  927	vst1.32	{q0}, [r2]
  928	sub	r2, r2, #0x70
  929	vld1.32	{q0}, [r2]
  930	add	r2, r2, #0x60
  931	vld1.32	{q1}, [r2]
  932	sub	r2, r2, #0x60
  933	aesimc.8	q0, q0
  934	aesimc.8	q1, q1
  935	vst1.32	{q1}, [r2]
  936	add	r2, r2, #0x60
  937	vst1.32	{q0}, [r2]
  938	sub	r2, r2, #0x50
  939	vld1.32	{q0}, [r2]
  940	add	r2, r2, #0x40
  941	vld1.32	{q1}, [r2]
  942	sub	r2, r2, #0x40
  943	aesimc.8	q0, q0
  944	aesimc.8	q1, q1
  945	vst1.32	{q1}, [r2]
  946	add	r2, r2, #0x40
  947	vst1.32	{q0}, [r2]
  948	sub	r2, r2, #48
  949	vld1.32	{q0}, [r2]
  950	add	r2, r2, #32
  951	vld1.32	{q1}, [r2]
  952	sub	r2, r2, #32
  953	aesimc.8	q0, q0
  954	aesimc.8	q1, q1
  955	vst1.32	{q1}, [r2]
  956	add	r2, r2, #32
  957	vst1.32	{q0}, [r2]
  958	sub	r2, r2, #16
  959	vld1.32	{q0}, [r2]
  960	aesimc.8	q0, q0
  961	vst1.32	{q0}, [r2]
  962L_aes_set_key_arm32_crypto_done:
  963	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
  964	.size	AES_set_key_AARCH32,.-AES_set_key_AARCH32
  965#if defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || defined(HAVE_AES_CBC)
  966	.text
  967	.align	4
  968	.globl	AES_encrypt_AARCH32
  969	.type	AES_encrypt_AARCH32, %function
  970AES_encrypt_AARCH32:
  971	vpush	{d8-d9}
  972	vld1.8	{q0}, [r0]
  973	vldm	r2!, {q1-q4}
  974	aese.8	q0, q1
  975	aesmc.8	q0, q0
  976	aese.8	q0, q2
  977	aesmc.8	q0, q0
  978	aese.8	q0, q3
  979	aesmc.8	q0, q0
  980	aese.8	q0, q4
  981	aesmc.8	q0, q0
  982	vldm	r2!, {q1-q4}
  983	aese.8	q0, q1
  984	aesmc.8	q0, q0
  985	aese.8	q0, q2
  986	aesmc.8	q0, q0
  987	aese.8	q0, q3
  988	aesmc.8	q0, q0
  989	aese.8	q0, q4
  990	aesmc.8	q0, q0
  991	subs	r3, r3, #10
  992	vld1.32	{q1-q2}, [r2]!
  993	aese.8	q0, q1
  994	aesmc.8	q0, q0
  995	aese.8	q0, q2
  996	beq	L_aes_encrypt_arm32_crypto_round_done
  997	vld1.32	{q1-q2}, [r2]!
  998	subs	r3, r3, #2
  999	aesmc.8	q0, q0
 1000	aese.8	q0, q1
 1001	aesmc.8	q0, q0
 1002	aese.8	q0, q2
 1003	beq	L_aes_encrypt_arm32_crypto_round_done
 1004	vld1.32	{q1-q2}, [r2]!
 1005	aesmc.8	q0, q0
 1006	aese.8	q0, q1
 1007	aesmc.8	q0, q0
 1008	aese.8	q0, q2
 1009L_aes_encrypt_arm32_crypto_round_done:
 1010	vld1.32	{q1}, [r2]
 1011	veor.32	q0, q0, q1
 1012	vst1.8	{q0}, [r1]
 1013	vpop	{d8-d9}
 1014	bx	lr
 1015	.size	AES_encrypt_AARCH32,.-AES_encrypt_AARCH32
 1016#endif /* defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || defined(HAVE_AES_CBC) */
 1017#if !defined(WC_AES_BITSLICED) || defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER)
 1018#ifdef HAVE_AES_DECRYPT
 1019	.text
 1020	.align	4
 1021	.globl	AES_decrypt_AARCH32
 1022	.type	AES_decrypt_AARCH32, %function
 1023AES_decrypt_AARCH32:
 1024	vpush	{d8-d9}
 1025	vld1.8	{q0}, [r0]
 1026	vldm	r2!, {q1-q4}
 1027	aesd.8	q0, q1
 1028	aesimc.8	q0, q0
 1029	aesd.8	q0, q2
 1030	aesimc.8	q0, q0
 1031	aesd.8	q0, q3
 1032	aesimc.8	q0, q0
 1033	aesd.8	q0, q4
 1034	aesimc.8	q0, q0
 1035	vldm	r2!, {q1-q4}
 1036	aesd.8	q0, q1
 1037	aesimc.8	q0, q0
 1038	aesd.8	q0, q2
 1039	aesimc.8	q0, q0
 1040	aesd.8	q0, q3
 1041	aesimc.8	q0, q0
 1042	aesd.8	q0, q4
 1043	aesimc.8	q0, q0
 1044	vld1.32	{q1-q2}, [r2]!
 1045	aesd.8	q0, q1
 1046	aesimc.8	q0, q0
 1047	aesd.8	q0, q2
 1048	subs	r3, r3, #10
 1049	beq	L_aes_decrypt_arm32_crypto_round_done
 1050	vld1.32	{q1-q2}, [r2]!
 1051	aesimc.8	q0, q0
 1052	aesd.8	q0, q1
 1053	aesimc.8	q0, q0
 1054	aesd.8	q0, q2
 1055	subs	r3, r3, #2
 1056	beq	L_aes_decrypt_arm32_crypto_round_done
 1057	vld1.32	{q1-q2}, [r2]!
 1058	aesimc.8	q0, q0
 1059	aesd.8	q0, q1
 1060	aesimc.8	q0, q0
 1061	aesd.8	q0, q2
 1062L_aes_decrypt_arm32_crypto_round_done:
 1063	vld1.32	{q1}, [r2]
 1064	veor.32	q0, q0, q1
 1065	vst1.8	{q0}, [r1]
 1066	vpop	{d8-d9}
 1067	bx	lr
 1068	.size	AES_decrypt_AARCH32,.-AES_decrypt_AARCH32
 1069#endif /* HAVE_AES_DECRYPT */
 1070#endif /* !defined(WC_AES_BITSLICED) || defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) */
 1071#ifdef HAVE_AES_ECB
 1072	.text
 1073	.align	4
 1074	.globl	AES_encrypt_blocks_AARCH32
 1075	.type	AES_encrypt_blocks_AARCH32, %function
 1076AES_encrypt_blocks_AARCH32:
 1077	vpush	{d8-d15}
 1078	ldr	r12, [sp, #64]
 1079	vldm.32	r3!, {q0-q7}
 1080	lsr	r2, r2, #4
 1081	cmp	r12, #12
 1082	blt	L_aes_encrypt_blocks_arm32_crypto_start_128
 1083	bgt	L_aes_encrypt_blocks_arm32_crypto_start_256
 1084	# AES_ECB_192
 1085#ifndef NO_AES_192
 1086	vld1.32	{q8-q9}, [r3]!
 1087	cmp	r2, #1
 1088	beq	L_aes_encrypt_blocks_arm32_crypto_192_start_1
 1089L_aes_encrypt_blocks_arm32_crypto_192_start_4:
 1090	cmp	r2, #4
 1091	blt	L_aes_encrypt_blocks_arm32_crypto_192_start_2
 1092	vldm.8	r0!, {q12-q15}
 1093	aese.8	q12, q0
 1094	aesmc.8	q12, q12
 1095	aese.8	q13, q0
 1096	aesmc.8	q13, q13
 1097	aese.8	q14, q0
 1098	aesmc.8	q14, q14
 1099	aese.8	q15, q0
 1100	aesmc.8	q15, q15
 1101	aese.8	q12, q1
 1102	aesmc.8	q12, q12
 1103	aese.8	q13, q1
 1104	aesmc.8	q13, q13
 1105	aese.8	q14, q1
 1106	aesmc.8	q14, q14
 1107	aese.8	q15, q1
 1108	aesmc.8	q15, q15
 1109	aese.8	q12, q2
 1110	aesmc.8	q12, q12
 1111	aese.8	q13, q2
 1112	aesmc.8	q13, q13
 1113	aese.8	q14, q2
 1114	aesmc.8	q14, q14
 1115	aese.8	q15, q2
 1116	aesmc.8	q15, q15
 1117	aese.8	q12, q3
 1118	aesmc.8	q12, q12
 1119	aese.8	q13, q3
 1120	aesmc.8	q13, q13
 1121	aese.8	q14, q3
 1122	aesmc.8	q14, q14
 1123	aese.8	q15, q3
 1124	aesmc.8	q15, q15
 1125	aese.8	q12, q4
 1126	aesmc.8	q12, q12
 1127	aese.8	q13, q4
 1128	aesmc.8	q13, q13
 1129	aese.8	q14, q4
 1130	aesmc.8	q14, q14
 1131	aese.8	q15, q4
 1132	aesmc.8	q15, q15
 1133	aese.8	q12, q5
 1134	aesmc.8	q12, q12
 1135	aese.8	q13, q5
 1136	aesmc.8	q13, q13
 1137	aese.8	q14, q5
 1138	aesmc.8	q14, q14
 1139	aese.8	q15, q5
 1140	aesmc.8	q15, q15
 1141	aese.8	q12, q6
 1142	aesmc.8	q12, q12
 1143	aese.8	q13, q6
 1144	aesmc.8	q13, q13
 1145	aese.8	q14, q6
 1146	aesmc.8	q14, q14
 1147	aese.8	q15, q6
 1148	aesmc.8	q15, q15
 1149	aese.8	q12, q7
 1150	aesmc.8	q12, q12
 1151	aese.8	q13, q7
 1152	aesmc.8	q13, q13
 1153	aese.8	q14, q7
 1154	aesmc.8	q14, q14
 1155	aese.8	q15, q7
 1156	aesmc.8	q15, q15
 1157	aese.8	q12, q8
 1158	aesmc.8	q12, q12
 1159	aese.8	q13, q8
 1160	aesmc.8	q13, q13
 1161	aese.8	q14, q8
 1162	aesmc.8	q14, q14
 1163	aese.8	q15, q8
 1164	aesmc.8	q15, q15
 1165	vld1.32	{q10}, [r3]!
 1166	aese.8	q12, q9
 1167	aesmc.8	q12, q12
 1168	aese.8	q13, q9
 1169	aesmc.8	q13, q13
 1170	aese.8	q14, q9
 1171	aesmc.8	q14, q14
 1172	aese.8	q15, q9
 1173	aesmc.8	q15, q15
 1174	vld1.32	{q11}, [r3]!
 1175	aese.8	q12, q10
 1176	aesmc.8	q12, q12
 1177	aese.8	q13, q10
 1178	aesmc.8	q13, q13
 1179	aese.8	q14, q10
 1180	aesmc.8	q14, q14
 1181	aese.8	q15, q10
 1182	aesmc.8	q15, q15
 1183	vld1.32	{q10}, [r3]!
 1184	aese.8	q12, q11
 1185	veor.32	q12, q12, q10
 1186	aese.8	q13, q11
 1187	veor.32	q13, q13, q10
 1188	aese.8	q14, q11
 1189	veor.32	q14, q14, q10
 1190	aese.8	q15, q11
 1191	veor.32	q15, q15, q10
 1192	sub	r3, r3, #48
 1193	sub	r2, r2, #4
 1194	vstm.8	r1!, {q12-q15}
 1195	cmp	r2, #4
 1196	bge	L_aes_encrypt_blocks_arm32_crypto_192_start_4
 1197L_aes_encrypt_blocks_arm32_crypto_192_start_2:
 1198	cmp	r2, #2
 1199	blt	L_aes_encrypt_blocks_arm32_crypto_192_start_1
 1200	vld1.8	{q12-q13}, [r0]!
 1201	aese.8	q12, q0
 1202	aesmc.8	q12, q12
 1203	aese.8	q13, q0
 1204	aesmc.8	q13, q13
 1205	aese.8	q12, q1
 1206	aesmc.8	q12, q12
 1207	aese.8	q13, q1
 1208	aesmc.8	q13, q13
 1209	aese.8	q12, q2
 1210	aesmc.8	q12, q12
 1211	aese.8	q13, q2
 1212	aesmc.8	q13, q13
 1213	aese.8	q12, q3
 1214	aesmc.8	q12, q12
 1215	aese.8	q13, q3
 1216	aesmc.8	q13, q13
 1217	aese.8	q12, q4
 1218	aesmc.8	q12, q12
 1219	aese.8	q13, q4
 1220	aesmc.8	q13, q13
 1221	aese.8	q12, q5
 1222	aesmc.8	q12, q12
 1223	aese.8	q13, q5
 1224	aesmc.8	q13, q13
 1225	aese.8	q12, q6
 1226	aesmc.8	q12, q12
 1227	aese.8	q13, q6
 1228	aesmc.8	q13, q13
 1229	aese.8	q12, q7
 1230	aesmc.8	q12, q12
 1231	aese.8	q13, q7
 1232	aesmc.8	q13, q13
 1233	aese.8	q12, q8
 1234	aesmc.8	q12, q12
 1235	aese.8	q13, q8
 1236	aesmc.8	q13, q13
 1237	vld1.32	{q10}, [r3]!
 1238	aese.8	q12, q9
 1239	aesmc.8	q12, q12
 1240	aese.8	q13, q9
 1241	aesmc.8	q13, q13
 1242	vld1.32	{q11}, [r3]!
 1243	aese.8	q12, q10
 1244	aesmc.8	q12, q12
 1245	aese.8	q13, q10
 1246	aesmc.8	q13, q13
 1247	vld1.32	{q10}, [r3]!
 1248	aese.8	q12, q11
 1249	veor.32	q12, q12, q10
 1250	aese.8	q13, q11
 1251	veor.32	q13, q13, q10
 1252	sub	r3, r3, #48
 1253	sub	r2, r2, #2
 1254	vst1.8	{q12-q13}, [r1]!
 1255L_aes_encrypt_blocks_arm32_crypto_192_start_1:
 1256	cmp	r2, #0
 1257	beq	L_aes_encrypt_blocks_arm32_crypto_192_done
 1258	vld1.8	{q12}, [r0]!
 1259	aese.8	q12, q0
 1260	aesmc.8	q12, q12
 1261	aese.8	q12, q1
 1262	aesmc.8	q12, q12
 1263	aese.8	q12, q2
 1264	aesmc.8	q12, q12
 1265	aese.8	q12, q3
 1266	aesmc.8	q12, q12
 1267	aese.8	q12, q4
 1268	aesmc.8	q12, q12
 1269	aese.8	q12, q5
 1270	aesmc.8	q12, q12
 1271	aese.8	q12, q6
 1272	aesmc.8	q12, q12
 1273	aese.8	q12, q7
 1274	aesmc.8	q12, q12
 1275	aese.8	q12, q8
 1276	aesmc.8	q12, q12
 1277	vld1.32	{q10}, [r3]!
 1278	aese.8	q12, q9
 1279	aesmc.8	q12, q12
 1280	vld1.32	{q11}, [r3]!
 1281	aese.8	q12, q10
 1282	aesmc.8	q12, q12
 1283	vld1.32	{q10}, [r3]!
 1284	aese.8	q12, q11
 1285	veor.32	q12, q12, q10
 1286	sub	r3, r3, #48
 1287	vst1.8	{q12}, [r1]!
 1288L_aes_encrypt_blocks_arm32_crypto_192_done:
 1289#endif /* !NO_AES_192 */
 1290	b	L_aes_encrypt_blocks_arm32_crypto_done
 1291	# AES_ECB_256
 1292L_aes_encrypt_blocks_arm32_crypto_start_256:
 1293#ifndef NO_AES_256
 1294	vld1.32	{q8-q9}, [r3]!
 1295	cmp	r2, #1
 1296	beq	L_aes_encrypt_blocks_arm32_crypto_256_start_1
 1297L_aes_encrypt_blocks_arm32_crypto_256_start_4:
 1298	cmp	r2, #4
 1299	blt	L_aes_encrypt_blocks_arm32_crypto_256_start_2
 1300	vldm.8	r0!, {q12-q15}
 1301	aese.8	q12, q0
 1302	aesmc.8	q12, q12
 1303	aese.8	q13, q0
 1304	aesmc.8	q13, q13
 1305	aese.8	q14, q0
 1306	aesmc.8	q14, q14
 1307	aese.8	q15, q0
 1308	aesmc.8	q15, q15
 1309	aese.8	q12, q1
 1310	aesmc.8	q12, q12
 1311	aese.8	q13, q1
 1312	aesmc.8	q13, q13
 1313	aese.8	q14, q1
 1314	aesmc.8	q14, q14
 1315	aese.8	q15, q1
 1316	aesmc.8	q15, q15
 1317	aese.8	q12, q2
 1318	aesmc.8	q12, q12
 1319	aese.8	q13, q2
 1320	aesmc.8	q13, q13
 1321	aese.8	q14, q2
 1322	aesmc.8	q14, q14
 1323	aese.8	q15, q2
 1324	aesmc.8	q15, q15
 1325	aese.8	q12, q3
 1326	aesmc.8	q12, q12
 1327	aese.8	q13, q3
 1328	aesmc.8	q13, q13
 1329	aese.8	q14, q3
 1330	aesmc.8	q14, q14
 1331	aese.8	q15, q3
 1332	aesmc.8	q15, q15
 1333	aese.8	q12, q4
 1334	aesmc.8	q12, q12
 1335	aese.8	q13, q4
 1336	aesmc.8	q13, q13
 1337	aese.8	q14, q4
 1338	aesmc.8	q14, q14
 1339	aese.8	q15, q4
 1340	aesmc.8	q15, q15
 1341	aese.8	q12, q5
 1342	aesmc.8	q12, q12
 1343	aese.8	q13, q5
 1344	aesmc.8	q13, q13
 1345	aese.8	q14, q5
 1346	aesmc.8	q14, q14
 1347	aese.8	q15, q5
 1348	aesmc.8	q15, q15
 1349	aese.8	q12, q6
 1350	aesmc.8	q12, q12
 1351	aese.8	q13, q6
 1352	aesmc.8	q13, q13
 1353	aese.8	q14, q6
 1354	aesmc.8	q14, q14
 1355	aese.8	q15, q6
 1356	aesmc.8	q15, q15
 1357	aese.8	q12, q7
 1358	aesmc.8	q12, q12
 1359	aese.8	q13, q7
 1360	aesmc.8	q13, q13
 1361	aese.8	q14, q7
 1362	aesmc.8	q14, q14
 1363	aese.8	q15, q7
 1364	aesmc.8	q15, q15
 1365	aese.8	q12, q8
 1366	aesmc.8	q12, q12
 1367	aese.8	q13, q8
 1368	aesmc.8	q13, q13
 1369	aese.8	q14, q8
 1370	aesmc.8	q14, q14
 1371	aese.8	q15, q8
 1372	aesmc.8	q15, q15
 1373	vld1.32	{q10}, [r3]!
 1374	aese.8	q12, q9
 1375	aesmc.8	q12, q12
 1376	aese.8	q13, q9
 1377	aesmc.8	q13, q13
 1378	aese.8	q14, q9
 1379	aesmc.8	q14, q14
 1380	aese.8	q15, q9
 1381	aesmc.8	q15, q15
 1382	vld1.32	{q11}, [r3]!
 1383	aese.8	q12, q10
 1384	aesmc.8	q12, q12
 1385	aese.8	q13, q10
 1386	aesmc.8	q13, q13
 1387	aese.8	q14, q10
 1388	aesmc.8	q14, q14
 1389	aese.8	q15, q10
 1390	aesmc.8	q15, q15
 1391	vld1.32	{q10}, [r3]!
 1392	aese.8	q12, q11
 1393	aesmc.8	q12, q12
 1394	aese.8	q13, q11
 1395	aesmc.8	q13, q13
 1396	aese.8	q14, q11
 1397	aesmc.8	q14, q14
 1398	aese.8	q15, q11
 1399	aesmc.8	q15, q15
 1400	vld1.32	{q11}, [r3]!
 1401	aese.8	q12, q10
 1402	aesmc.8	q12, q12
 1403	aese.8	q13, q10
 1404	aesmc.8	q13, q13
 1405	aese.8	q14, q10
 1406	aesmc.8	q14, q14
 1407	aese.8	q15, q10
 1408	aesmc.8	q15, q15
 1409	vld1.32	{q10}, [r3]!
 1410	aese.8	q12, q11
 1411	veor.32	q12, q12, q10
 1412	aese.8	q13, q11
 1413	veor.32	q13, q13, q10
 1414	aese.8	q14, q11
 1415	veor.32	q14, q14, q10
 1416	aese.8	q15, q11
 1417	veor.32	q15, q15, q10
 1418	sub	r3, r3, #0x50
 1419	sub	r2, r2, #4
 1420	vstm.8	r1!, {q12-q15}
 1421	cmp	r2, #4
 1422	bge	L_aes_encrypt_blocks_arm32_crypto_256_start_4
 1423L_aes_encrypt_blocks_arm32_crypto_256_start_2:
 1424	cmp	r2, #2
 1425	blt	L_aes_encrypt_blocks_arm32_crypto_256_start_1
 1426	vld1.8	{q12-q13}, [r0]!
 1427	aese.8	q12, q0
 1428	aesmc.8	q12, q12
 1429	aese.8	q13, q0
 1430	aesmc.8	q13, q13
 1431	aese.8	q12, q1
 1432	aesmc.8	q12, q12
 1433	aese.8	q13, q1
 1434	aesmc.8	q13, q13
 1435	aese.8	q12, q2
 1436	aesmc.8	q12, q12
 1437	aese.8	q13, q2
 1438	aesmc.8	q13, q13
 1439	aese.8	q12, q3
 1440	aesmc.8	q12, q12
 1441	aese.8	q13, q3
 1442	aesmc.8	q13, q13
 1443	aese.8	q12, q4
 1444	aesmc.8	q12, q12
 1445	aese.8	q13, q4
 1446	aesmc.8	q13, q13
 1447	aese.8	q12, q5
 1448	aesmc.8	q12, q12
 1449	aese.8	q13, q5
 1450	aesmc.8	q13, q13
 1451	aese.8	q12, q6
 1452	aesmc.8	q12, q12
 1453	aese.8	q13, q6
 1454	aesmc.8	q13, q13
 1455	aese.8	q12, q7
 1456	aesmc.8	q12, q12
 1457	aese.8	q13, q7
 1458	aesmc.8	q13, q13
 1459	aese.8	q12, q8
 1460	aesmc.8	q12, q12
 1461	aese.8	q13, q8
 1462	aesmc.8	q13, q13
 1463	vld1.32	{q10}, [r3]!
 1464	aese.8	q12, q9
 1465	aesmc.8	q12, q12
 1466	aese.8	q13, q9
 1467	aesmc.8	q13, q13
 1468	vld1.32	{q11}, [r3]!
 1469	aese.8	q12, q10
 1470	aesmc.8	q12, q12
 1471	aese.8	q13, q10
 1472	aesmc.8	q13, q13
 1473	vld1.32	{q10}, [r3]!
 1474	aese.8	q12, q11
 1475	aesmc.8	q12, q12
 1476	aese.8	q13, q11
 1477	aesmc.8	q13, q13
 1478	vld1.32	{q11}, [r3]!
 1479	aese.8	q12, q10
 1480	aesmc.8	q12, q12
 1481	aese.8	q13, q10
 1482	aesmc.8	q13, q13
 1483	vld1.32	{q10}, [r3]!
 1484	aese.8	q12, q11
 1485	veor.32	q12, q12, q10
 1486	aese.8	q13, q11
 1487	veor.32	q13, q13, q10
 1488	sub	r3, r3, #0x50
 1489	sub	r2, r2, #2
 1490	vst1.8	{q12-q13}, [r1]!
 1491L_aes_encrypt_blocks_arm32_crypto_256_start_1:
 1492	cmp	r2, #0
 1493	beq	L_aes_encrypt_blocks_arm32_crypto_256_done
 1494	vld1.8	{q12}, [r0]!
 1495	aese.8	q12, q0
 1496	aesmc.8	q12, q12
 1497	aese.8	q12, q1
 1498	aesmc.8	q12, q12
 1499	aese.8	q12, q2
 1500	aesmc.8	q12, q12
 1501	aese.8	q12, q3
 1502	aesmc.8	q12, q12
 1503	aese.8	q12, q4
 1504	aesmc.8	q12, q12
 1505	aese.8	q12, q5
 1506	aesmc.8	q12, q12
 1507	aese.8	q12, q6
 1508	aesmc.8	q12, q12
 1509	aese.8	q12, q7
 1510	aesmc.8	q12, q12
 1511	aese.8	q12, q8
 1512	aesmc.8	q12, q12
 1513	vld1.32	{q10}, [r3]!
 1514	aese.8	q12, q9
 1515	aesmc.8	q12, q12
 1516	vld1.32	{q11}, [r3]!
 1517	aese.8	q12, q10
 1518	aesmc.8	q12, q12
 1519	vld1.32	{q10}, [r3]!
 1520	aese.8	q12, q11
 1521	aesmc.8	q12, q12
 1522	vld1.32	{q11}, [r3]!
 1523	aese.8	q12, q10
 1524	aesmc.8	q12, q12
 1525	vld1.32	{q10}, [r3]!
 1526	aese.8	q12, q11
 1527	veor.32	q12, q12, q10
 1528	sub	r3, r3, #0x50
 1529	vst1.8	{q12}, [r1]!
 1530L_aes_encrypt_blocks_arm32_crypto_256_done:
 1531#endif /* !NO_AES_256 */
 1532	b	L_aes_encrypt_blocks_arm32_crypto_done
 1533	# AES_ECB_128
 1534L_aes_encrypt_blocks_arm32_crypto_start_128:
 1535#ifndef NO_AES_128
 1536	vldm.32	r3!, {q8-q10}
 1537	cmp	r2, #1
 1538	beq	L_aes_encrypt_blocks_arm32_crypto_128_start_1
 1539L_aes_encrypt_blocks_arm32_crypto_128_start_4:
 1540	cmp	r2, #4
 1541	blt	L_aes_encrypt_blocks_arm32_crypto_128_start_2
 1542	vldm.8	r0!, {q12-q15}
 1543	aese.8	q12, q0
 1544	aesmc.8	q12, q12
 1545	aese.8	q13, q0
 1546	aesmc.8	q13, q13
 1547	aese.8	q14, q0
 1548	aesmc.8	q14, q14
 1549	aese.8	q15, q0
 1550	aesmc.8	q15, q15
 1551	aese.8	q12, q1
 1552	aesmc.8	q12, q12
 1553	aese.8	q13, q1
 1554	aesmc.8	q13, q13
 1555	aese.8	q14, q1
 1556	aesmc.8	q14, q14
 1557	aese.8	q15, q1
 1558	aesmc.8	q15, q15
 1559	aese.8	q12, q2
 1560	aesmc.8	q12, q12
 1561	aese.8	q13, q2
 1562	aesmc.8	q13, q13
 1563	aese.8	q14, q2
 1564	aesmc.8	q14, q14
 1565	aese.8	q15, q2
 1566	aesmc.8	q15, q15
 1567	aese.8	q12, q3
 1568	aesmc.8	q12, q12
 1569	aese.8	q13, q3
 1570	aesmc.8	q13, q13
 1571	aese.8	q14, q3
 1572	aesmc.8	q14, q14
 1573	aese.8	q15, q3
 1574	aesmc.8	q15, q15
 1575	aese.8	q12, q4
 1576	aesmc.8	q12, q12
 1577	aese.8	q13, q4
 1578	aesmc.8	q13, q13
 1579	aese.8	q14, q4
 1580	aesmc.8	q14, q14
 1581	aese.8	q15, q4
 1582	aesmc.8	q15, q15
 1583	aese.8	q12, q5
 1584	aesmc.8	q12, q12
 1585	aese.8	q13, q5
 1586	aesmc.8	q13, q13
 1587	aese.8	q14, q5
 1588	aesmc.8	q14, q14
 1589	aese.8	q15, q5
 1590	aesmc.8	q15, q15
 1591	aese.8	q12, q6
 1592	aesmc.8	q12, q12
 1593	aese.8	q13, q6
 1594	aesmc.8	q13, q13
 1595	aese.8	q14, q6
 1596	aesmc.8	q14, q14
 1597	aese.8	q15, q6
 1598	aesmc.8	q15, q15
 1599	aese.8	q12, q7
 1600	aesmc.8	q12, q12
 1601	aese.8	q13, q7
 1602	aesmc.8	q13, q13
 1603	aese.8	q14, q7
 1604	aesmc.8	q14, q14
 1605	aese.8	q15, q7
 1606	aesmc.8	q15, q15
 1607	aese.8	q12, q8
 1608	aesmc.8	q12, q12
 1609	aese.8	q13, q8
 1610	aesmc.8	q13, q13
 1611	aese.8	q14, q8
 1612	aesmc.8	q14, q14
 1613	aese.8	q15, q8
 1614	aesmc.8	q15, q15
 1615	aese.8	q12, q9
 1616	veor.32	q12, q12, q10
 1617	aese.8	q13, q9
 1618	veor.32	q13, q13, q10
 1619	aese.8	q14, q9
 1620	veor.32	q14, q14, q10
 1621	aese.8	q15, q9
 1622	veor.32	q15, q15, q10
 1623	sub	r2, r2, #4
 1624	vstm.8	r1!, {q12-q15}
 1625	cmp	r2, #4
 1626	bge	L_aes_encrypt_blocks_arm32_crypto_128_start_4
 1627L_aes_encrypt_blocks_arm32_crypto_128_start_2:
 1628	cmp	r2, #2
 1629	blt	L_aes_encrypt_blocks_arm32_crypto_128_start_1
 1630	vld1.8	{q12-q13}, [r0]!
 1631	aese.8	q12, q0
 1632	aesmc.8	q12, q12
 1633	aese.8	q13, q0
 1634	aesmc.8	q13, q13
 1635	aese.8	q12, q1
 1636	aesmc.8	q12, q12
 1637	aese.8	q13, q1
 1638	aesmc.8	q13, q13
 1639	aese.8	q12, q2
 1640	aesmc.8	q12, q12
 1641	aese.8	q13, q2
 1642	aesmc.8	q13, q13
 1643	aese.8	q12, q3
 1644	aesmc.8	q12, q12
 1645	aese.8	q13, q3
 1646	aesmc.8	q13, q13
 1647	aese.8	q12, q4
 1648	aesmc.8	q12, q12
 1649	aese.8	q13, q4
 1650	aesmc.8	q13, q13
 1651	aese.8	q12, q5
 1652	aesmc.8	q12, q12
 1653	aese.8	q13, q5
 1654	aesmc.8	q13, q13
 1655	aese.8	q12, q6
 1656	aesmc.8	q12, q12
 1657	aese.8	q13, q6
 1658	aesmc.8	q13, q13
 1659	aese.8	q12, q7
 1660	aesmc.8	q12, q12
 1661	aese.8	q13, q7
 1662	aesmc.8	q13, q13
 1663	aese.8	q12, q8
 1664	aesmc.8	q12, q12
 1665	aese.8	q13, q8
 1666	aesmc.8	q13, q13
 1667	aese.8	q12, q9
 1668	veor.32	q12, q12, q10
 1669	aese.8	q13, q9
 1670	veor.32	q13, q13, q10
 1671	sub	r2, r2, #2
 1672	vst1.8	{q12-q13}, [r1]!
 1673L_aes_encrypt_blocks_arm32_crypto_128_start_1:
 1674	cmp	r2, #0
 1675	beq	L_aes_encrypt_blocks_arm32_crypto_128_done
 1676	vld1.8	{q12}, [r0]!
 1677	aese.8	q12, q0
 1678	aesmc.8	q12, q12
 1679	aese.8	q12, q1
 1680	aesmc.8	q12, q12
 1681	aese.8	q12, q2
 1682	aesmc.8	q12, q12
 1683	aese.8	q12, q3
 1684	aesmc.8	q12, q12
 1685	aese.8	q12, q4
 1686	aesmc.8	q12, q12
 1687	aese.8	q12, q5
 1688	aesmc.8	q12, q12
 1689	aese.8	q12, q6
 1690	aesmc.8	q12, q12
 1691	aese.8	q12, q7
 1692	aesmc.8	q12, q12
 1693	aese.8	q12, q8
 1694	aesmc.8	q12, q12
 1695	aese.8	q12, q9
 1696	veor.32	q12, q12, q10
 1697	vst1.8	{q12}, [r1]!
 1698L_aes_encrypt_blocks_arm32_crypto_128_done:
 1699#endif /* !NO_AES_128 */
 1700L_aes_encrypt_blocks_arm32_crypto_done:
 1701	vpop	{d8-d15}
 1702	bx	lr
 1703	.size	AES_encrypt_blocks_AARCH32,.-AES_encrypt_blocks_AARCH32
 1704#ifdef HAVE_AES_DECRYPT
 1705	.text
 1706	.align	4
 1707	.globl	AES_decrypt_blocks_AARCH32
 1708	.type	AES_decrypt_blocks_AARCH32, %function
 1709AES_decrypt_blocks_AARCH32:
 1710	vpush	{d8-d15}
 1711	ldr	r12, [sp, #64]
 1712	vldm.32	r3!, {q0-q7}
 1713	lsr	r2, r2, #4
 1714	cmp	r12, #12
 1715	blt	L_aes_decrypt_blocks_arm32_crypto_start_128
 1716	bgt	L_aes_decrypt_blocks_arm32_crypto_start_256
 1717	# AES_ECB_192
 1718#ifndef NO_AES_192
 1719	vld1.32	{q8-q9}, [r3]!
 1720	cmp	r2, #1
 1721	beq	L_aes_decrypt_blocks_arm32_crypto_192_start_1
 1722	cmp	r2, #4
 1723	blt	L_aes_decrypt_blocks_arm32_crypto_192_start_2
 1724L_aes_decrypt_blocks_arm32_crypto_192_start_4:
 1725	vldm.8	r0!, {q12-q15}
 1726	aesd.8	q12, q0
 1727	aesimc.8	q12, q12
 1728	aesd.8	q13, q0
 1729	aesimc.8	q13, q13
 1730	aesd.8	q14, q0
 1731	aesimc.8	q14, q14
 1732	aesd.8	q15, q0
 1733	aesimc.8	q15, q15
 1734	aesd.8	q12, q1
 1735	aesimc.8	q12, q12
 1736	aesd.8	q13, q1
 1737	aesimc.8	q13, q13
 1738	aesd.8	q14, q1
 1739	aesimc.8	q14, q14
 1740	aesd.8	q15, q1
 1741	aesimc.8	q15, q15
 1742	aesd.8	q12, q2
 1743	aesimc.8	q12, q12
 1744	aesd.8	q13, q2
 1745	aesimc.8	q13, q13
 1746	aesd.8	q14, q2
 1747	aesimc.8	q14, q14
 1748	aesd.8	q15, q2
 1749	aesimc.8	q15, q15
 1750	aesd.8	q12, q3
 1751	aesimc.8	q12, q12
 1752	aesd.8	q13, q3
 1753	aesimc.8	q13, q13
 1754	aesd.8	q14, q3
 1755	aesimc.8	q14, q14
 1756	aesd.8	q15, q3
 1757	aesimc.8	q15, q15
 1758	aesd.8	q12, q4
 1759	aesimc.8	q12, q12
 1760	aesd.8	q13, q4
 1761	aesimc.8	q13, q13
 1762	aesd.8	q14, q4
 1763	aesimc.8	q14, q14
 1764	aesd.8	q15, q4
 1765	aesimc.8	q15, q15
 1766	aesd.8	q12, q5
 1767	aesimc.8	q12, q12
 1768	aesd.8	q13, q5
 1769	aesimc.8	q13, q13
 1770	aesd.8	q14, q5
 1771	aesimc.8	q14, q14
 1772	aesd.8	q15, q5
 1773	aesimc.8	q15, q15
 1774	aesd.8	q12, q6
 1775	aesimc.8	q12, q12
 1776	aesd.8	q13, q6
 1777	aesimc.8	q13, q13
 1778	aesd.8	q14, q6
 1779	aesimc.8	q14, q14
 1780	aesd.8	q15, q6
 1781	aesimc.8	q15, q15
 1782	aesd.8	q12, q7
 1783	aesimc.8	q12, q12
 1784	aesd.8	q13, q7
 1785	aesimc.8	q13, q13
 1786	aesd.8	q14, q7
 1787	aesimc.8	q14, q14
 1788	aesd.8	q15, q7
 1789	aesimc.8	q15, q15
 1790	aesd.8	q12, q8
 1791	aesimc.8	q12, q12
 1792	aesd.8	q13, q8
 1793	aesimc.8	q13, q13
 1794	aesd.8	q14, q8
 1795	aesimc.8	q14, q14
 1796	aesd.8	q15, q8
 1797	aesimc.8	q15, q15
 1798	vld1.32	{q10}, [r3]!
 1799	aesd.8	q12, q9
 1800	aesimc.8	q12, q12
 1801	aesd.8	q13, q9
 1802	aesimc.8	q13, q13
 1803	aesd.8	q14, q9
 1804	aesimc.8	q14, q14
 1805	aesd.8	q15, q9
 1806	aesimc.8	q15, q15
 1807	vld1.32	{q11}, [r3]!
 1808	aesd.8	q12, q10
 1809	aesimc.8	q12, q12
 1810	aesd.8	q13, q10
 1811	aesimc.8	q13, q13
 1812	aesd.8	q14, q10
 1813	aesimc.8	q14, q14
 1814	aesd.8	q15, q10
 1815	aesimc.8	q15, q15
 1816	vld1.32	{q10}, [r3]!
 1817	aesd.8	q12, q11
 1818	veor.32	q12, q12, q10
 1819	aesd.8	q13, q11
 1820	veor.32	q13, q13, q10
 1821	aesd.8	q14, q11
 1822	veor.32	q14, q14, q10
 1823	aesd.8	q15, q11
 1824	veor.32	q15, q15, q10
 1825	sub	r3, r3, #48
 1826	sub	r2, r2, #4
 1827	vstm.8	r1!, {q12-q15}
 1828	cmp	r2, #4
 1829	bge	L_aes_decrypt_blocks_arm32_crypto_192_start_4
 1830L_aes_decrypt_blocks_arm32_crypto_192_start_2:
 1831	cmp	r2, #2
 1832	blt	L_aes_decrypt_blocks_arm32_crypto_192_start_1
 1833	vld1.8	{q12-q13}, [r0]!
 1834	aesd.8	q12, q0
 1835	aesimc.8	q12, q12
 1836	aesd.8	q13, q0
 1837	aesimc.8	q13, q13
 1838	aesd.8	q12, q1
 1839	aesimc.8	q12, q12
 1840	aesd.8	q13, q1
 1841	aesimc.8	q13, q13
 1842	aesd.8	q12, q2
 1843	aesimc.8	q12, q12
 1844	aesd.8	q13, q2
 1845	aesimc.8	q13, q13
 1846	aesd.8	q12, q3
 1847	aesimc.8	q12, q12
 1848	aesd.8	q13, q3
 1849	aesimc.8	q13, q13
 1850	aesd.8	q12, q4
 1851	aesimc.8	q12, q12
 1852	aesd.8	q13, q4
 1853	aesimc.8	q13, q13
 1854	aesd.8	q12, q5
 1855	aesimc.8	q12, q12
 1856	aesd.8	q13, q5
 1857	aesimc.8	q13, q13
 1858	aesd.8	q12, q6
 1859	aesimc.8	q12, q12
 1860	aesd.8	q13, q6
 1861	aesimc.8	q13, q13
 1862	aesd.8	q12, q7
 1863	aesimc.8	q12, q12
 1864	aesd.8	q13, q7
 1865	aesimc.8	q13, q13
 1866	aesd.8	q12, q8
 1867	aesimc.8	q12, q12
 1868	aesd.8	q13, q8
 1869	aesimc.8	q13, q13
 1870	vld1.32	{q10}, [r3]!
 1871	aesd.8	q12, q9
 1872	aesimc.8	q12, q12
 1873	aesd.8	q13, q9
 1874	aesimc.8	q13, q13
 1875	vld1.32	{q11}, [r3]!
 1876	aesd.8	q12, q10
 1877	aesimc.8	q12, q12
 1878	aesd.8	q13, q10
 1879	aesimc.8	q13, q13
 1880	vld1.32	{q10}, [r3]!
 1881	aesd.8	q12, q11
 1882	veor.32	q12, q12, q10
 1883	aesd.8	q13, q11
 1884	veor.32	q13, q13, q10
 1885	sub	r3, r3, #48
 1886	sub	r2, r2, #2
 1887	vst1.8	{q12-q13}, [r1]!
 1888L_aes_decrypt_blocks_arm32_crypto_192_start_1:
 1889	cmp	r2, #0
 1890	beq	L_aes_decrypt_blocks_arm32_crypto_192_done
 1891	vld1.8	{q12}, [r0]!
 1892	aesd.8	q12, q0
 1893	aesimc.8	q12, q12
 1894	aesd.8	q12, q1
 1895	aesimc.8	q12, q12
 1896	aesd.8	q12, q2
 1897	aesimc.8	q12, q12
 1898	aesd.8	q12, q3
 1899	aesimc.8	q12, q12
 1900	aesd.8	q12, q4
 1901	aesimc.8	q12, q12
 1902	aesd.8	q12, q5
 1903	aesimc.8	q12, q12
 1904	aesd.8	q12, q6
 1905	aesimc.8	q12, q12
 1906	aesd.8	q12, q7
 1907	aesimc.8	q12, q12
 1908	aesd.8	q12, q8
 1909	aesimc.8	q12, q12
 1910	vld1.32	{q10}, [r3]!
 1911	aesd.8	q12, q9
 1912	aesimc.8	q12, q12
 1913	vld1.32	{q11}, [r3]!
 1914	aesd.8	q12, q10
 1915	aesimc.8	q12, q12
 1916	vld1.32	{q10}, [r3]!
 1917	aesd.8	q12, q11
 1918	veor.32	q12, q12, q10
 1919	sub	r3, r3, #48
 1920	vst1.8	{q12}, [r1]!
 1921L_aes_decrypt_blocks_arm32_crypto_192_done:
 1922#endif /* !NO_AES_192 */
 1923	b	L_aes_decrypt_blocks_arm32_crypto_done
 1924	# AES_ECB_256
 1925L_aes_decrypt_blocks_arm32_crypto_start_256:
 1926#ifndef NO_AES_256
 1927	vld1.32	{q8-q9}, [r3]!
 1928	cmp	r2, #1
 1929	beq	L_aes_decrypt_blocks_arm32_crypto_256_start_1
 1930	cmp	r2, #4
 1931	blt	L_aes_decrypt_blocks_arm32_crypto_256_start_2
 1932L_aes_decrypt_blocks_arm32_crypto_256_start_4:
 1933	vldm.8	r0!, {q12-q15}
 1934	aesd.8	q12, q0
 1935	aesimc.8	q12, q12
 1936	aesd.8	q13, q0
 1937	aesimc.8	q13, q13
 1938	aesd.8	q14, q0
 1939	aesimc.8	q14, q14
 1940	aesd.8	q15, q0
 1941	aesimc.8	q15, q15
 1942	aesd.8	q12, q1
 1943	aesimc.8	q12, q12
 1944	aesd.8	q13, q1
 1945	aesimc.8	q13, q13
 1946	aesd.8	q14, q1
 1947	aesimc.8	q14, q14
 1948	aesd.8	q15, q1
 1949	aesimc.8	q15, q15
 1950	aesd.8	q12, q2
 1951	aesimc.8	q12, q12
 1952	aesd.8	q13, q2
 1953	aesimc.8	q13, q13
 1954	aesd.8	q14, q2
 1955	aesimc.8	q14, q14
 1956	aesd.8	q15, q2
 1957	aesimc.8	q15, q15
 1958	aesd.8	q12, q3
 1959	aesimc.8	q12, q12
 1960	aesd.8	q13, q3
 1961	aesimc.8	q13, q13
 1962	aesd.8	q14, q3
 1963	aesimc.8	q14, q14
 1964	aesd.8	q15, q3
 1965	aesimc.8	q15, q15
 1966	aesd.8	q12, q4
 1967	aesimc.8	q12, q12
 1968	aesd.8	q13, q4
 1969	aesimc.8	q13, q13
 1970	aesd.8	q14, q4
 1971	aesimc.8	q14, q14
 1972	aesd.8	q15, q4
 1973	aesimc.8	q15, q15
 1974	aesd.8	q12, q5
 1975	aesimc.8	q12, q12
 1976	aesd.8	q13, q5
 1977	aesimc.8	q13, q13
 1978	aesd.8	q14, q5
 1979	aesimc.8	q14, q14
 1980	aesd.8	q15, q5
 1981	aesimc.8	q15, q15
 1982	aesd.8	q12, q6
 1983	aesimc.8	q12, q12
 1984	aesd.8	q13, q6
 1985	aesimc.8	q13, q13
 1986	aesd.8	q14, q6
 1987	aesimc.8	q14, q14
 1988	aesd.8	q15, q6
 1989	aesimc.8	q15, q15
 1990	aesd.8	q12, q7
 1991	aesimc.8	q12, q12
 1992	aesd.8	q13, q7
 1993	aesimc.8	q13, q13
 1994	aesd.8	q14, q7
 1995	aesimc.8	q14, q14
 1996	aesd.8	q15, q7
 1997	aesimc.8	q15, q15
 1998	aesd.8	q12, q8
 1999	aesimc.8	q12, q12
 2000	aesd.8	q13, q8
 2001	aesimc.8	q13, q13
 2002	aesd.8	q14, q8
 2003	aesimc.8	q14, q14
 2004	aesd.8	q15, q8
 2005	aesimc.8	q15, q15
 2006	vld1.32	{q10}, [r3]!
 2007	aesd.8	q12, q9
 2008	aesimc.8	q12, q12
 2009	aesd.8	q13, q9
 2010	aesimc.8	q13, q13
 2011	aesd.8	q14, q9
 2012	aesimc.8	q14, q14
 2013	aesd.8	q15, q9
 2014	aesimc.8	q15, q15
 2015	vld1.32	{q11}, [r3]!
 2016	aesd.8	q12, q10
 2017	aesimc.8	q12, q12
 2018	aesd.8	q13, q10
 2019	aesimc.8	q13, q13
 2020	aesd.8	q14, q10
 2021	aesimc.8	q14, q14
 2022	aesd.8	q15, q10
 2023	aesimc.8	q15, q15
 2024	vld1.32	{q10}, [r3]!
 2025	aesd.8	q12, q11
 2026	aesimc.8	q12, q12
 2027	aesd.8	q13, q11
 2028	aesimc.8	q13, q13
 2029	aesd.8	q14, q11
 2030	aesimc.8	q14, q14
 2031	aesd.8	q15, q11
 2032	aesimc.8	q15, q15
 2033	vld1.32	{q11}, [r3]!
 2034	aesd.8	q12, q10
 2035	aesimc.8	q12, q12
 2036	aesd.8	q13, q10
 2037	aesimc.8	q13, q13
 2038	aesd.8	q14, q10
 2039	aesimc.8	q14, q14
 2040	aesd.8	q15, q10
 2041	aesimc.8	q15, q15
 2042	vld1.32	{q10}, [r3]!
 2043	aesd.8	q12, q11
 2044	veor.32	q12, q12, q10
 2045	aesd.8	q13, q11
 2046	veor.32	q13, q13, q10
 2047	aesd.8	q14, q11
 2048	veor.32	q14, q14, q10
 2049	aesd.8	q15, q11
 2050	veor.32	q15, q15, q10
 2051	sub	r3, r3, #0x50
 2052	sub	r2, r2, #4
 2053	vstm.8	r1!, {q12-q15}
 2054	cmp	r2, #4
 2055	bge	L_aes_decrypt_blocks_arm32_crypto_256_start_4
 2056L_aes_decrypt_blocks_arm32_crypto_256_start_2:
 2057	cmp	r2, #2
 2058	blt	L_aes_decrypt_blocks_arm32_crypto_256_start_1
 2059	vld1.8	{q12-q13}, [r0]!
 2060	aesd.8	q12, q0
 2061	aesimc.8	q12, q12
 2062	aesd.8	q13, q0
 2063	aesimc.8	q13, q13
 2064	aesd.8	q12, q1
 2065	aesimc.8	q12, q12
 2066	aesd.8	q13, q1
 2067	aesimc.8	q13, q13
 2068	aesd.8	q12, q2
 2069	aesimc.8	q12, q12
 2070	aesd.8	q13, q2
 2071	aesimc.8	q13, q13
 2072	aesd.8	q12, q3
 2073	aesimc.8	q12, q12
 2074	aesd.8	q13, q3
 2075	aesimc.8	q13, q13
 2076	aesd.8	q12, q4
 2077	aesimc.8	q12, q12
 2078	aesd.8	q13, q4
 2079	aesimc.8	q13, q13
 2080	aesd.8	q12, q5
 2081	aesimc.8	q12, q12
 2082	aesd.8	q13, q5
 2083	aesimc.8	q13, q13
 2084	aesd.8	q12, q6
 2085	aesimc.8	q12, q12
 2086	aesd.8	q13, q6
 2087	aesimc.8	q13, q13
 2088	aesd.8	q12, q7
 2089	aesimc.8	q12, q12
 2090	aesd.8	q13, q7
 2091	aesimc.8	q13, q13
 2092	aesd.8	q12, q8
 2093	aesimc.8	q12, q12
 2094	aesd.8	q13, q8
 2095	aesimc.8	q13, q13
 2096	vld1.32	{q10}, [r3]!
 2097	aesd.8	q12, q9
 2098	aesimc.8	q12, q12
 2099	aesd.8	q13, q9
 2100	aesimc.8	q13, q13
 2101	vld1.32	{q11}, [r3]!
 2102	aesd.8	q12, q10
 2103	aesimc.8	q12, q12
 2104	aesd.8	q13, q10
 2105	aesimc.8	q13, q13
 2106	vld1.32	{q10}, [r3]!
 2107	aesd.8	q12, q11
 2108	aesimc.8	q12, q12
 2109	aesd.8	q13, q11
 2110	aesimc.8	q13, q13
 2111	vld1.32	{q11}, [r3]!
 2112	aesd.8	q12, q10
 2113	aesimc.8	q12, q12
 2114	aesd.8	q13, q10
 2115	aesimc.8	q13, q13
 2116	vld1.32	{q10}, [r3]!
 2117	aesd.8	q12, q11
 2118	veor.32	q12, q12, q10
 2119	aesd.8	q13, q11
 2120	veor.32	q13, q13, q10
 2121	sub	r3, r3, #0x50
 2122	sub	r2, r2, #2
 2123	vst1.8	{q12-q13}, [r1]!
 2124L_aes_decrypt_blocks_arm32_crypto_256_start_1:
 2125	cmp	r2, #0
 2126	beq	L_aes_decrypt_blocks_arm32_crypto_256_done
 2127	vld1.8	{q12}, [r0]!
 2128	aesd.8	q12, q0
 2129	aesimc.8	q12, q12
 2130	aesd.8	q12, q1
 2131	aesimc.8	q12, q12
 2132	aesd.8	q12, q2
 2133	aesimc.8	q12, q12
 2134	aesd.8	q12, q3
 2135	aesimc.8	q12, q12
 2136	aesd.8	q12, q4
 2137	aesimc.8	q12, q12
 2138	aesd.8	q12, q5
 2139	aesimc.8	q12, q12
 2140	aesd.8	q12, q6
 2141	aesimc.8	q12, q12
 2142	aesd.8	q12, q7
 2143	aesimc.8	q12, q12
 2144	aesd.8	q12, q8
 2145	aesimc.8	q12, q12
 2146	vld1.32	{q10}, [r3]!
 2147	aesd.8	q12, q9
 2148	aesimc.8	q12, q12
 2149	vld1.32	{q11}, [r3]!
 2150	aesd.8	q12, q10
 2151	aesimc.8	q12, q12
 2152	vld1.32	{q10}, [r3]!
 2153	aesd.8	q12, q11
 2154	aesimc.8	q12, q12
 2155	vld1.32	{q11}, [r3]!
 2156	aesd.8	q12, q10
 2157	aesimc.8	q12, q12
 2158	vld1.32	{q10}, [r3]!
 2159	aesd.8	q12, q11
 2160	veor.32	q12, q12, q10
 2161	sub	r3, r3, #0x50
 2162	vst1.8	{q12}, [r1]!
 2163L_aes_decrypt_blocks_arm32_crypto_256_done:
 2164#endif /* !NO_AES_256 */
 2165	b	L_aes_decrypt_blocks_arm32_crypto_done
 2166	# AES_ECB_128
 2167L_aes_decrypt_blocks_arm32_crypto_start_128:
 2168#ifndef NO_AES_128
 2169	vldm.32	r3!, {q8-q10}
 2170	cmp	r2, #1
 2171	beq	L_aes_decrypt_blocks_arm32_crypto_128_start_1
 2172	cmp	r2, #4
 2173	blt	L_aes_decrypt_blocks_arm32_crypto_128_start_2
 2174L_aes_decrypt_blocks_arm32_crypto_128_start_4:
 2175	vldm.8	r0!, {q12-q15}
 2176	aesd.8	q12, q0
 2177	aesimc.8	q12, q12
 2178	aesd.8	q13, q0
 2179	aesimc.8	q13, q13
 2180	aesd.8	q14, q0
 2181	aesimc.8	q14, q14
 2182	aesd.8	q15, q0
 2183	aesimc.8	q15, q15
 2184	aesd.8	q12, q1
 2185	aesimc.8	q12, q12
 2186	aesd.8	q13, q1
 2187	aesimc.8	q13, q13
 2188	aesd.8	q14, q1
 2189	aesimc.8	q14, q14
 2190	aesd.8	q15, q1
 2191	aesimc.8	q15, q15
 2192	aesd.8	q12, q2
 2193	aesimc.8	q12, q12
 2194	aesd.8	q13, q2
 2195	aesimc.8	q13, q13
 2196	aesd.8	q14, q2
 2197	aesimc.8	q14, q14
 2198	aesd.8	q15, q2
 2199	aesimc.8	q15, q15
 2200	aesd.8	q12, q3
 2201	aesimc.8	q12, q12
 2202	aesd.8	q13, q3
 2203	aesimc.8	q13, q13
 2204	aesd.8	q14, q3
 2205	aesimc.8	q14, q14
 2206	aesd.8	q15, q3
 2207	aesimc.8	q15, q15
 2208	aesd.8	q12, q4
 2209	aesimc.8	q12, q12
 2210	aesd.8	q13, q4
 2211	aesimc.8	q13, q13
 2212	aesd.8	q14, q4
 2213	aesimc.8	q14, q14
 2214	aesd.8	q15, q4
 2215	aesimc.8	q15, q15
 2216	aesd.8	q12, q5
 2217	aesimc.8	q12, q12
 2218	aesd.8	q13, q5
 2219	aesimc.8	q13, q13
 2220	aesd.8	q14, q5
 2221	aesimc.8	q14, q14
 2222	aesd.8	q15, q5
 2223	aesimc.8	q15, q15
 2224	aesd.8	q12, q6
 2225	aesimc.8	q12, q12
 2226	aesd.8	q13, q6
 2227	aesimc.8	q13, q13
 2228	aesd.8	q14, q6
 2229	aesimc.8	q14, q14
 2230	aesd.8	q15, q6
 2231	aesimc.8	q15, q15
 2232	aesd.8	q12, q7
 2233	aesimc.8	q12, q12
 2234	aesd.8	q13, q7
 2235	aesimc.8	q13, q13
 2236	aesd.8	q14, q7
 2237	aesimc.8	q14, q14
 2238	aesd.8	q15, q7
 2239	aesimc.8	q15, q15
 2240	aesd.8	q12, q8
 2241	aesimc.8	q12, q12
 2242	aesd.8	q13, q8
 2243	aesimc.8	q13, q13
 2244	aesd.8	q14, q8
 2245	aesimc.8	q14, q14
 2246	aesd.8	q15, q8
 2247	aesimc.8	q15, q15
 2248	aesd.8	q12, q9
 2249	veor.32	q12, q12, q10
 2250	aesd.8	q13, q9
 2251	veor.32	q13, q13, q10
 2252	aesd.8	q14, q9
 2253	veor.32	q14, q14, q10
 2254	aesd.8	q15, q9
 2255	veor.32	q15, q15, q10
 2256	sub	r2, r2, #4
 2257	vstm.8	r1!, {q12-q15}
 2258	cmp	r2, #4
 2259	bge	L_aes_decrypt_blocks_arm32_crypto_128_start_4
 2260L_aes_decrypt_blocks_arm32_crypto_128_start_2:
 2261	cmp	r2, #2
 2262	blt	L_aes_decrypt_blocks_arm32_crypto_128_start_1
 2263	vld1.8	{q12-q13}, [r0]!
 2264	aesd.8	q12, q0
 2265	aesimc.8	q12, q12
 2266	aesd.8	q13, q0
 2267	aesimc.8	q13, q13
 2268	aesd.8	q12, q1
 2269	aesimc.8	q12, q12
 2270	aesd.8	q13, q1
 2271	aesimc.8	q13, q13
 2272	aesd.8	q12, q2
 2273	aesimc.8	q12, q12
 2274	aesd.8	q13, q2
 2275	aesimc.8	q13, q13
 2276	aesd.8	q12, q3
 2277	aesimc.8	q12, q12
 2278	aesd.8	q13, q3
 2279	aesimc.8	q13, q13
 2280	aesd.8	q12, q4
 2281	aesimc.8	q12, q12
 2282	aesd.8	q13, q4
 2283	aesimc.8	q13, q13
 2284	aesd.8	q12, q5
 2285	aesimc.8	q12, q12
 2286	aesd.8	q13, q5
 2287	aesimc.8	q13, q13
 2288	aesd.8	q12, q6
 2289	aesimc.8	q12, q12
 2290	aesd.8	q13, q6
 2291	aesimc.8	q13, q13
 2292	aesd.8	q12, q7
 2293	aesimc.8	q12, q12
 2294	aesd.8	q13, q7
 2295	aesimc.8	q13, q13
 2296	aesd.8	q12, q8
 2297	aesimc.8	q12, q12
 2298	aesd.8	q13, q8
 2299	aesimc.8	q13, q13
 2300	aesd.8	q12, q9
 2301	veor.32	q12, q12, q10
 2302	aesd.8	q13, q9
 2303	veor.32	q13, q13, q10
 2304	sub	r2, r2, #2
 2305	vst1.8	{q12-q13}, [r1]!
 2306L_aes_decrypt_blocks_arm32_crypto_128_start_1:
 2307	cmp	r2, #0
 2308	beq	L_aes_decrypt_blocks_arm32_crypto_128_done
 2309	vld1.8	{q12}, [r0]!
 2310	aesd.8	q12, q0
 2311	aesimc.8	q12, q12
 2312	aesd.8	q12, q1
 2313	aesimc.8	q12, q12
 2314	aesd.8	q12, q2
 2315	aesimc.8	q12, q12
 2316	aesd.8	q12, q3
 2317	aesimc.8	q12, q12
 2318	aesd.8	q12, q4
 2319	aesimc.8	q12, q12
 2320	aesd.8	q12, q5
 2321	aesimc.8	q12, q12
 2322	aesd.8	q12, q6
 2323	aesimc.8	q12, q12
 2324	aesd.8	q12, q7
 2325	aesimc.8	q12, q12
 2326	aesd.8	q12, q8
 2327	aesimc.8	q12, q12
 2328	aesd.8	q12, q9
 2329	veor.32	q12, q12, q10
 2330	vst1.8	{q12}, [r1]!
 2331L_aes_decrypt_blocks_arm32_crypto_128_done:
 2332#endif /* !NO_AES_128 */
 2333L_aes_decrypt_blocks_arm32_crypto_done:
 2334	vpop	{d8-d15}
 2335	bx	lr
 2336	.size	AES_decrypt_blocks_AARCH32,.-AES_decrypt_blocks_AARCH32
 2337#endif /* HAVE_AES_DECRYPT */
 2338#endif /* HAVE_AES_ECB */
 2339#ifdef HAVE_AES_CBC
 2340	.text
 2341	.align	4
 2342	.globl	AES_CBC_encrypt_AARCH32
 2343	.type	AES_CBC_encrypt_AARCH32, %function
 2344AES_CBC_encrypt_AARCH32:
 2345	push	{lr}
 2346	vpush	{d8-d15}
 2347	ldr	r12, [sp, #68]
 2348	ldr	lr, [sp, #72]
 2349	vldm.32	r12!, {q0-q7}
 2350	vld1.32	{q15}, [r3]
 2351	subs	lr, lr, #12
 2352	lsr	r2, r2, #4
 2353	blt	L_aes_cbc_encrypt_arm32_crypto_start_128
 2354	bgt	L_aes_cbc_encrypt_arm32_crypto_start_256
 2355	# AES_CBC_192
 2356#ifndef NO_AES_192
 2357	vld1.8	{q14}, [r0]!
 2358	vldm.32	r12!, {q8-q12}
 2359	cmp	r2, #1
 2360	beq	L_aes_cbc_encrypt_arm32_crypto_192_start_1
 2361	cmp	r2, #4
 2362	blt	L_aes_cbc_encrypt_arm32_crypto_192_start_2
 2363L_aes_cbc_encrypt_arm32_crypto_192_start_4:
 2364	veor.32	q15, q15, q14
 2365	aese.8	q15, q0
 2366	aesmc.8	q15, q15
 2367	aese.8	q15, q1
 2368	aesmc.8	q15, q15
 2369	aese.8	q15, q2
 2370	aesmc.8	q15, q15
 2371	aese.8	q15, q3
 2372	aesmc.8	q15, q15
 2373	aese.8	q15, q4
 2374	aesmc.8	q15, q15
 2375	aese.8	q15, q5
 2376	aesmc.8	q15, q15
 2377	aese.8	q15, q6
 2378	aesmc.8	q15, q15
 2379	aese.8	q15, q7
 2380	aesmc.8	q15, q15
 2381	aese.8	q15, q8
 2382	aesmc.8	q15, q15
 2383	aese.8	q15, q9
 2384	aesmc.8	q15, q15
 2385	aese.8	q15, q10
 2386	aesmc.8	q15, q15
 2387	vld1.8	{q14}, [r0]!
 2388	aese.8	q15, q11
 2389	veor.32	q15, q15, q12
 2390	vst1.8	{q15}, [r1]!
 2391	veor.32	q15, q15, q14
 2392	aese.8	q15, q0
 2393	aesmc.8	q15, q15
 2394	aese.8	q15, q1
 2395	aesmc.8	q15, q15
 2396	aese.8	q15, q2
 2397	aesmc.8	q15, q15
 2398	aese.8	q15, q3
 2399	aesmc.8	q15, q15
 2400	aese.8	q15, q4
 2401	aesmc.8	q15, q15
 2402	aese.8	q15, q5
 2403	aesmc.8	q15, q15
 2404	aese.8	q15, q6
 2405	aesmc.8	q15, q15
 2406	aese.8	q15, q7
 2407	aesmc.8	q15, q15
 2408	aese.8	q15, q8
 2409	aesmc.8	q15, q15
 2410	aese.8	q15, q9
 2411	aesmc.8	q15, q15
 2412	aese.8	q15, q10
 2413	aesmc.8	q15, q15
 2414	vld1.8	{q14}, [r0]!
 2415	aese.8	q15, q11
 2416	veor.32	q15, q15, q12
 2417	vst1.8	{q15}, [r1]!
 2418	veor.32	q15, q15, q14
 2419	aese.8	q15, q0
 2420	aesmc.8	q15, q15
 2421	aese.8	q15, q1
 2422	aesmc.8	q15, q15
 2423	aese.8	q15, q2
 2424	aesmc.8	q15, q15
 2425	aese.8	q15, q3
 2426	aesmc.8	q15, q15
 2427	aese.8	q15, q4
 2428	aesmc.8	q15, q15
 2429	aese.8	q15, q5
 2430	aesmc.8	q15, q15
 2431	aese.8	q15, q6
 2432	aesmc.8	q15, q15
 2433	aese.8	q15, q7
 2434	aesmc.8	q15, q15
 2435	aese.8	q15, q8
 2436	aesmc.8	q15, q15
 2437	aese.8	q15, q9
 2438	aesmc.8	q15, q15
 2439	aese.8	q15, q10
 2440	aesmc.8	q15, q15
 2441	vld1.8	{q14}, [r0]!
 2442	aese.8	q15, q11
 2443	veor.32	q15, q15, q12
 2444	vst1.8	{q15}, [r1]!
 2445	veor.32	q15, q15, q14
 2446	aese.8	q15, q0
 2447	aesmc.8	q15, q15
 2448	aese.8	q15, q1
 2449	aesmc.8	q15, q15
 2450	aese.8	q15, q2
 2451	aesmc.8	q15, q15
 2452	aese.8	q15, q3
 2453	aesmc.8	q15, q15
 2454	aese.8	q15, q4
 2455	aesmc.8	q15, q15
 2456	aese.8	q15, q5
 2457	aesmc.8	q15, q15
 2458	aese.8	q15, q6
 2459	aesmc.8	q15, q15
 2460	aese.8	q15, q7
 2461	aesmc.8	q15, q15
 2462	aese.8	q15, q8
 2463	aesmc.8	q15, q15
 2464	aese.8	q15, q9
 2465	aesmc.8	q15, q15
 2466	subs	r2, r2, #4
 2467	aese.8	q15, q10
 2468	aesmc.8	q15, q15
 2469	aese.8	q15, q11
 2470	veor.32	q15, q15, q12
 2471	beq	L_aes_cbc_encrypt_arm32_crypto_192_done
 2472	vld1.8	{q14}, [r0]!
 2473	cmp	r2, #4
 2474	vst1.8	{q15}, [r1]!
 2475	bge	L_aes_cbc_encrypt_arm32_crypto_192_start_4
 2476	cmp	r2, #2
 2477	blt	L_aes_cbc_encrypt_arm32_crypto_192_start_1
 2478L_aes_cbc_encrypt_arm32_crypto_192_start_2:
 2479	veor.32	q15, q15, q14
 2480	aese.8	q15, q0
 2481	aesmc.8	q15, q15
 2482	aese.8	q15, q1
 2483	aesmc.8	q15, q15
 2484	aese.8	q15, q2
 2485	aesmc.8	q15, q15
 2486	aese.8	q15, q3
 2487	aesmc.8	q15, q15
 2488	aese.8	q15, q4
 2489	aesmc.8	q15, q15
 2490	aese.8	q15, q5
 2491	aesmc.8	q15, q15
 2492	aese.8	q15, q6
 2493	aesmc.8	q15, q15
 2494	aese.8	q15, q7
 2495	aesmc.8	q15, q15
 2496	aese.8	q15, q8
 2497	aesmc.8	q15, q15
 2498	aese.8	q15, q9
 2499	aesmc.8	q15, q15
 2500	aese.8	q15, q10
 2501	aesmc.8	q15, q15
 2502	vld1.8	{q14}, [r0]!
 2503	aese.8	q15, q11
 2504	veor.32	q15, q15, q12
 2505	vst1.8	{q15}, [r1]!
 2506	veor.32	q15, q15, q14
 2507	aese.8	q15, q0
 2508	aesmc.8	q15, q15
 2509	aese.8	q15, q1
 2510	aesmc.8	q15, q15
 2511	aese.8	q15, q2
 2512	aesmc.8	q15, q15
 2513	aese.8	q15, q3
 2514	aesmc.8	q15, q15
 2515	aese.8	q15, q4
 2516	aesmc.8	q15, q15
 2517	aese.8	q15, q5
 2518	aesmc.8	q15, q15
 2519	aese.8	q15, q6
 2520	aesmc.8	q15, q15
 2521	aese.8	q15, q7
 2522	aesmc.8	q15, q15
 2523	aese.8	q15, q8
 2524	aesmc.8	q15, q15
 2525	aese.8	q15, q9
 2526	aesmc.8	q15, q15
 2527	subs	r2, r2, #2
 2528	aese.8	q15, q10
 2529	aesmc.8	q15, q15
 2530	aese.8	q15, q11
 2531	veor.32	q15, q15, q12
 2532	beq	L_aes_cbc_encrypt_arm32_crypto_192_done
 2533	vld1.8	{q14}, [r0]!
 2534	vst1.8	{q15}, [r1]!
 2535L_aes_cbc_encrypt_arm32_crypto_192_start_1:
 2536	veor.32	q15, q15, q14
 2537	aese.8	q15, q0
 2538	aesmc.8	q15, q15
 2539	aese.8	q15, q1
 2540	aesmc.8	q15, q15
 2541	aese.8	q15, q2
 2542	aesmc.8	q15, q15
 2543	aese.8	q15, q3
 2544	aesmc.8	q15, q15
 2545	aese.8	q15, q4
 2546	aesmc.8	q15, q15
 2547	aese.8	q15, q5
 2548	aesmc.8	q15, q15
 2549	aese.8	q15, q6
 2550	aesmc.8	q15, q15
 2551	aese.8	q15, q7
 2552	aesmc.8	q15, q15
 2553	aese.8	q15, q8
 2554	aesmc.8	q15, q15
 2555	aese.8	q15, q9
 2556	aesmc.8	q15, q15
 2557	aese.8	q15, q10
 2558	aesmc.8	q15, q15
 2559	aese.8	q15, q11
 2560	veor.32	q15, q15, q12
 2561L_aes_cbc_encrypt_arm32_crypto_192_done:
 2562	vst1.8	{q15}, [r1]!
 2563#endif /* !NO_AES_192 */
 2564	b	L_aes_cbc_encrypt_arm32_crypto_done
 2565	# AES_CBC_256
 2566L_aes_cbc_encrypt_arm32_crypto_start_256:
 2567#ifndef NO_AES_256
 2568	vld1.8	{q14}, [r0]!
 2569	vldm.32	r12!, {q8-q11}
 2570	add	r12, r12, #16
 2571	vld1.32	{q12-q13}, [r12]
 2572	sub	r12, r12, #16
 2573	cmp	r2, #1
 2574	beq	L_aes_cbc_encrypt_arm32_crypto_256_start_1
 2575	cmp	r2, #4
 2576	blt	L_aes_cbc_encrypt_arm32_crypto_256_start_2
 2577L_aes_cbc_encrypt_arm32_crypto_256_start_4:
 2578	veor.32	q15, q15, q14
 2579	aese.8	q15, q0
 2580	aesmc.8	q15, q15
 2581	aese.8	q15, q1
 2582	aesmc.8	q15, q15
 2583	aese.8	q15, q2
 2584	aesmc.8	q15, q15
 2585	aese.8	q15, q3
 2586	aesmc.8	q15, q15
 2587	aese.8	q15, q4
 2588	aesmc.8	q15, q15
 2589	aese.8	q15, q5
 2590	aesmc.8	q15, q15
 2591	aese.8	q15, q6
 2592	aesmc.8	q15, q15
 2593	aese.8	q15, q7
 2594	aesmc.8	q15, q15
 2595	aese.8	q15, q8
 2596	aesmc.8	q15, q15
 2597	aese.8	q15, q9
 2598	aesmc.8	q15, q15
 2599	aese.8	q15, q10
 2600	aesmc.8	q15, q15
 2601	vld1.32	{q14}, [r12]
 2602	aese.8	q15, q11
 2603	aesmc.8	q15, q15
 2604	aese.8	q15, q14
 2605	aesmc.8	q15, q15
 2606	vld1.8	{q14}, [r0]!
 2607	aese.8	q15, q12
 2608	veor.32	q15, q15, q13
 2609	vst1.8	{q15}, [r1]!
 2610	veor.32	q15, q15, q14
 2611	aese.8	q15, q0
 2612	aesmc.8	q15, q15
 2613	aese.8	q15, q1
 2614	aesmc.8	q15, q15
 2615	aese.8	q15, q2
 2616	aesmc.8	q15, q15
 2617	aese.8	q15, q3
 2618	aesmc.8	q15, q15
 2619	aese.8	q15, q4
 2620	aesmc.8	q15, q15
 2621	aese.8	q15, q5
 2622	aesmc.8	q15, q15
 2623	aese.8	q15, q6
 2624	aesmc.8	q15, q15
 2625	aese.8	q15, q7
 2626	aesmc.8	q15, q15
 2627	aese.8	q15, q8
 2628	aesmc.8	q15, q15
 2629	aese.8	q15, q9
 2630	aesmc.8	q15, q15
 2631	aese.8	q15, q10
 2632	aesmc.8	q15, q15
 2633	vld1.32	{q14}, [r12]
 2634	aese.8	q15, q11
 2635	aesmc.8	q15, q15
 2636	aese.8	q15, q14
 2637	aesmc.8	q15, q15
 2638	vld1.8	{q14}, [r0]!
 2639	aese.8	q15, q12
 2640	veor.32	q15, q15, q13
 2641	vst1.8	{q15}, [r1]!
 2642	veor.32	q15, q15, q14
 2643	aese.8	q15, q0
 2644	aesmc.8	q15, q15
 2645	aese.8	q15, q1
 2646	aesmc.8	q15, q15
 2647	aese.8	q15, q2
 2648	aesmc.8	q15, q15
 2649	aese.8	q15, q3
 2650	aesmc.8	q15, q15
 2651	aese.8	q15, q4
 2652	aesmc.8	q15, q15
 2653	aese.8	q15, q5
 2654	aesmc.8	q15, q15
 2655	aese.8	q15, q6
 2656	aesmc.8	q15, q15
 2657	aese.8	q15, q7
 2658	aesmc.8	q15, q15
 2659	aese.8	q15, q8
 2660	aesmc.8	q15, q15
 2661	aese.8	q15, q9
 2662	aesmc.8	q15, q15
 2663	aese.8	q15, q10
 2664	aesmc.8	q15, q15
 2665	vld1.32	{q14}, [r12]
 2666	aese.8	q15, q11
 2667	aesmc.8	q15, q15
 2668	aese.8	q15, q14
 2669	aesmc.8	q15, q15
 2670	vld1.8	{q14}, [r0]!
 2671	aese.8	q15, q12
 2672	veor.32	q15, q15, q13
 2673	vst1.8	{q15}, [r1]!
 2674	veor.32	q15, q15, q14
 2675	aese.8	q15, q0
 2676	aesmc.8	q15, q15
 2677	aese.8	q15, q1
 2678	aesmc.8	q15, q15
 2679	aese.8	q15, q2
 2680	aesmc.8	q15, q15
 2681	aese.8	q15, q3
 2682	aesmc.8	q15, q15
 2683	aese.8	q15, q4
 2684	aesmc.8	q15, q15
 2685	aese.8	q15, q5
 2686	aesmc.8	q15, q15
 2687	aese.8	q15, q6
 2688	aesmc.8	q15, q15
 2689	aese.8	q15, q7
 2690	aesmc.8	q15, q15
 2691	aese.8	q15, q8
 2692	aesmc.8	q15, q15
 2693	aese.8	q15, q9
 2694	aesmc.8	q15, q15
 2695	aese.8	q15, q10
 2696	aesmc.8	q15, q15
 2697	vld1.32	{q14}, [r12]
 2698	aese.8	q15, q11
 2699	aesmc.8	q15, q15
 2700	subs	r2, r2, #4
 2701	aese.8	q15, q14
 2702	aesmc.8	q15, q15
 2703	aese.8	q15, q12
 2704	veor.32	q15, q15, q13
 2705	beq	L_aes_cbc_encrypt_arm32_crypto_256_done
 2706	vld1.8	{q14}, [r0]!
 2707	cmp	r2, #4
 2708	vst1.8	{q15}, [r1]!
 2709	bge	L_aes_cbc_encrypt_arm32_crypto_256_start_4
 2710	cmp	r2, #2
 2711	blt	L_aes_cbc_encrypt_arm32_crypto_256_start_1
 2712L_aes_cbc_encrypt_arm32_crypto_256_start_2:
 2713	veor.32	q15, q15, q14
 2714	aese.8	q15, q0
 2715	aesmc.8	q15, q15
 2716	aese.8	q15, q1
 2717	aesmc.8	q15, q15
 2718	aese.8	q15, q2
 2719	aesmc.8	q15, q15
 2720	aese.8	q15, q3
 2721	aesmc.8	q15, q15
 2722	aese.8	q15, q4
 2723	aesmc.8	q15, q15
 2724	aese.8	q15, q5
 2725	aesmc.8	q15, q15
 2726	aese.8	q15, q6
 2727	aesmc.8	q15, q15
 2728	aese.8	q15, q7
 2729	aesmc.8	q15, q15
 2730	aese.8	q15, q8
 2731	aesmc.8	q15, q15
 2732	aese.8	q15, q9
 2733	aesmc.8	q15, q15
 2734	aese.8	q15, q10
 2735	aesmc.8	q15, q15
 2736	vld1.32	{q14}, [r12]
 2737	aese.8	q15, q11
 2738	aesmc.8	q15, q15
 2739	aese.8	q15, q14
 2740	aesmc.8	q15, q15
 2741	vld1.8	{q14}, [r0]!
 2742	aese.8	q15, q12
 2743	veor.32	q15, q15, q13
 2744	vst1.8	{q15}, [r1]!
 2745	veor.32	q15, q15, q14
 2746	aese.8	q15, q0
 2747	aesmc.8	q15, q15
 2748	aese.8	q15, q1
 2749	aesmc.8	q15, q15
 2750	aese.8	q15, q2
 2751	aesmc.8	q15, q15
 2752	aese.8	q15, q3
 2753	aesmc.8	q15, q15
 2754	aese.8	q15, q4
 2755	aesmc.8	q15, q15
 2756	aese.8	q15, q5
 2757	aesmc.8	q15, q15
 2758	aese.8	q15, q6
 2759	aesmc.8	q15, q15
 2760	aese.8	q15, q7
 2761	aesmc.8	q15, q15
 2762	aese.8	q15, q8
 2763	aesmc.8	q15, q15
 2764	aese.8	q15, q9
 2765	aesmc.8	q15, q15
 2766	aese.8	q15, q10
 2767	aesmc.8	q15, q15
 2768	vld1.32	{q14}, [r12]
 2769	aese.8	q15, q11
 2770	aesmc.8	q15, q15
 2771	subs	r2, r2, #2
 2772	aese.8	q15, q14
 2773	aesmc.8	q15, q15
 2774	aese.8	q15, q12
 2775	veor.32	q15, q15, q13
 2776	beq	L_aes_cbc_encrypt_arm32_crypto_256_done
 2777	vld1.8	{q14}, [r0]!
 2778	vst1.8	{q15}, [r1]!
 2779L_aes_cbc_encrypt_arm32_crypto_256_start_1:
 2780	veor.32	q15, q15, q14
 2781	aese.8	q15, q0
 2782	aesmc.8	q15, q15
 2783	aese.8	q15, q1
 2784	aesmc.8	q15, q15
 2785	aese.8	q15, q2
 2786	aesmc.8	q15, q15
 2787	aese.8	q15, q3
 2788	aesmc.8	q15, q15
 2789	aese.8	q15, q4
 2790	aesmc.8	q15, q15
 2791	aese.8	q15, q5
 2792	aesmc.8	q15, q15
 2793	aese.8	q15, q6
 2794	aesmc.8	q15, q15
 2795	aese.8	q15, q7
 2796	aesmc.8	q15, q15
 2797	aese.8	q15, q8
 2798	aesmc.8	q15, q15
 2799	aese.8	q15, q9
 2800	aesmc.8	q15, q15
 2801	aese.8	q15, q10
 2802	aesmc.8	q15, q15
 2803	vld1.32	{q14}, [r12]
 2804	aese.8	q15, q11
 2805	aesmc.8	q15, q15
 2806	aese.8	q15, q14
 2807	aesmc.8	q15, q15
 2808	aese.8	q15, q12
 2809	veor.32	q15, q15, q13
 2810L_aes_cbc_encrypt_arm32_crypto_256_done:
 2811	vst1.8	{q15}, [r1]!
 2812#endif /* !NO_AES_256 */
 2813	b	L_aes_cbc_encrypt_arm32_crypto_done
 2814	# AES_CBC_128
 2815L_aes_cbc_encrypt_arm32_crypto_start_128:
 2816#ifndef NO_AES_128
 2817	vld1.8	{q14}, [r0]!
 2818	vldm.32	r12!, {q8-q10}
 2819	cmp	r2, #1
 2820	beq	L_aes_cbc_encrypt_arm32_crypto_128_start_1
 2821	cmp	r2, #4
 2822	blt	L_aes_cbc_encrypt_arm32_crypto_128_start_2
 2823L_aes_cbc_encrypt_arm32_crypto_128_start_4:
 2824	veor.32	q15, q15, q14
 2825	aese.8	q15, q0
 2826	aesmc.8	q15, q15
 2827	aese.8	q15, q1
 2828	aesmc.8	q15, q15
 2829	aese.8	q15, q2
 2830	aesmc.8	q15, q15
 2831	aese.8	q15, q3
 2832	aesmc.8	q15, q15
 2833	aese.8	q15, q4
 2834	aesmc.8	q15, q15
 2835	aese.8	q15, q5
 2836	aesmc.8	q15, q15
 2837	aese.8	q15, q6
 2838	aesmc.8	q15, q15
 2839	aese.8	q15, q7
 2840	aesmc.8	q15, q15
 2841	aese.8	q15, q8
 2842	aesmc.8	q15, q15
 2843	vld1.8	{q14}, [r0]!
 2844	aese.8	q15, q9
 2845	veor.32	q15, q15, q10
 2846	vst1.8	{q15}, [r1]!
 2847	veor.32	q15, q15, q14
 2848	aese.8	q15, q0
 2849	aesmc.8	q15, q15
 2850	aese.8	q15, q1
 2851	aesmc.8	q15, q15
 2852	aese.8	q15, q2
 2853	aesmc.8	q15, q15
 2854	aese.8	q15, q3
 2855	aesmc.8	q15, q15
 2856	aese.8	q15, q4
 2857	aesmc.8	q15, q15
 2858	aese.8	q15, q5
 2859	aesmc.8	q15, q15
 2860	aese.8	q15, q6
 2861	aesmc.8	q15, q15
 2862	aese.8	q15, q7
 2863	aesmc.8	q15, q15
 2864	aese.8	q15, q8
 2865	aesmc.8	q15, q15
 2866	vld1.8	{q14}, [r0]!
 2867	aese.8	q15, q9
 2868	veor.32	q15, q15, q10
 2869	vst1.8	{q15}, [r1]!
 2870	veor.32	q15, q15, q14
 2871	aese.8	q15, q0
 2872	aesmc.8	q15, q15
 2873	aese.8	q15, q1
 2874	aesmc.8	q15, q15
 2875	aese.8	q15, q2
 2876	aesmc.8	q15, q15
 2877	aese.8	q15, q3
 2878	aesmc.8	q15, q15
 2879	aese.8	q15, q4
 2880	aesmc.8	q15, q15
 2881	aese.8	q15, q5
 2882	aesmc.8	q15, q15
 2883	aese.8	q15, q6
 2884	aesmc.8	q15, q15
 2885	aese.8	q15, q7
 2886	aesmc.8	q15, q15
 2887	aese.8	q15, q8
 2888	aesmc.8	q15, q15
 2889	vld1.8	{q14}, [r0]!
 2890	aese.8	q15, q9
 2891	veor.32	q15, q15, q10
 2892	vst1.8	{q15}, [r1]!
 2893	veor.32	q15, q15, q14
 2894	aese.8	q15, q0
 2895	aesmc.8	q15, q15
 2896	aese.8	q15, q1
 2897	aesmc.8	q15, q15
 2898	aese.8	q15, q2
 2899	aesmc.8	q15, q15
 2900	aese.8	q15, q3
 2901	aesmc.8	q15, q15
 2902	aese.8	q15, q4
 2903	aesmc.8	q15, q15
 2904	aese.8	q15, q5
 2905	aesmc.8	q15, q15
 2906	aese.8	q15, q6
 2907	aesmc.8	q15, q15
 2908	aese.8	q15, q7
 2909	aesmc.8	q15, q15
 2910	subs	r2, r2, #4
 2911	aese.8	q15, q8
 2912	aesmc.8	q15, q15
 2913	aese.8	q15, q9
 2914	veor.32	q15, q15, q10
 2915	beq	L_aes_cbc_encrypt_arm32_crypto_128_done
 2916	vld1.8	{q14}, [r0]!
 2917	cmp	r2, #4
 2918	vst1.8	{q15}, [r1]!
 2919	bge	L_aes_cbc_encrypt_arm32_crypto_128_start_4
 2920	cmp	r2, #2
 2921	blt	L_aes_cbc_encrypt_arm32_crypto_128_start_1
 2922L_aes_cbc_encrypt_arm32_crypto_128_start_2:
 2923	veor.32	q15, q15, q14
 2924	aese.8	q15, q0
 2925	aesmc.8	q15, q15
 2926	aese.8	q15, q1
 2927	aesmc.8	q15, q15
 2928	aese.8	q15, q2
 2929	aesmc.8	q15, q15
 2930	aese.8	q15, q3
 2931	aesmc.8	q15, q15
 2932	aese.8	q15, q4
 2933	aesmc.8	q15, q15
 2934	aese.8	q15, q5
 2935	aesmc.8	q15, q15
 2936	aese.8	q15, q6
 2937	aesmc.8	q15, q15
 2938	aese.8	q15, q7
 2939	aesmc.8	q15, q15
 2940	aese.8	q15, q8
 2941	aesmc.8	q15, q15
 2942	vld1.8	{q14}, [r0]!
 2943	aese.8	q15, q9
 2944	veor.32	q15, q15, q10
 2945	vst1.8	{q15}, [r1]!
 2946	veor.32	q15, q15, q14
 2947	aese.8	q15, q0
 2948	aesmc.8	q15, q15
 2949	aese.8	q15, q1
 2950	aesmc.8	q15, q15
 2951	aese.8	q15, q2
 2952	aesmc.8	q15, q15
 2953	aese.8	q15, q3
 2954	aesmc.8	q15, q15
 2955	aese.8	q15, q4
 2956	aesmc.8	q15, q15
 2957	aese.8	q15, q5
 2958	aesmc.8	q15, q15
 2959	aese.8	q15, q6
 2960	aesmc.8	q15, q15
 2961	aese.8	q15, q7
 2962	aesmc.8	q15, q15
 2963	subs	r2, r2, #2
 2964	aese.8	q15, q8
 2965	aesmc.8	q15, q15
 2966	aese.8	q15, q9
 2967	veor.32	q15, q15, q10
 2968	beq	L_aes_cbc_encrypt_arm32_crypto_128_done
 2969	vld1.8	{q14}, [r0]!
 2970	vst1.8	{q15}, [r1]!
 2971L_aes_cbc_encrypt_arm32_crypto_128_start_1:
 2972	veor.32	q15, q15, q14
 2973	aese.8	q15, q0
 2974	aesmc.8	q15, q15
 2975	aese.8	q15, q1
 2976	aesmc.8	q15, q15
 2977	aese.8	q15, q2
 2978	aesmc.8	q15, q15
 2979	aese.8	q15, q3
 2980	aesmc.8	q15, q15
 2981	aese.8	q15, q4
 2982	aesmc.8	q15, q15
 2983	aese.8	q15, q5
 2984	aesmc.8	q15, q15
 2985	aese.8	q15, q6
 2986	aesmc.8	q15, q15
 2987	aese.8	q15, q7
 2988	aesmc.8	q15, q15
 2989	aese.8	q15, q8
 2990	aesmc.8	q15, q15
 2991	aese.8	q15, q9
 2992	veor.32	q15, q15, q10
 2993L_aes_cbc_encrypt_arm32_crypto_128_done:
 2994	vst1.8	{q15}, [r1]!
 2995#endif /* !NO_AES_128 */
 2996L_aes_cbc_encrypt_arm32_crypto_done:
 2997	vst1.32	{q15}, [r3]
 2998	vpop	{d8-d15}
 2999	pop	{pc}
 3000	.size	AES_CBC_encrypt_AARCH32,.-AES_CBC_encrypt_AARCH32
 3001#ifdef HAVE_AES_DECRYPT
 3002	.text
 3003	.align	4
 3004	.globl	AES_CBC_decrypt_AARCH32
 3005	.type	AES_CBC_decrypt_AARCH32, %function
 3006AES_CBC_decrypt_AARCH32:
 3007	push	{lr}
 3008	vpush	{d8-d15}
 3009	ldr	r12, [sp, #68]
 3010	ldr	lr, [sp, #72]
 3011	vldm.32	r12!, {q0-q7}
 3012	vld1.32	{q13}, [r3]
 3013	lsr	r2, r2, #4
 3014	cmp	lr, #12
 3015	blt	L_aes_cbc_decrypt_blocks_arm32_crypto_start_128
 3016	bgt	L_aes_cbc_decrypt_blocks_arm32_crypto_start_256
 3017	# AES_CBC_192
 3018#ifndef NO_AES_192
 3019	vld1.32	{q8}, [r12]!
 3020	cmp	r2, #1
 3021	beq	L_aes_cbc_decrypt_blocks_arm32_crypto_192_start_1
 3022L_aes_cbc_decrypt_blocks_arm32_crypto_192_start_2:
 3023	vld1.8	{q14-q15}, [r0]!
 3024	vmov	q11, q13
 3025	vmov	q12, q14
 3026	vmov	q13, q15
 3027	aesd.8	q14, q0
 3028	aesimc.8	q14, q14
 3029	aesd.8	q15, q0
 3030	aesimc.8	q15, q15
 3031	aesd.8	q14, q1
 3032	aesimc.8	q14, q14
 3033	aesd.8	q15, q1
 3034	aesimc.8	q15, q15
 3035	aesd.8	q14, q2
 3036	aesimc.8	q14, q14
 3037	aesd.8	q15, q2
 3038	aesimc.8	q15, q15
 3039	aesd.8	q14, q3
 3040	aesimc.8	q14, q14
 3041	aesd.8	q15, q3
 3042	aesimc.8	q15, q15
 3043	aesd.8	q14, q4
 3044	aesimc.8	q14, q14
 3045	aesd.8	q15, q4
 3046	aesimc.8	q15, q15
 3047	aesd.8	q14, q5
 3048	aesimc.8	q14, q14
 3049	aesd.8	q15, q5
 3050	aesimc.8	q15, q15
 3051	aesd.8	q14, q6
 3052	aesimc.8	q14, q14
 3053	aesd.8	q15, q6
 3054	aesimc.8	q15, q15
 3055	aesd.8	q14, q7
 3056	aesimc.8	q14, q14
 3057	aesd.8	q15, q7
 3058	aesimc.8	q15, q15
 3059	vld1.32	{q9}, [r12]!
 3060	aesd.8	q14, q8
 3061	aesimc.8	q14, q14
 3062	aesd.8	q15, q8
 3063	aesimc.8	q15, q15
 3064	vld1.32	{q10}, [r12]!
 3065	aesd.8	q14, q9
 3066	aesimc.8	q14, q14
 3067	aesd.8	q15, q9
 3068	aesimc.8	q15, q15
 3069	vld1.32	{q9}, [r12]!
 3070	aesd.8	q14, q10
 3071	aesimc.8	q14, q14
 3072	aesd.8	q15, q10
 3073	aesimc.8	q15, q15
 3074	vld1.32	{q10}, [r12]
 3075	aesd.8	q14, q9
 3076	aesd.8	q15, q9
 3077	sub	r2, r2, #2
 3078	veor.32	q14, q14, q10
 3079	veor.32	q15, q15, q10
 3080	cmp	r2, #1
 3081	veor.32	q14, q14, q11
 3082	veor.32	q15, q15, q12
 3083	vst1.8	{q14-q15}, [r1]!
 3084	sub	r12, r12, #48
 3085	blt	L_aes_cbc_decrypt_blocks_arm32_crypto_192_done
 3086	bgt	L_aes_cbc_decrypt_blocks_arm32_crypto_192_start_2
 3087L_aes_cbc_decrypt_blocks_arm32_crypto_192_start_1:
 3088	vld1.8	{q14}, [r0]!
 3089	vmov	q11, q13
 3090	vmov	q13, q14
 3091	aesd.8	q14, q0
 3092	aesimc.8	q14, q14
 3093	aesd.8	q14, q1
 3094	aesimc.8	q14, q14
 3095	aesd.8	q14, q2
 3096	aesimc.8	q14, q14
 3097	aesd.8	q14, q3
 3098	aesimc.8	q14, q14
 3099	aesd.8	q14, q4
 3100	aesimc.8	q14, q14
 3101	aesd.8	q14, q5
 3102	aesimc.8	q14, q14
 3103	aesd.8	q14, q6
 3104	aesimc.8	q14, q14
 3105	aesd.8	q14, q7
 3106	aesimc.8	q14, q14
 3107	vld1.32	{q9}, [r12]!
 3108	aesd.8	q14, q8
 3109	aesimc.8	q14, q14
 3110	vld1.32	{q10}, [r12]!
 3111	aesd.8	q14, q9
 3112	aesimc.8	q14, q14
 3113	vld1.32	{q9}, [r12]!
 3114	aesd.8	q14, q10
 3115	aesimc.8	q14, q14
 3116	vld1.32	{q10}, [r12]
 3117	aesd.8	q14, q9
 3118	veor.32	q14, q14, q10
 3119	veor.32	q14, q14, q11
 3120	vst1.8	{q14}, [r1]!
 3121L_aes_cbc_decrypt_blocks_arm32_crypto_192_done:
 3122#endif /* !NO_AES_192 */
 3123	b	L_aes_cbc_decrypt_blocks_arm32_crypto_done
 3124	# AES_CBC_256
 3125L_aes_cbc_decrypt_blocks_arm32_crypto_start_256:
 3126#ifndef NO_AES_256
 3127	vld1.32	{q8}, [r12]!
 3128	cmp	r2, #1
 3129	beq	L_aes_cbc_decrypt_blocks_arm32_crypto_256_start_1
 3130L_aes_cbc_decrypt_blocks_arm32_crypto_256_start_2:
 3131	vld1.8	{q14-q15}, [r0]!
 3132	vmov	q11, q13
 3133	vmov	q12, q14
 3134	vmov	q13, q15
 3135	aesd.8	q14, q0
 3136	aesimc.8	q14, q14
 3137	aesd.8	q15, q0
 3138	aesimc.8	q15, q15
 3139	aesd.8	q14, q1
 3140	aesimc.8	q14, q14
 3141	aesd.8	q15, q1
 3142	aesimc.8	q15, q15
 3143	aesd.8	q14, q2
 3144	aesimc.8	q14, q14
 3145	aesd.8	q15, q2
 3146	aesimc.8	q15, q15
 3147	aesd.8	q14, q3
 3148	aesimc.8	q14, q14
 3149	aesd.8	q15, q3
 3150	aesimc.8	q15, q15
 3151	aesd.8	q14, q4
 3152	aesimc.8	q14, q14
 3153	aesd.8	q15, q4
 3154	aesimc.8	q15, q15
 3155	aesd.8	q14, q5
 3156	aesimc.8	q14, q14
 3157	aesd.8	q15, q5
 3158	aesimc.8	q15, q15
 3159	aesd.8	q14, q6
 3160	aesimc.8	q14, q14
 3161	aesd.8	q15, q6
 3162	aesimc.8	q15, q15
 3163	aesd.8	q14, q7
 3164	aesimc.8	q14, q14
 3165	aesd.8	q15, q7
 3166	aesimc.8	q15, q15
 3167	vld1.32	{q9}, [r12]!
 3168	aesd.8	q14, q8
 3169	aesimc.8	q14, q14
 3170	aesd.8	q15, q8
 3171	aesimc.8	q15, q15
 3172	vld1.32	{q10}, [r12]!
 3173	aesd.8	q14, q9
 3174	aesimc.8	q14, q14
 3175	aesd.8	q15, q9
 3176	aesimc.8	q15, q15
 3177	vld1.32	{q9}, [r12]!
 3178	aesd.8	q14, q10
 3179	aesimc.8	q14, q14
 3180	aesd.8	q15, q10
 3181	aesimc.8	q15, q15
 3182	vld1.32	{q10}, [r12]!
 3183	aesd.8	q14, q9
 3184	aesimc.8	q14, q14
 3185	aesd.8	q15, q9
 3186	aesimc.8	q15, q15
 3187	vld1.32	{q9}, [r12]!
 3188	aesd.8	q14, q10
 3189	aesimc.8	q14, q14
 3190	aesd.8	q15, q10
 3191	aesimc.8	q15, q15
 3192	vld1.32	{q10}, [r12]
 3193	aesd.8	q14, q9
 3194	aesd.8	q15, q9
 3195	sub	r2, r2, #2
 3196	veor.32	q14, q14, q10
 3197	veor.32	q15, q15, q10
 3198	cmp	r2, #1
 3199	veor.32	q14, q14, q11
 3200	veor.32	q15, q15, q12
 3201	vst1.8	{q14-q15}, [r1]!
 3202	sub	r12, r12, #0x50
 3203	blt	L_aes_cbc_decrypt_blocks_arm32_crypto_256_done
 3204	bgt	L_aes_cbc_decrypt_blocks_arm32_crypto_256_start_2
 3205L_aes_cbc_decrypt_blocks_arm32_crypto_256_start_1:
 3206	vld1.8	{q14}, [r0]!
 3207	vmov	q11, q13
 3208	vmov	q13, q14
 3209	aesd.8	q14, q0
 3210	aesimc.8	q14, q14
 3211	aesd.8	q14, q1
 3212	aesimc.8	q14, q14
 3213	aesd.8	q14, q2
 3214	aesimc.8	q14, q14
 3215	aesd.8	q14, q3
 3216	aesimc.8	q14, q14
 3217	aesd.8	q14, q4
 3218	aesimc.8	q14, q14
 3219	aesd.8	q14, q5
 3220	aesimc.8	q14, q14
 3221	aesd.8	q14, q6
 3222	aesimc.8	q14, q14
 3223	aesd.8	q14, q7
 3224	aesimc.8	q14, q14
 3225	vld1.32	{q9}, [r12]!
 3226	aesd.8	q14, q8
 3227	aesimc.8	q14, q14
 3228	vld1.32	{q10}, [r12]!
 3229	aesd.8	q14, q9
 3230	aesimc.8	q14, q14
 3231	vld1.32	{q9}, [r12]!
 3232	aesd.8	q14, q10
 3233	aesimc.8	q14, q14
 3234	vld1.32	{q10}, [r12]!
 3235	aesd.8	q14, q9
 3236	aesimc.8	q14, q14
 3237	vld1.32	{q9}, [r12]!
 3238	aesd.8	q14, q10
 3239	aesimc.8	q14, q14
 3240	vld1.32	{q10}, [r12]
 3241	aesd.8	q14, q9
 3242	veor.32	q14, q14, q10
 3243	veor.32	q14, q14, q11
 3244	vst1.8	{q14}, [r1]!
 3245L_aes_cbc_decrypt_blocks_arm32_crypto_256_done:
 3246#endif /* !NO_AES_256 */
 3247	b	L_aes_cbc_decrypt_blocks_arm32_crypto_done
 3248	# AES_CBC_128
 3249L_aes_cbc_decrypt_blocks_arm32_crypto_start_128:
 3250#ifndef NO_AES_128
 3251	vldm.32	r12!, {q8-q10}
 3252	cmp	r2, #1
 3253	beq	L_aes_cbc_decrypt_blocks_arm32_crypto_128_start_1
 3254L_aes_cbc_decrypt_blocks_arm32_crypto_128_start_2:
 3255	vld1.8	{q14-q15}, [r0]!
 3256	vmov	q11, q13
 3257	vmov	q12, q14
 3258	vmov	q13, q15
 3259	aesd.8	q14, q0
 3260	aesimc.8	q14, q14
 3261	aesd.8	q15, q0
 3262	aesimc.8	q15, q15
 3263	aesd.8	q14, q1
 3264	aesimc.8	q14, q14
 3265	aesd.8	q15, q1
 3266	aesimc.8	q15, q15
 3267	aesd.8	q14, q2
 3268	aesimc.8	q14, q14
 3269	aesd.8	q15, q2
 3270	aesimc.8	q15, q15
 3271	aesd.8	q14, q3
 3272	aesimc.8	q14, q14
 3273	aesd.8	q15, q3
 3274	aesimc.8	q15, q15
 3275	aesd.8	q14, q4
 3276	aesimc.8	q14, q14
 3277	aesd.8	q15, q4
 3278	aesimc.8	q15, q15
 3279	aesd.8	q14, q5
 3280	aesimc.8	q14, q14
 3281	aesd.8	q15, q5
 3282	aesimc.8	q15, q15
 3283	aesd.8	q14, q6
 3284	aesimc.8	q14, q14
 3285	aesd.8	q15, q6
 3286	aesimc.8	q15, q15
 3287	aesd.8	q14, q7
 3288	aesimc.8	q14, q14
 3289	aesd.8	q15, q7
 3290	aesimc.8	q15, q15
 3291	aesd.8	q14, q8
 3292	aesimc.8	q14, q14
 3293	aesd.8	q15, q8
 3294	aesimc.8	q15, q15
 3295	aesd.8	q14, q9
 3296	aesd.8	q15, q9
 3297	sub	r2, r2, #2
 3298	veor.32	q14, q14, q10
 3299	veor.32	q15, q15, q10
 3300	cmp	r2, #1
 3301	veor.32	q14, q14, q11
 3302	veor.32	q15, q15, q12
 3303	vst1.8	{q14-q15}, [r1]!
 3304	blt	L_aes_cbc_decrypt_blocks_arm32_crypto_128_done
 3305	bgt	L_aes_cbc_decrypt_blocks_arm32_crypto_128_start_2
 3306L_aes_cbc_decrypt_blocks_arm32_crypto_128_start_1:
 3307	vld1.8	{q14}, [r0]!
 3308	vmov	q11, q13
 3309	vmov	q13, q14
 3310	aesd.8	q14, q0
 3311	aesimc.8	q14, q14
 3312	aesd.8	q14, q1
 3313	aesimc.8	q14, q14
 3314	aesd.8	q14, q2
 3315	aesimc.8	q14, q14
 3316	aesd.8	q14, q3
 3317	aesimc.8	q14, q14
 3318	aesd.8	q14, q4
 3319	aesimc.8	q14, q14
 3320	aesd.8	q14, q5
 3321	aesimc.8	q14, q14
 3322	aesd.8	q14, q6
 3323	aesimc.8	q14, q14
 3324	aesd.8	q14, q7
 3325	aesimc.8	q14, q14
 3326	aesd.8	q14, q8
 3327	aesimc.8	q14, q14
 3328	aesd.8	q14, q9
 3329	veor.32	q14, q14, q10
 3330	veor.32	q14, q14, q11
 3331	vst1.8	{q14}, [r1]!
 3332L_aes_cbc_decrypt_blocks_arm32_crypto_128_done:
 3333#endif /* !NO_AES_128 */
 3334L_aes_cbc_decrypt_blocks_arm32_crypto_done:
 3335	vst1.32	{q13}, [r3]
 3336	vpop	{d8-d15}
 3337	pop	{pc}
 3338	.size	AES_CBC_decrypt_AARCH32,.-AES_CBC_decrypt_AARCH32
 3339#endif /* HAVE_AES_DECRYPT */
 3340#endif /* HAVE_AES_CBC */
 3341#ifdef WOLFSSL_AES_COUNTER
 3342	.text
 3343	.align	4
 3344	.globl	AES_CTR_encrypt_AARCH32
 3345	.type	AES_CTR_encrypt_AARCH32, %function
 3346AES_CTR_encrypt_AARCH32:
 3347	push	{r4, r5, r6, r7, r8, lr}
 3348	vpush	{d8-d15}
 3349	vld1.32	{q0}, [r3]
 3350	ldr	r12, [sp, #88]
 3351	vrev32.8	q2, q0
 3352	lsr	r4, r2, #4
 3353	vmov	r5, r6, d4
 3354	and	r2, r2, #15
 3355	vmov	r7, r8, d5
 3356	vldm.32	r12!, {q3-q10}
 3357	ldr	lr, [sp, #100]
 3358	cmp	lr, #12
 3359	blt	L_aes_ctr_encrypt_arm32_crypto_start_128
 3360	bgt	L_aes_ctr_encrypt_arm32_crypto_start_256
 3361	# AES_CTR_192
 3362#ifndef NO_AES_192
 3363	vldm.32	r12!, {q11-q13}
 3364	mov	lr, #1
 3365	cmp	r4, #1
 3366	blt	L_aes_ctr_encrypt_arm32_crypto_192_done
 3367	beq	L_aes_ctr_encrypt_arm32_crypto_192_start_1
 3368	adds	r8, r8, #1
 3369	adcs	r7, r7, #0
 3370	adcs	r6, r6, #0
 3371	adc	r5, r5, #0
 3372	vmov	d3, r7, r8
 3373	vmov	d2, r5, r6
 3374	vrev32.8	q1, q1
 3375L_aes_ctr_encrypt_arm32_crypto_192_start_2:
 3376	aese.8	q0, q3
 3377	aesmc.8	q0, q0
 3378	aese.8	q1, q3
 3379	aesmc.8	q1, q1
 3380	adds	r8, r8, #1
 3381	aese.8	q0, q4
 3382	aesmc.8	q0, q0
 3383	aese.8	q1, q4
 3384	aesmc.8	q1, q1
 3385	adcs	r7, r7, #0
 3386	aese.8	q0, q5
 3387	aesmc.8	q0, q0
 3388	aese.8	q1, q5
 3389	aesmc.8	q1, q1
 3390	adcs	r6, r6, #0
 3391	aese.8	q0, q6
 3392	aesmc.8	q0, q0
 3393	aese.8	q1, q6
 3394	aesmc.8	q1, q1
 3395	adc	r5, r5, #0
 3396	aese.8	q0, q7
 3397	aesmc.8	q0, q0
 3398	aese.8	q1, q7
 3399	aesmc.8	q1, q1
 3400	aese.8	q0, q8
 3401	aesmc.8	q0, q0
 3402	aese.8	q1, q8
 3403	aesmc.8	q1, q1
 3404	aese.8	q0, q9
 3405	aesmc.8	q0, q0
 3406	aese.8	q1, q9
 3407	aesmc.8	q1, q1
 3408	aese.8	q0, q10
 3409	aesmc.8	q0, q0
 3410	aese.8	q1, q10
 3411	aesmc.8	q1, q1
 3412	aese.8	q0, q11
 3413	aesmc.8	q0, q0
 3414	aese.8	q1, q11
 3415	aesmc.8	q1, q1
 3416	aese.8	q0, q12
 3417	aesmc.8	q0, q0
 3418	aese.8	q1, q12
 3419	aesmc.8	q1, q1
 3420	vld1.32	{q14}, [r12]!
 3421	vmov	d5, r7, r8
 3422	aese.8	q0, q13
 3423	aesmc.8	q0, q0
 3424	aese.8	q1, q13
 3425	aesmc.8	q1, q1
 3426	vld1.32	{q15}, [r12]
 3427	vmov	d4, r5, r6
 3428	aese.8	q0, q14
 3429	aese.8	q1, q14
 3430	sub	r4, r4, #2
 3431	veor.32	q0, q0, q15
 3432	veor.32	q1, q1, q15
 3433	adds	r8, r8, #1
 3434	vld1.8	{q14-q15}, [r0]!
 3435	adcs	r7, r7, #0
 3436	sub	r12, r12, #16
 3437	veor.32	q14, q14, q0
 3438	veor.32	q15, q15, q1
 3439	adcs	r6, r6, #0
 3440	vrev32.8	q0, q2
 3441	adc	r5, r5, #0
 3442	vmov	d2, r5, r6
 3443	vmov	d3, r7, r8
 3444	cmp	r4, #1
 3445	vst1.8	{q14-q15}, [r1]!
 3446	vrev32.8	q1, q1
 3447	bgt	L_aes_ctr_encrypt_arm32_crypto_192_start_2
 3448	mov	lr, #0
 3449	blt	L_aes_ctr_encrypt_arm32_crypto_192_done
 3450L_aes_ctr_encrypt_arm32_crypto_192_start_1:
 3451	aese.8	q0, q3
 3452	aesmc.8	q0, q0
 3453	adds	r8, r8, lr
 3454	aese.8	q0, q4
 3455	aesmc.8	q0, q0
 3456	adcs	r7, r7, #0
 3457	aese.8	q0, q5
 3458	aesmc.8	q0, q0
 3459	adcs	r6, r6, #0
 3460	aese.8	q0, q6
 3461	aesmc.8	q0, q0
 3462	adc	r5, r5, #0
 3463	aese.8	q0, q7
 3464	aesmc.8	q0, q0
 3465	vmov	d5, r7, r8
 3466	aese.8	q0, q8
 3467	aesmc.8	q0, q0
 3468	vmov	d4, r5, r6
 3469	aese.8	q0, q9
 3470	aesmc.8	q0, q0
 3471	aese.8	q0, q10
 3472	aesmc.8	q0, q0
 3473	aese.8	q0, q11
 3474	aesmc.8	q0, q0
 3475	aese.8	q0, q12
 3476	aesmc.8	q0, q0
 3477	vld1.32	{q14}, [r12]!
 3478	aese.8	q0, q13
 3479	aesmc.8	q0, q0
 3480	vld1.32	{q15}, [r12]
 3481	aese.8	q0, q14
 3482	vld1.8	{q14}, [r0]!
 3483	veor.32	q0, q0, q15
 3484	veor.32	q14, q14, q0
 3485	sub	r12, r12, #16
 3486	vst1.8	{q14}, [r1]!
 3487	mov	lr, #1
 3488	vrev32.8	q0, q2
 3489L_aes_ctr_encrypt_arm32_crypto_192_done:
 3490	cmp	r2, #0
 3491	beq	L_aes_ctr_encrypt_arm32_crypto_192_partial_done
 3492	ldr	r4, [sp, #96]
 3493	aese.8	q0, q3
 3494	aesmc.8	q0, q0
 3495	adds	r8, r8, lr
 3496	aese.8	q0, q4
 3497	aesmc.8	q0, q0
 3498	adcs	r7, r7, #0
 3499	aese.8	q0, q5
 3500	aesmc.8	q0, q0
 3501	adcs	r6, r6, #0
 3502	aese.8	q0, q6
 3503	aesmc.8	q0, q0
 3504	adc	r5, r5, #0
 3505	aese.8	q0, q7
 3506	aesmc.8	q0, q0
 3507	vmov	d5, r7, r8
 3508	aese.8	q0, q8
 3509	aesmc.8	q0, q0
 3510	vmov	d4, r5, r6
 3511	aese.8	q0, q9
 3512	aesmc.8	q0, q0
 3513	aese.8	q0, q10
 3514	aesmc.8	q0, q0
 3515	aese.8	q0, q11
 3516	aesmc.8	q0, q0
 3517	aese.8	q0, q12
 3518	aesmc.8	q0, q0
 3519	vld1.32	{q14}, [r12]!
 3520	aese.8	q0, q13
 3521	aesmc.8	q0, q0
 3522	vld1.32	{q15}, [r12]
 3523	ldr	lr, [sp, #92]
 3524	aese.8	q0, q14
 3525	veor.32	q0, q0, q15
 3526	vst1.32	{q0}, [lr]
 3527	vmov	q0, q2
 3528	mov	r5, #16
 3529	sub	r5, r5, r2
 3530L_aes_ctr_encrypt_arm32_crypto_192_start_byte:
 3531	ldrb	r7, [lr], #1
 3532	ldrb	r8, [r0], #1
 3533	eor	r7, r7, r8
 3534	subs	r2, r2, #1
 3535	strb	r7, [r1], #1
 3536	bgt	L_aes_ctr_encrypt_arm32_crypto_192_start_byte
 3537	vrev32.8	q0, q2
 3538	str	r5, [r4]
 3539L_aes_ctr_encrypt_arm32_crypto_192_partial_done:
 3540#endif /* !NO_AES_192 */
 3541	b	L_aes_ctr_encrypt_arm32_crypto_done
 3542	# AES_CTR_256
 3543L_aes_ctr_encrypt_arm32_crypto_start_256:
 3544#ifndef NO_AES_256
 3545	vldm.32	r12!, {q11-q13}
 3546	mov	lr, #1
 3547	cmp	r4, #1
 3548	blt	L_aes_ctr_encrypt_arm32_crypto_256_done
 3549	beq	L_aes_ctr_encrypt_arm32_crypto_256_start_1
 3550	adds	r8, r8, #1
 3551	adcs	r7, r7, #0
 3552	adcs	r6, r6, #0
 3553	adc	r5, r5, #0
 3554	vmov	d3, r7, r8
 3555	vmov	d2, r5, r6
 3556	vrev32.8	q1, q1
 3557L_aes_ctr_encrypt_arm32_crypto_256_start_2:
 3558	aese.8	q0, q3
 3559	aesmc.8	q0, q0
 3560	aese.8	q1, q3
 3561	aesmc.8	q1, q1
 3562	adds	r8, r8, #1
 3563	aese.8	q0, q4
 3564	aesmc.8	q0, q0
 3565	aese.8	q1, q4
 3566	aesmc.8	q1, q1
 3567	adcs	r7, r7, #0
 3568	aese.8	q0, q5
 3569	aesmc.8	q0, q0
 3570	aese.8	q1, q5
 3571	aesmc.8	q1, q1
 3572	adcs	r6, r6, #0
 3573	aese.8	q0, q6
 3574	aesmc.8	q0, q0
 3575	aese.8	q1, q6
 3576	aesmc.8	q1, q1
 3577	adc	r5, r5, #0
 3578	aese.8	q0, q7
 3579	aesmc.8	q0, q0
 3580	aese.8	q1, q7
 3581	aesmc.8	q1, q1
 3582	aese.8	q0, q8
 3583	aesmc.8	q0, q0
 3584	aese.8	q1, q8
 3585	aesmc.8	q1, q1
 3586	aese.8	q0, q9
 3587	aesmc.8	q0, q0
 3588	aese.8	q1, q9
 3589	aesmc.8	q1, q1
 3590	aese.8	q0, q10
 3591	aesmc.8	q0, q0
 3592	aese.8	q1, q10
 3593	aesmc.8	q1, q1
 3594	aese.8	q0, q11
 3595	aesmc.8	q0, q0
 3596	aese.8	q1, q11
 3597	aesmc.8	q1, q1
 3598	aese.8	q0, q12
 3599	aesmc.8	q0, q0
 3600	aese.8	q1, q12
 3601	aesmc.8	q1, q1
 3602	vld1.32	{q14}, [r12]!
 3603	vmov	d5, r7, r8
 3604	aese.8	q0, q13
 3605	aesmc.8	q0, q0
 3606	aese.8	q1, q13
 3607	aesmc.8	q1, q1
 3608	vld1.32	{q15}, [r12]!
 3609	vmov	d4, r5, r6
 3610	aese.8	q0, q14
 3611	aesmc.8	q0, q0
 3612	aese.8	q1, q14
 3613	aesmc.8	q1, q1
 3614	vld1.32	{q14}, [r12]!
 3615	adds	r8, r8, #1
 3616	aese.8	q0, q15
 3617	aesmc.8	q0, q0
 3618	aese.8	q1, q15
 3619	aesmc.8	q1, q1
 3620	vld1.32	{q15}, [r12]
 3621	adcs	r7, r7, #0
 3622	aese.8	q0, q14
 3623	aese.8	q1, q14
 3624	sub	r4, r4, #2
 3625	veor.32	q0, q0, q15
 3626	veor.32	q1, q1, q15
 3627	adcs	r6, r6, #0
 3628	vld1.8	{q14-q15}, [r0]!
 3629	sub	r12, r12, #48
 3630	veor.32	q14, q14, q0
 3631	veor.32	q15, q15, q1
 3632	adc	r5, r5, #0
 3633	vrev32.8	q0, q2
 3634	vmov	d2, r5, r6
 3635	vmov	d3, r7, r8
 3636	cmp	r4, #1
 3637	vst1.8	{q14-q15}, [r1]!
 3638	vrev32.8	q1, q1
 3639	bgt	L_aes_ctr_encrypt_arm32_crypto_256_start_2
 3640	mov	lr, #0
 3641	blt	L_aes_ctr_encrypt_arm32_crypto_256_done
 3642L_aes_ctr_encrypt_arm32_crypto_256_start_1:
 3643	aese.8	q0, q3
 3644	aesmc.8	q0, q0
 3645	adds	r8, r8, lr
 3646	aese.8	q0, q4
 3647	aesmc.8	q0, q0
 3648	adcs	r7, r7, #0
 3649	aese.8	q0, q5
 3650	aesmc.8	q0, q0
 3651	adcs	r6, r6, #0
 3652	aese.8	q0, q6
 3653	aesmc.8	q0, q0
 3654	adc	r5, r5, #0
 3655	aese.8	q0, q7
 3656	aesmc.8	q0, q0
 3657	vmov	d5, r7, r8
 3658	aese.8	q0, q8
 3659	aesmc.8	q0, q0
 3660	vmov	d4, r5, r6
 3661	aese.8	q0, q9
 3662	aesmc.8	q0, q0
 3663	aese.8	q0, q10
 3664	aesmc.8	q0, q0
 3665	aese.8	q0, q11
 3666	aesmc.8	q0, q0
 3667	aese.8	q0, q12
 3668	aesmc.8	q0, q0
 3669	vld1.32	{q14}, [r12]!
 3670	aese.8	q0, q13
 3671	aesmc.8	q0, q0
 3672	vld1.32	{q15}, [r12]!
 3673	aese.8	q0, q14
 3674	aesmc.8	q0, q0
 3675	vld1.32	{q14}, [r12]!
 3676	aese.8	q0, q15
 3677	aesmc.8	q0, q0
 3678	vld1.32	{q15}, [r12]
 3679	aese.8	q0, q14
 3680	vld1.8	{q14}, [r0]!
 3681	veor.32	q0, q0, q15
 3682	veor.32	q14, q14, q0
 3683	sub	r12, r12, #48
 3684	vst1.8	{q14}, [r1]!
 3685	mov	lr, #1
 3686	vrev32.8	q0, q2
 3687L_aes_ctr_encrypt_arm32_crypto_256_done:
 3688	cmp	r2, #0
 3689	beq	L_aes_ctr_encrypt_arm32_crypto_256_partial_done
 3690	ldr	r4, [sp, #96]
 3691	aese.8	q0, q3
 3692	aesmc.8	q0, q0
 3693	adds	r8, r8, lr
 3694	aese.8	q0, q4
 3695	aesmc.8	q0, q0
 3696	adcs	r7, r7, #0
 3697	aese.8	q0, q5
 3698	aesmc.8	q0, q0
 3699	adcs	r6, r6, #0
 3700	aese.8	q0, q6
 3701	aesmc.8	q0, q0
 3702	adc	r5, r5, #0
 3703	aese.8	q0, q7
 3704	aesmc.8	q0, q0
 3705	vmov	d5, r7, r8
 3706	aese.8	q0, q8
 3707	aesmc.8	q0, q0
 3708	vmov	d4, r5, r6
 3709	aese.8	q0, q9
 3710	aesmc.8	q0, q0
 3711	aese.8	q0, q10
 3712	aesmc.8	q0, q0
 3713	aese.8	q0, q11
 3714	aesmc.8	q0, q0
 3715	aese.8	q0, q12
 3716	aesmc.8	q0, q0
 3717	vld1.32	{q14}, [r12]!
 3718	aese.8	q0, q13
 3719	aesmc.8	q0, q0
 3720	vld1.32	{q15}, [r12]!
 3721	aese.8	q0, q14
 3722	aesmc.8	q0, q0
 3723	vld1.32	{q14}, [r12]!
 3724	aese.8	q0, q15
 3725	aesmc.8	q0, q0
 3726	vld1.32	{q15}, [r12]
 3727	ldr	lr, [sp, #92]
 3728	aese.8	q0, q14
 3729	veor.32	q0, q0, q15
 3730	vst1.32	{q0}, [lr]
 3731	vmov	q0, q2
 3732	mov	r5, #16
 3733	sub	r5, r5, r2
 3734L_aes_ctr_encrypt_arm32_crypto_256_start_byte:
 3735	ldrb	r7, [lr], #1
 3736	ldrb	r8, [r0], #1
 3737	eor	r7, r7, r8
 3738	subs	r2, r2, #1
 3739	strb	r7, [r1], #1
 3740	bgt	L_aes_ctr_encrypt_arm32_crypto_256_start_byte
 3741	vrev32.8	q0, q2
 3742	str	r5, [r4]
 3743L_aes_ctr_encrypt_arm32_crypto_256_partial_done:
 3744#endif /* !NO_AES_256 */
 3745	b	L_aes_ctr_encrypt_arm32_crypto_done
 3746	# AES_CTR_128
 3747L_aes_ctr_encrypt_arm32_crypto_start_128:
 3748#ifndef NO_AES_128
 3749	vldm.32	r12!, {q11-q13}
 3750	mov	lr, #1
 3751	cmp	r4, #1
 3752	blt	L_aes_ctr_encrypt_arm32_crypto_128_done
 3753	beq	L_aes_ctr_encrypt_arm32_crypto_128_start_1
 3754	adds	r8, r8, #1
 3755	adcs	r7, r7, #0
 3756	adcs	r6, r6, #0
 3757	adc	r5, r5, #0
 3758	vmov	d3, r7, r8
 3759	vmov	d2, r5, r6
 3760	vrev32.8	q1, q1
 3761L_aes_ctr_encrypt_arm32_crypto_128_start_2:
 3762	aese.8	q0, q3
 3763	aesmc.8	q0, q0
 3764	aese.8	q1, q3
 3765	aesmc.8	q1, q1
 3766	adds	r8, r8, #1
 3767	aese.8	q0, q4
 3768	aesmc.8	q0, q0
 3769	aese.8	q1, q4
 3770	aesmc.8	q1, q1
 3771	adcs	r7, r7, #0
 3772	aese.8	q0, q5
 3773	aesmc.8	q0, q0
 3774	aese.8	q1, q5
 3775	aesmc.8	q1, q1
 3776	adcs	r6, r6, #0
 3777	aese.8	q0, q6
 3778	aesmc.8	q0, q0
 3779	aese.8	q1, q6
 3780	aesmc.8	q1, q1
 3781	adc	r5, r5, #0
 3782	aese.8	q0, q7
 3783	aesmc.8	q0, q0
 3784	aese.8	q1, q7
 3785	aesmc.8	q1, q1
 3786	vmov	d5, r7, r8
 3787	aese.8	q0, q8
 3788	aesmc.8	q0, q0
 3789	aese.8	q1, q8
 3790	aesmc.8	q1, q1
 3791	vmov	d4, r5, r6
 3792	aese.8	q0, q9
 3793	aesmc.8	q0, q0
 3794	aese.8	q1, q9
 3795	aesmc.8	q1, q1
 3796	adds	r8, r8, #1
 3797	aese.8	q0, q10
 3798	aesmc.8	q0, q0
 3799	aese.8	q1, q10
 3800	aesmc.8	q1, q1
 3801	adcs	r7, r7, #0
 3802	aese.8	q0, q11
 3803	aesmc.8	q0, q0
 3804	aese.8	q1, q11
 3805	aesmc.8	q1, q1
 3806	adcs	r6, r6, #0
 3807	vld1.8	{q14-q15}, [r0]!
 3808	adc	r5, r5, #0
 3809	aese.8	q0, q12
 3810	aese.8	q1, q12
 3811	sub	r4, r4, #2
 3812	veor.32	q14, q14, q13
 3813	veor.32	q15, q15, q13
 3814	veor.32	q14, q14, q0
 3815	veor.32	q15, q15, q1
 3816	vrev32.8	q0, q2
 3817	vmov	d2, r5, r6
 3818	vmov	d3, r7, r8
 3819	cmp	r4, #1
 3820	vst1.8	{q14-q15}, [r1]!
 3821	vrev32.8	q1, q1
 3822	bgt	L_aes_ctr_encrypt_arm32_crypto_128_start_2
 3823	mov	lr, #0
 3824	blt	L_aes_ctr_encrypt_arm32_crypto_128_done
 3825L_aes_ctr_encrypt_arm32_crypto_128_start_1:
 3826	aese.8	q0, q3
 3827	aesmc.8	q0, q0
 3828	adds	r8, r8, lr
 3829	aese.8	q0, q4
 3830	aesmc.8	q0, q0
 3831	adcs	r7, r7, #0
 3832	aese.8	q0, q5
 3833	aesmc.8	q0, q0
 3834	adcs	r6, r6, #0
 3835	aese.8	q0, q6
 3836	aesmc.8	q0, q0
 3837	adc	r5, r5, #0
 3838	aese.8	q0, q7
 3839	aesmc.8	q0, q0
 3840	vmov	d5, r7, r8
 3841	aese.8	q0, q8
 3842	aesmc.8	q0, q0
 3843	vmov	d4, r5, r6
 3844	aese.8	q0, q9
 3845	aesmc.8	q0, q0
 3846	aese.8	q0, q10
 3847	aesmc.8	q0, q0
 3848	aese.8	q0, q11
 3849	aesmc.8	q0, q0
 3850	vld1.8	{q14}, [r0]!
 3851	aese.8	q0, q12
 3852	veor.32	q0, q0, q13
 3853	veor.32	q14, q14, q0
 3854	vst1.8	{q14}, [r1]!
 3855	mov	lr, #1
 3856	vrev32.8	q0, q2
 3857L_aes_ctr_encrypt_arm32_crypto_128_done:
 3858	cmp	r2, #0
 3859	beq	L_aes_ctr_encrypt_arm32_crypto_128_partial_done
 3860	ldr	r4, [sp, #96]
 3861	aese.8	q0, q3
 3862	aesmc.8	q0, q0
 3863	adds	r8, r8, lr
 3864	aese.8	q0, q4
 3865	aesmc.8	q0, q0
 3866	adcs	r7, r7, #0
 3867	aese.8	q0, q5
 3868	aesmc.8	q0, q0
 3869	adcs	r6, r6, #0
 3870	aese.8	q0, q6
 3871	aesmc.8	q0, q0
 3872	adc	r5, r5, #0
 3873	aese.8	q0, q7
 3874	aesmc.8	q0, q0
 3875	vmov	d5, r7, r8
 3876	aese.8	q0, q8
 3877	aesmc.8	q0, q0
 3878	vmov	d4, r5, r6
 3879	aese.8	q0, q9
 3880	aesmc.8	q0, q0
 3881	aese.8	q0, q10
 3882	aesmc.8	q0, q0
 3883	aese.8	q0, q11
 3884	aesmc.8	q0, q0
 3885	ldr	lr, [sp, #92]
 3886	aese.8	q0, q12
 3887	veor.32	q0, q0, q13
 3888	vst1.32	{q0}, [lr]
 3889	vmov	q0, q2
 3890	mov	r5, #16
 3891	sub	r5, r5, r2
 3892L_aes_ctr_encrypt_arm32_crypto_128_start_byte:
 3893	ldrb	r7, [lr], #1
 3894	ldrb	r8, [r0], #1
 3895	eor	r7, r7, r8
 3896	subs	r2, r2, #1
 3897	strb	r7, [r1], #1
 3898	bgt	L_aes_ctr_encrypt_arm32_crypto_128_start_byte
 3899	vrev32.8	q0, q2
 3900	str	r5, [r4]
 3901L_aes_ctr_encrypt_arm32_crypto_128_partial_done:
 3902#endif /* !NO_AES_128 */
 3903L_aes_ctr_encrypt_arm32_crypto_done:
 3904	vst1.32	{q0}, [r3]
 3905	vpop	{d8-d15}
 3906	pop	{r4, r5, r6, r7, r8, pc}
 3907	.size	AES_CTR_encrypt_AARCH32,.-AES_CTR_encrypt_AARCH32
 3908#endif /* WOLFSSL_AES_COUNTER */
 3909#ifdef HAVE_AESGCM
 3910	.text
 3911	.align	4
 3912	.globl	AES_GCM_set_key_AARCH32
 3913	.type	AES_GCM_set_key_AARCH32, %function
 3914AES_GCM_set_key_AARCH32:
 3915	vpush	{d8-d9}
 3916	vld1.8	{q0}, [r0]
 3917	vld1.8	{q1-q2}, [r1]!
 3918	vld1.8	{q3-q4}, [r1]!
 3919	aese.8	q0, q1
 3920	aesmc.8	q0, q0
 3921	aese.8	q0, q2
 3922	aesmc.8	q0, q0
 3923	aese.8	q0, q3
 3924	aesmc.8	q0, q0
 3925	aese.8	q0, q4
 3926	aesmc.8	q0, q0
 3927	vld1.8	{q1-q2}, [r1]!
 3928	vld1.8	{q3-q4}, [r1]!
 3929	aese.8	q0, q1
 3930	aesmc.8	q0, q0
 3931	aese.8	q0, q2
 3932	aesmc.8	q0, q0
 3933	aese.8	q0, q3
 3934	aesmc.8	q0, q0
 3935	aese.8	q0, q4
 3936	aesmc.8	q0, q0
 3937	subs	r3, r3, #10
 3938	vld1.8	{q1-q2}, [r1]!
 3939	aese.8	q0, q1
 3940	aesmc.8	q0, q0
 3941	aese.8	q0, q2
 3942	beq	L_aes_gcm_set_key_arm32_crypto_round_done
 3943	vld1.8	{q1-q2}, [r1]!
 3944	subs	r3, r3, #2
 3945	aesmc.8	q0, q0
 3946	aese.8	q0, q1
 3947	aesmc.8	q0, q0
 3948	aese.8	q0, q2
 3949	beq	L_aes_gcm_set_key_arm32_crypto_round_done
 3950	vld1.8	{q1-q2}, [r1]!
 3951	aesmc.8	q0, q0
 3952	aese.8	q0, q1
 3953	aesmc.8	q0, q0
 3954	aese.8	q0, q2
 3955L_aes_gcm_set_key_arm32_crypto_round_done:
 3956	vld1.8	{q1}, [r1]
 3957	veor	q0, q0, q1
 3958	vmov.i8	q1, #0x55
 3959	vshl.u8	q2, q0, #1
 3960	vshr.u8	q0, q0, #1
 3961	vbif.8	q0, q2, q1
 3962	vmov.i8	q1, #51
 3963	vshl.u8	q2, q0, #2
 3964	vshr.u8	q0, q0, #2
 3965	vbit.8	q2, q0, q1
 3966	vshl.u8	q0, q2, #4
 3967	vsri.u8	q0, q2, #4
 3968	vst1.32	{q0}, [r2]
 3969	vpop	{d8-d9}
 3970	bx	lr
 3971	.size	AES_GCM_set_key_AARCH32,.-AES_GCM_set_key_AARCH32
 3972	.text
 3973	.align	4
 3974	.globl	AES_GCM_encrypt_AARCH32
 3975	.type	AES_GCM_encrypt_AARCH32, %function
 3976AES_GCM_encrypt_AARCH32:
 3977	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
 3978	vpush	{d8-d15}
 3979	# key
 3980	ldr	r7, [sp, #120]
 3981	# tmp
 3982	ldr	r9, [sp, #128]
 3983	# nonceSz
 3984	ldr	r12, [sp, #100]
 3985	cmp	r12, #12
 3986	beq	L_aes_gcm_encrypt_arm32_crypto_nonce_setup_done
 3987	vmov.i8	q13, #0x87
 3988	# gcm_h
 3989	ldr	r8, [sp, #124]
 3990	veor.8	q6, q6, q6
 3991	vshr.u64	q13, q13, #56
 3992	vld1.32	{q8}, [r8]
 3993L_aes_gcm_encrypt_arm32_crypto_nonce_setup_done:
 3994	# Load Nonce
 3995	cmp	r12, #12
 3996	bne	L_aes_gcm_encrypt_arm32_crypto_ghash_nonce
 3997	ldr	r5, [r3]
 3998	ldr	r8, [r3, #4]
 3999	ldr	r12, [r3, #8]
 4000	vmov.i32	q6, #0x1000000
 4001	vmov.32	s24, r5
 4002	vmov.32	s25, r8
 4003	vmov.32	s26, r12
 4004	mov	r5, #1
 4005	b	L_aes_gcm_encrypt_arm32_crypto_done_nonce
 4006L_aes_gcm_encrypt_arm32_crypto_ghash_nonce:
 4007	lsr	r10, r12, #4
 4008	cmp	r10, #0
 4009	beq	L_aes_gcm_encrypt_arm32_crypto_nonce_done
 4010L_aes_gcm_encrypt_arm32_crypto_nonce_start_1:
 4011	vld1.32	{q14}, [r3]!
 4012	vmov.i8	q12, #0x55
 4013	vshl.u8	q0, q14, #1
 4014	vshr.u8	q14, q14, #1
 4015	vbif.8	q14, q0, q12
 4016	vmov.i8	q12, #51
 4017	vshl.u8	q0, q14, #2
 4018	vshr.u8	q14, q14, #2
 4019	vbit.8	q0, q14, q12
 4020	vshl.u8	q14, q0, #4
 4021	vsri.u8	q14, q0, #4
 4022	veor.8	q12, q6, q14
 4023	#   X  = C * H^1
 4024	vmull.p64	q2, d25, d16
 4025	vmull.p64	q6, d24, d17
 4026	vmull.p64	q0, d24, d16
 4027	vmull.p64	q1, d25, d17
 4028	veor.8	q2, q2, q6
 4029	#   Reduce
 4030	vmull.p64	q6, d3, d27
 4031	veor.8	d2, d2, d5
 4032	veor.8	d1, d1, d4
 4033	veor.8	d2, d2, d13
 4034	veor.8	d1, d1, d12
 4035	vmull.p64	q6, d2, d26
 4036	veor.8	q6, q6, q0
 4037	# Done GHASH
 4038	subs	r10, r10, #1
 4039	bne	L_aes_gcm_encrypt_arm32_crypto_nonce_start_1
 4040L_aes_gcm_encrypt_arm32_crypto_nonce_done:
 4041	ands	r11, r12, #15
 4042	beq	L_aes_gcm_encrypt_arm32_crypto_nonce_partial_done
 4043	veor.8	q0, q0, q0
 4044	mov	r12, r11
 4045	vst1.32	{q0}, [r9]
 4046	cmp	r12, #4
 4047	blt	L_aes_gcm_encrypt_arm32_crypto_nonce_start_sw
 4048L_aes_gcm_encrypt_arm32_crypto_nonce_start_dw:
 4049	ldr	r8, [r3], #4
 4050	sub	r12, r12, #4
 4051	str	r8, [r9], #4
 4052	cmp	r12, #4
 4053	bge	L_aes_gcm_encrypt_arm32_crypto_nonce_start_dw
 4054L_aes_gcm_encrypt_arm32_crypto_nonce_start_sw:
 4055	cmp	r12, #2
 4056	blt	L_aes_gcm_encrypt_arm32_crypto_nonce_start_byte
 4057	ldrh	r8, [r3], #2
 4058	sub	r12, r12, #2
 4059	strh	r8, [r9], #2
 4060L_aes_gcm_encrypt_arm32_crypto_nonce_start_byte:
 4061	cmp	r12, #1
 4062	blt	L_aes_gcm_encrypt_arm32_crypto_nonce_end_bytes
 4063	ldrb	r8, [r3], #1
 4064	subs	r12, r12, #1
 4065	strb	r8, [r9], #1
 4066	bne	L_aes_gcm_encrypt_arm32_crypto_nonce_start_byte
 4067L_aes_gcm_encrypt_arm32_crypto_nonce_end_bytes:
 4068	sub	r9, r9, r11
 4069	vld1.32	{q14}, [r9]
 4070	vmov.i8	q12, #0x55
 4071	vshl.u8	q0, q14, #1
 4072	vshr.u8	q14, q14, #1
 4073	vbif.8	q14, q0, q12
 4074	vmov.i8	q12, #51
 4075	vshl.u8	q0, q14, #2
 4076	vshr.u8	q14, q14, #2
 4077	vbit.8	q0, q14, q12
 4078	vshl.u8	q14, q0, #4
 4079	vsri.u8	q14, q0, #4
 4080	veor.8	q12, q6, q14
 4081	#   X  = C * H^1
 4082	vmull.p64	q2, d25, d16
 4083	vmull.p64	q6, d24, d17
 4084	vmull.p64	q0, d24, d16
 4085	vmull.p64	q1, d25, d17
 4086	veor.8	q2, q2, q6
 4087	#   Reduce
 4088	vmull.p64	q6, d3, d27
 4089	veor.8	d2, d2, d5
 4090	veor.8	d1, d1, d4
 4091	veor.8	d2, d2, d13
 4092	veor.8	d1, d1, d12
 4093	vmull.p64	q6, d2, d26
 4094	veor.8	q6, q6, q0
 4095	# Done GHASH
 4096L_aes_gcm_encrypt_arm32_crypto_nonce_partial_done:
 4097	veor.8	q0, q0, q0
 4098	# nonceSz
 4099	ldr	r12, [sp, #100]
 4100	lsr	r10, r12, #29
 4101	lsl	r11, r12, #3
 4102	rbit	r10, r10
 4103	rbit	r11, r11
 4104	vmov.32	s2, r10
 4105	vmov.32	s3, r11
 4106	veor.8	q6, q6, q0
 4107	vmull.p64	q2, d13, d16
 4108	vmull.p64	q12, d12, d17
 4109	vmull.p64	q0, d12, d16
 4110	vmull.p64	q1, d13, d17
 4111	veor.8	q2, q2, q12
 4112	vmull.p64	q6, d3, d27
 4113	veor.8	d2, d2, d5
 4114	veor.8	d1, d1, d4
 4115	veor.8	d2, d2, d13
 4116	veor.8	d1, d1, d12
 4117	vmull.p64	q6, d2, d26
 4118	veor.8	q6, q6, q0
 4119	vmov.32	r5, s24
 4120	vmov.32	r8, s25
 4121	vmov.32	r12, s26
 4122	rbit	r5, r5
 4123	rbit	r8, r8
 4124	rbit	r12, r12
 4125	rev	r5, r5
 4126	rev	r8, r8
 4127	rev	r12, r12
 4128	vmov.32	s24, r5
 4129	vmov.32	s25, r8
 4130	vmov.32	s26, r12
 4131	vmov.32	r5, s27
 4132	rbit	r5, r5
 4133	rev	r5, r5
 4134	vmov.32	s27, r5
 4135	rev	r5, r5
 4136L_aes_gcm_encrypt_arm32_crypto_done_nonce:
 4137	vldm.32	r7!, {q0-q3}
 4138	vldm.32	r7!, {q7-q13}
 4139	# nr
 4140	ldr	r12, [sp, #136]
 4141	lsr	r10, r2, #4
 4142	cmp	r12, #12
 4143	blt	L_aes_gcm_encrypt_arm32_crypto_start_128
 4144	bgt	L_aes_gcm_encrypt_arm32_crypto_start_256
 4145	# AES_GCM_192
 4146#ifndef NO_AES_192
 4147	cmp	r10, #1
 4148	blt	L_aes_gcm_encrypt_arm32_crypto_192_done
 4149	beq	L_aes_gcm_encrypt_arm32_crypto_192_start_1
 4150L_aes_gcm_encrypt_arm32_crypto_192_start_2:
 4151	add	r8, r5, #1
 4152	vmov.8	q4, q6
 4153	add	r5, r5, #2
 4154	vmov.8	q5, q6
 4155	rev	r8, r8
 4156	rev	r12, r5
 4157	vmov	s19, r8
 4158	vmov	s23, r12
 4159	aese.8	q4, q0
 4160	aesmc.8	q4, q4
 4161	aese.8	q5, q0
 4162	aesmc.8	q5, q5
 4163	aese.8	q4, q1
 4164	aesmc.8	q4, q4
 4165	aese.8	q5, q1
 4166	aesmc.8	q5, q5
 4167	aese.8	q4, q2
 4168	aesmc.8	q4, q4
 4169	aese.8	q5, q2
 4170	aesmc.8	q5, q5
 4171	aese.8	q4, q3
 4172	aesmc.8	q4, q4
 4173	aese.8	q5, q3
 4174	aesmc.8	q5, q5
 4175	aese.8	q4, q7
 4176	aesmc.8	q4, q4
 4177	aese.8	q5, q7
 4178	aesmc.8	q5, q5
 4179	aese.8	q4, q8
 4180	aesmc.8	q4, q4
 4181	aese.8	q5, q8
 4182	aesmc.8	q5, q5
 4183	aese.8	q4, q9
 4184	aesmc.8	q4, q4
 4185	aese.8	q5, q9
 4186	aesmc.8	q5, q5
 4187	subs	r10, r10, #2
 4188	aese.8	q4, q10
 4189	aesmc.8	q4, q4
 4190	aese.8	q5, q10
 4191	aesmc.8	q5, q5
 4192	aese.8	q4, q11
 4193	aesmc.8	q4, q4
 4194	aese.8	q5, q11
 4195	aesmc.8	q5, q5
 4196	aese.8	q4, q12
 4197	aesmc.8	q4, q4
 4198	aese.8	q5, q12
 4199	aesmc.8	q5, q5
 4200	vld1.32	{q14}, [r7]!
 4201	aese.8	q4, q13
 4202	aesmc.8	q4, q4
 4203	aese.8	q5, q13
 4204	aesmc.8	q5, q5
 4205	vld1.32	{q15}, [r7]
 4206	aese.8	q4, q14
 4207	veor.8	q4, q4, q15
 4208	aese.8	q5, q14
 4209	veor.8	q5, q5, q15
 4210	vld1.8	{q14-q15}, [r0]!
 4211	sub	r7, r7, #16
 4212	veor.8	q14, q14, q4
 4213	veor.8	q15, q15, q5
 4214	vst1.8	{q14-q15}, [r1]!
 4215	cmp	r10, #1
 4216	bgt	L_aes_gcm_encrypt_arm32_crypto_192_start_2
 4217	blt	L_aes_gcm_encrypt_arm32_crypto_192_done
 4218L_aes_gcm_encrypt_arm32_crypto_192_start_1:
 4219	add	r5, r5, #1
 4220	vmov.8	q4, q6
 4221	rev	r8, r5
 4222	vmov	s19, r8
 4223	aese.8	q4, q0
 4224	aesmc.8	q4, q4
 4225	aese.8	q4, q1
 4226	aesmc.8	q4, q4
 4227	aese.8	q4, q2
 4228	aesmc.8	q4, q4
 4229	aese.8	q4, q3
 4230	aesmc.8	q4, q4
 4231	aese.8	q4, q7
 4232	aesmc.8	q4, q4
 4233	aese.8	q4, q8
 4234	aesmc.8	q4, q4
 4235	aese.8	q4, q9
 4236	aesmc.8	q4, q4
 4237	aese.8	q4, q10
 4238	aesmc.8	q4, q4
 4239	aese.8	q4, q11
 4240	aesmc.8	q4, q4
 4241	aese.8	q4, q12
 4242	aesmc.8	q4, q4
 4243	vld1.32	{q14}, [r7]!
 4244	aese.8	q4, q13
 4245	aesmc.8	q4, q4
 4246	vld1.32	{q15}, [r7]
 4247	aese.8	q4, q14
 4248	veor.8	q4, q4, q15
 4249	vld1.8	{q14}, [r0]!
 4250	sub	r7, r7, #16
 4251	veor.8	q14, q14, q4
 4252	vst1.32	{q14}, [r1]!
 4253L_aes_gcm_encrypt_arm32_crypto_192_done:
 4254	ands	r11, r2, #15
 4255	beq	L_aes_gcm_encrypt_arm32_crypto_192_partial_done
 4256	veor.8	q14, q14, q14
 4257	mov	r4, r11
 4258	vst1.32	{q14}, [r9]
 4259	cmp	r4, #4
 4260	blt	L_aes_gcm_encrypt_arm32_crypto_192_start_sw
 4261L_aes_gcm_encrypt_arm32_crypto_192_start_dw:
 4262	ldr	lr, [r0], #4
 4263	sub	r4, r4, #4
 4264	str	lr, [r9], #4
 4265	cmp	r4, #4
 4266	bge	L_aes_gcm_encrypt_arm32_crypto_192_start_dw
 4267L_aes_gcm_encrypt_arm32_crypto_192_start_sw:
 4268	cmp	r4, #2
 4269	blt	L_aes_gcm_encrypt_arm32_crypto_192_start_byte
 4270	ldrh	lr, [r0], #2
 4271	sub	r4, r4, #2
 4272	strh	lr, [r9], #2
 4273L_aes_gcm_encrypt_arm32_crypto_192_start_byte:
 4274	cmp	r4, #1
 4275	blt	L_aes_gcm_encrypt_arm32_crypto_192_end_bytes
 4276	ldrb	lr, [r0], #1
 4277	subs	r4, r4, #1
 4278	strb	lr, [r9], #1
 4279	bne	L_aes_gcm_encrypt_arm32_crypto_192_start_byte
 4280L_aes_gcm_encrypt_arm32_crypto_192_end_bytes:
 4281	sub	r9, r9, r11
 4282	add	r5, r5, #1
 4283	vmov.8	q4, q6
 4284	rev	r8, r5
 4285	vmov	s19, r8
 4286	aese.8	q4, q0
 4287	aesmc.8	q4, q4
 4288	aese.8	q4, q1
 4289	aesmc.8	q4, q4
 4290	aese.8	q4, q2
 4291	aesmc.8	q4, q4
 4292	aese.8	q4, q3
 4293	aesmc.8	q4, q4
 4294	aese.8	q4, q7
 4295	aesmc.8	q4, q4
 4296	aese.8	q4, q8
 4297	aesmc.8	q4, q4
 4298	aese.8	q4, q9
 4299	aesmc.8	q4, q4
 4300	aese.8	q4, q10
 4301	aesmc.8	q4, q4
 4302	aese.8	q4, q11
 4303	aesmc.8	q4, q4
 4304	aese.8	q4, q12
 4305	aesmc.8	q4, q4
 4306	vld1.32	{q14}, [r7]!
 4307	aese.8	q4, q13
 4308	aesmc.8	q4, q4
 4309	vld1.32	{q15}, [r7]
 4310	aese.8	q4, q14
 4311	veor.8	q4, q4, q15
 4312	vld1.8	{q14}, [r9]
 4313	sub	r7, r7, #16
 4314	veor.8	q14, q14, q4
 4315	vst1.32	{q14}, [r9]
 4316	mov	r4, r11
 4317	cmp	r4, #4
 4318	blt	L_aes_gcm_encrypt_arm32_crypto_192_out_start_sw
 4319L_aes_gcm_encrypt_arm32_crypto_192_out_start_dw:
 4320	ldr	lr, [r9], #4
 4321	sub	r4, r4, #4
 4322	str	lr, [r1], #4
 4323	cmp	r4, #4
 4324	bge	L_aes_gcm_encrypt_arm32_crypto_192_out_start_dw
 4325L_aes_gcm_encrypt_arm32_crypto_192_out_start_sw:
 4326	cmp	r4, #2
 4327	blt	L_aes_gcm_encrypt_arm32_crypto_192_out_start_byte
 4328	ldrh	lr, [r9], #2
 4329	sub	r4, r4, #2
 4330	strh	lr, [r1], #2
 4331L_aes_gcm_encrypt_arm32_crypto_192_out_start_byte:
 4332	cmp	r4, #1
 4333	blt	L_aes_gcm_encrypt_arm32_crypto_192_out_end_bytes
 4334	ldrb	lr, [r9], #1
 4335	subs	r4, r4, #1
 4336	strb	lr, [r1], #1
 4337	bne	L_aes_gcm_encrypt_arm32_crypto_192_out_start_byte
 4338L_aes_gcm_encrypt_arm32_crypto_192_out_end_bytes:
 4339L_aes_gcm_encrypt_arm32_crypto_192_partial_done:
 4340	# Finish
 4341	add	r8, r2, #15
 4342	sub	r8, r5, r8, lsr #4
 4343	rev	r8, r8
 4344	vmov.32	s27, r8
 4345	aese.8	q6, q0
 4346	aesmc.8	q6, q6
 4347	aese.8	q6, q1
 4348	aesmc.8	q6, q6
 4349	aese.8	q6, q2
 4350	aesmc.8	q6, q6
 4351	aese.8	q6, q3
 4352	aesmc.8	q6, q6
 4353	aese.8	q6, q7
 4354	aesmc.8	q6, q6
 4355	aese.8	q6, q8
 4356	aesmc.8	q6, q6
 4357	aese.8	q6, q9
 4358	aesmc.8	q6, q6
 4359	aese.8	q6, q10
 4360	aesmc.8	q6, q6
 4361	aese.8	q6, q11
 4362	aesmc.8	q6, q6
 4363	aese.8	q6, q12
 4364	aesmc.8	q6, q6
 4365	vld1.32	{q14}, [r7]!
 4366	aese.8	q6, q13
 4367	aesmc.8	q6, q6
 4368	vld1.32	{q15}, [r7]
 4369	aese.8	q6, q14
 4370	veor.8	q6, q6, q15
 4371	sub	r7, r7, #16
 4372#endif /* !NO_AES_192 */
 4373	b	L_aes_gcm_encrypt_arm32_crypto_done_enc
 4374	# AES_GCM_256
 4375L_aes_gcm_encrypt_arm32_crypto_start_256:
 4376#ifndef NO_AES_256
 4377	cmp	r10, #1
 4378	blt	L_aes_gcm_encrypt_arm32_crypto_256_done
 4379	beq	L_aes_gcm_encrypt_arm32_crypto_256_start_1
 4380L_aes_gcm_encrypt_arm32_crypto_256_start_2:
 4381	add	r8, r5, #1
 4382	vmov.8	q4, q6
 4383	add	r5, r5, #2
 4384	vmov.8	q5, q6
 4385	rev	r8, r8
 4386	rev	r12, r5
 4387	vmov	s19, r8
 4388	vmov	s23, r12
 4389	aese.8	q4, q0
 4390	aesmc.8	q4, q4
 4391	aese.8	q5, q0
 4392	aesmc.8	q5, q5
 4393	aese.8	q4, q1
 4394	aesmc.8	q4, q4
 4395	aese.8	q5, q1
 4396	aesmc.8	q5, q5
 4397	aese.8	q4, q2
 4398	aesmc.8	q4, q4
 4399	aese.8	q5, q2
 4400	aesmc.8	q5, q5
 4401	aese.8	q4, q3
 4402	aesmc.8	q4, q4
 4403	aese.8	q5, q3
 4404	aesmc.8	q5, q5
 4405	aese.8	q4, q7
 4406	aesmc.8	q4, q4
 4407	aese.8	q5, q7
 4408	aesmc.8	q5, q5
 4409	aese.8	q4, q8
 4410	aesmc.8	q4, q4
 4411	aese.8	q5, q8
 4412	aesmc.8	q5, q5
 4413	aese.8	q4, q9
 4414	aesmc.8	q4, q4
 4415	aese.8	q5, q9
 4416	aesmc.8	q5, q5
 4417	subs	r10, r10, #2
 4418	aese.8	q4, q10
 4419	aesmc.8	q4, q4
 4420	aese.8	q5, q10
 4421	aesmc.8	q5, q5
 4422	aese.8	q4, q11
 4423	aesmc.8	q4, q4
 4424	aese.8	q5, q11
 4425	aesmc.8	q5, q5
 4426	aese.8	q4, q12
 4427	aesmc.8	q4, q4
 4428	aese.8	q5, q12
 4429	aesmc.8	q5, q5
 4430	vld1.32	{q14}, [r7]!
 4431	aese.8	q4, q13
 4432	aesmc.8	q4, q4
 4433	aese.8	q5, q13
 4434	aesmc.8	q5, q5
 4435	vld1.32	{q15}, [r7]!
 4436	aese.8	q4, q14
 4437	aesmc.8	q4, q4
 4438	aese.8	q5, q14
 4439	aesmc.8	q5, q5
 4440	vld1.32	{q14}, [r7]!
 4441	aese.8	q4, q15
 4442	aesmc.8	q4, q4
 4443	aese.8	q5, q15
 4444	aesmc.8	q5, q5
 4445	vld1.32	{q15}, [r7]
 4446	aese.8	q4, q14
 4447	veor.8	q4, q4, q15
 4448	aese.8	q5, q14
 4449	veor.8	q5, q5, q15
 4450	vld1.8	{q14-q15}, [r0]!
 4451	sub	r7, r7, #48
 4452	veor.8	q14, q14, q4
 4453	veor.8	q15, q15, q5
 4454	vst1.8	{q14-q15}, [r1]!
 4455	cmp	r10, #1
 4456	bgt	L_aes_gcm_encrypt_arm32_crypto_256_start_2
 4457	blt	L_aes_gcm_encrypt_arm32_crypto_256_done
 4458L_aes_gcm_encrypt_arm32_crypto_256_start_1:
 4459	add	r5, r5, #1
 4460	vmov.8	q4, q6
 4461	rev	r8, r5
 4462	vmov	s19, r8
 4463	aese.8	q4, q0
 4464	aesmc.8	q4, q4
 4465	aese.8	q4, q1
 4466	aesmc.8	q4, q4
 4467	aese.8	q4, q2
 4468	aesmc.8	q4, q4
 4469	aese.8	q4, q3
 4470	aesmc.8	q4, q4
 4471	aese.8	q4, q7
 4472	aesmc.8	q4, q4
 4473	aese.8	q4, q8
 4474	aesmc.8	q4, q4
 4475	aese.8	q4, q9
 4476	aesmc.8	q4, q4
 4477	aese.8	q4, q10
 4478	aesmc.8	q4, q4
 4479	aese.8	q4, q11
 4480	aesmc.8	q4, q4
 4481	aese.8	q4, q12
 4482	aesmc.8	q4, q4
 4483	vld1.32	{q14}, [r7]!
 4484	aese.8	q4, q13
 4485	aesmc.8	q4, q4
 4486	vld1.32	{q15}, [r7]!
 4487	aese.8	q4, q14
 4488	aesmc.8	q4, q4
 4489	vld1.32	{q14}, [r7]!
 4490	aese.8	q4, q15
 4491	aesmc.8	q4, q4
 4492	vld1.32	{q15}, [r7]
 4493	aese.8	q4, q14
 4494	veor.8	q4, q4, q15
 4495	vld1.8	{q14}, [r0]!
 4496	sub	r7, r7, #48
 4497	veor.8	q14, q14, q4
 4498	vst1.32	{q14}, [r1]!
 4499L_aes_gcm_encrypt_arm32_crypto_256_done:
 4500	ands	r11, r2, #15
 4501	beq	L_aes_gcm_encrypt_arm32_crypto_256_partial_done
 4502	veor.8	q14, q14, q14
 4503	mov	r4, r11
 4504	vst1.32	{q14}, [r9]
 4505	cmp	r4, #4
 4506	blt	L_aes_gcm_encrypt_arm32_crypto_256_start_sw
 4507L_aes_gcm_encrypt_arm32_crypto_256_start_dw:
 4508	ldr	lr, [r0], #4
 4509	sub	r4, r4, #4
 4510	str	lr, [r9], #4
 4511	cmp	r4, #4
 4512	bge	L_aes_gcm_encrypt_arm32_crypto_256_start_dw
 4513L_aes_gcm_encrypt_arm32_crypto_256_start_sw:
 4514	cmp	r4, #2
 4515	blt	L_aes_gcm_encrypt_arm32_crypto_256_start_byte
 4516	ldrh	lr, [r0], #2
 4517	sub	r4, r4, #2
 4518	strh	lr, [r9], #2
 4519L_aes_gcm_encrypt_arm32_crypto_256_start_byte:
 4520	cmp	r4, #1
 4521	blt	L_aes_gcm_encrypt_arm32_crypto_256_end_bytes
 4522	ldrb	lr, [r0], #1
 4523	subs	r4, r4, #1
 4524	strb	lr, [r9], #1
 4525	bne	L_aes_gcm_encrypt_arm32_crypto_256_start_byte
 4526L_aes_gcm_encrypt_arm32_crypto_256_end_bytes:
 4527	sub	r9, r9, r11
 4528	add	r5, r5, #1
 4529	vmov.8	q4, q6
 4530	rev	r8, r5
 4531	vmov	s19, r8
 4532	aese.8	q4, q0
 4533	aesmc.8	q4, q4
 4534	aese.8	q4, q1
 4535	aesmc.8	q4, q4
 4536	aese.8	q4, q2
 4537	aesmc.8	q4, q4
 4538	aese.8	q4, q3
 4539	aesmc.8	q4, q4
 4540	aese.8	q4, q7
 4541	aesmc.8	q4, q4
 4542	aese.8	q4, q8
 4543	aesmc.8	q4, q4
 4544	aese.8	q4, q9
 4545	aesmc.8	q4, q4
 4546	aese.8	q4, q10
 4547	aesmc.8	q4, q4
 4548	aese.8	q4, q11
 4549	aesmc.8	q4, q4
 4550	aese.8	q4, q12
 4551	aesmc.8	q4, q4
 4552	vld1.32	{q14}, [r7]!
 4553	aese.8	q4, q13
 4554	aesmc.8	q4, q4
 4555	vld1.32	{q15}, [r7]!
 4556	aese.8	q4, q14
 4557	aesmc.8	q4, q4
 4558	vld1.32	{q14}, [r7]!
 4559	aese.8	q4, q15
 4560	aesmc.8	q4, q4
 4561	vld1.32	{q15}, [r7]
 4562	aese.8	q4, q14
 4563	veor.8	q4, q4, q15
 4564	vld1.8	{q14}, [r9]
 4565	sub	r7, r7, #48
 4566	veor.8	q14, q14, q4
 4567	vst1.32	{q14}, [r9]
 4568	mov	r4, r11
 4569	cmp	r4, #4
 4570	blt	L_aes_gcm_encrypt_arm32_crypto_256_out_start_sw
 4571L_aes_gcm_encrypt_arm32_crypto_256_out_start_dw:
 4572	ldr	lr, [r9], #4
 4573	sub	r4, r4, #4
 4574	str	lr, [r1], #4
 4575	cmp	r4, #4
 4576	bge	L_aes_gcm_encrypt_arm32_crypto_256_out_start_dw
 4577L_aes_gcm_encrypt_arm32_crypto_256_out_start_sw:
 4578	cmp	r4, #2
 4579	blt	L_aes_gcm_encrypt_arm32_crypto_256_out_start_byte
 4580	ldrh	lr, [r9], #2
 4581	sub	r4, r4, #2
 4582	strh	lr, [r1], #2
 4583L_aes_gcm_encrypt_arm32_crypto_256_out_start_byte:
 4584	cmp	r4, #1
 4585	blt	L_aes_gcm_encrypt_arm32_crypto_256_out_end_bytes
 4586	ldrb	lr, [r9], #1
 4587	subs	r4, r4, #1
 4588	strb	lr, [r1], #1
 4589	bne	L_aes_gcm_encrypt_arm32_crypto_256_out_start_byte
 4590L_aes_gcm_encrypt_arm32_crypto_256_out_end_bytes:
 4591L_aes_gcm_encrypt_arm32_crypto_256_partial_done:
 4592	# Finish
 4593	add	r8, r2, #15
 4594	sub	r8, r5, r8, lsr #4
 4595	rev	r8, r8
 4596	vmov.32	s27, r8
 4597	aese.8	q6, q0
 4598	aesmc.8	q6, q6
 4599	aese.8	q6, q1
 4600	aesmc.8	q6, q6
 4601	aese.8	q6, q2
 4602	aesmc.8	q6, q6
 4603	aese.8	q6, q3
 4604	aesmc.8	q6, q6
 4605	aese.8	q6, q7
 4606	aesmc.8	q6, q6
 4607	aese.8	q6, q8
 4608	aesmc.8	q6, q6
 4609	aese.8	q6, q9
 4610	aesmc.8	q6, q6
 4611	aese.8	q6, q10
 4612	aesmc.8	q6, q6
 4613	aese.8	q6, q11
 4614	aesmc.8	q6, q6
 4615	aese.8	q6, q12
 4616	aesmc.8	q6, q6
 4617	vld1.32	{q14}, [r7]!
 4618	aese.8	q6, q13
 4619	aesmc.8	q6, q6
 4620	vld1.32	{q15}, [r7]!
 4621	aese.8	q6, q14
 4622	aesmc.8	q6, q6
 4623	vld1.32	{q14}, [r7]!
 4624	aese.8	q6, q15
 4625	aesmc.8	q6, q6
 4626	vld1.32	{q15}, [r7]
 4627	aese.8	q6, q14
 4628	veor.8	q6, q6, q15
 4629	sub	r7, r7, #48
 4630#endif /* !NO_AES_256 */
 4631	b	L_aes_gcm_encrypt_arm32_crypto_done_enc
 4632	# AES_GCM_128
 4633L_aes_gcm_encrypt_arm32_crypto_start_128:
 4634#ifndef NO_AES_128
 4635	cmp	r10, #1
 4636	blt	L_aes_gcm_encrypt_arm32_crypto_128_done
 4637	beq	L_aes_gcm_encrypt_arm32_crypto_128_start_1
 4638L_aes_gcm_encrypt_arm32_crypto_128_start_2:
 4639	add	r8, r5, #1
 4640	vmov.8	q4, q6
 4641	add	r5, r5, #2
 4642	vmov.8	q5, q6
 4643	rev	r8, r8
 4644	rev	r12, r5
 4645	vmov	s19, r8
 4646	vmov	s23, r12
 4647	aese.8	q4, q0
 4648	aesmc.8	q4, q4
 4649	aese.8	q5, q0
 4650	aesmc.8	q5, q5
 4651	aese.8	q4, q1
 4652	aesmc.8	q4, q4
 4653	aese.8	q5, q1
 4654	aesmc.8	q5, q5
 4655	aese.8	q4, q2
 4656	aesmc.8	q4, q4
 4657	aese.8	q5, q2
 4658	aesmc.8	q5, q5
 4659	aese.8	q4, q3
 4660	aesmc.8	q4, q4
 4661	aese.8	q5, q3
 4662	aesmc.8	q5, q5
 4663	aese.8	q4, q7
 4664	aesmc.8	q4, q4
 4665	aese.8	q5, q7
 4666	aesmc.8	q5, q5
 4667	aese.8	q4, q8
 4668	aesmc.8	q4, q4
 4669	aese.8	q5, q8
 4670	aesmc.8	q5, q5
 4671	aese.8	q4, q9
 4672	aesmc.8	q4, q4
 4673	aese.8	q5, q9
 4674	aesmc.8	q5, q5
 4675	subs	r10, r10, #2
 4676	aese.8	q4, q10
 4677	aesmc.8	q4, q4
 4678	aese.8	q5, q10
 4679	aesmc.8	q5, q5
 4680	aese.8	q4, q11
 4681	aesmc.8	q4, q4
 4682	aese.8	q5, q11
 4683	aesmc.8	q5, q5
 4684	vld1.8	{q14-q15}, [r0]!
 4685	aese.8	q4, q12
 4686	veor.8	q4, q4, q13
 4687	aese.8	q5, q12
 4688	veor.8	q5, q5, q13
 4689	veor.8	q14, q14, q4
 4690	veor.8	q15, q15, q5
 4691	vst1.8	{q14-q15}, [r1]!
 4692	cmp	r10, #1
 4693	bgt	L_aes_gcm_encrypt_arm32_crypto_128_start_2
 4694	blt	L_aes_gcm_encrypt_arm32_crypto_128_done
 4695L_aes_gcm_encrypt_arm32_crypto_128_start_1:
 4696	add	r5, r5, #1
 4697	vmov.8	q4, q6
 4698	rev	r8, r5
 4699	vmov	s19, r8
 4700	aese.8	q4, q0
 4701	aesmc.8	q4, q4
 4702	aese.8	q4, q1
 4703	aesmc.8	q4, q4
 4704	aese.8	q4, q2
 4705	aesmc.8	q4, q4
 4706	aese.8	q4, q3
 4707	aesmc.8	q4, q4
 4708	aese.8	q4, q7
 4709	aesmc.8	q4, q4
 4710	aese.8	q4, q8
 4711	aesmc.8	q4, q4
 4712	aese.8	q4, q9
 4713	aesmc.8	q4, q4
 4714	aese.8	q4, q10
 4715	aesmc.8	q4, q4
 4716	aese.8	q4, q11
 4717	aesmc.8	q4, q4
 4718	vld1.8	{q14}, [r0]!
 4719	aese.8	q4, q12
 4720	veor.8	q4, q4, q13
 4721	veor.8	q14, q14, q4
 4722	vst1.32	{q14}, [r1]!
 4723L_aes_gcm_encrypt_arm32_crypto_128_done:
 4724	ands	r11, r2, #15
 4725	beq	L_aes_gcm_encrypt_arm32_crypto_128_partial_done
 4726	veor.8	q14, q14, q14
 4727	mov	r4, r11
 4728	vst1.32	{q14}, [r9]
 4729	cmp	r4, #4
 4730	blt	L_aes_gcm_encrypt_arm32_crypto_128_start_sw
 4731L_aes_gcm_encrypt_arm32_crypto_128_start_dw:
 4732	ldr	lr, [r0], #4
 4733	sub	r4, r4, #4
 4734	str	lr, [r9], #4
 4735	cmp	r4, #4
 4736	bge	L_aes_gcm_encrypt_arm32_crypto_128_start_dw
 4737L_aes_gcm_encrypt_arm32_crypto_128_start_sw:
 4738	cmp	r4, #2
 4739	blt	L_aes_gcm_encrypt_arm32_crypto_128_start_byte
 4740	ldrh	lr, [r0], #2
 4741	sub	r4, r4, #2
 4742	strh	lr, [r9], #2
 4743L_aes_gcm_encrypt_arm32_crypto_128_start_byte:
 4744	cmp	r4, #1
 4745	blt	L_aes_gcm_encrypt_arm32_crypto_128_end_bytes
 4746	ldrb	lr, [r0], #1
 4747	subs	r4, r4, #1
 4748	strb	lr, [r9], #1
 4749	bne	L_aes_gcm_encrypt_arm32_crypto_128_start_byte
 4750L_aes_gcm_encrypt_arm32_crypto_128_end_bytes:
 4751	sub	r9, r9, r11
 4752	add	r5, r5, #1
 4753	vmov.8	q4, q6
 4754	rev	r8, r5
 4755	vmov	s19, r8
 4756	aese.8	q4, q0
 4757	aesmc.8	q4, q4
 4758	aese.8	q4, q1
 4759	aesmc.8	q4, q4
 4760	aese.8	q4, q2
 4761	aesmc.8	q4, q4
 4762	aese.8	q4, q3
 4763	aesmc.8	q4, q4
 4764	aese.8	q4, q7
 4765	aesmc.8	q4, q4
 4766	aese.8	q4, q8
 4767	aesmc.8	q4, q4
 4768	aese.8	q4, q9
 4769	aesmc.8	q4, q4
 4770	aese.8	q4, q10
 4771	aesmc.8	q4, q4
 4772	aese.8	q4, q11
 4773	aesmc.8	q4, q4
 4774	vld1.8	{q14}, [r9]
 4775	aese.8	q4, q12
 4776	veor.8	q4, q4, q13
 4777	veor.8	q14, q14, q4
 4778	vst1.32	{q14}, [r9]
 4779	mov	r4, r11
 4780	cmp	r4, #4
 4781	blt	L_aes_gcm_encrypt_arm32_crypto_128_out_start_sw
 4782L_aes_gcm_encrypt_arm32_crypto_128_out_start_dw:
 4783	ldr	lr, [r9], #4
 4784	sub	r4, r4, #4
 4785	str	lr, [r1], #4
 4786	cmp	r4, #4
 4787	bge	L_aes_gcm_encrypt_arm32_crypto_128_out_start_dw
 4788L_aes_gcm_encrypt_arm32_crypto_128_out_start_sw:
 4789	cmp	r4, #2
 4790	blt	L_aes_gcm_encrypt_arm32_crypto_128_out_start_byte
 4791	ldrh	lr, [r9], #2
 4792	sub	r4, r4, #2
 4793	strh	lr, [r1], #2
 4794L_aes_gcm_encrypt_arm32_crypto_128_out_start_byte:
 4795	cmp	r4, #1
 4796	blt	L_aes_gcm_encrypt_arm32_crypto_128_out_end_bytes
 4797	ldrb	lr, [r9], #1
 4798	subs	r4, r4, #1
 4799	strb	lr, [r1], #1
 4800	bne	L_aes_gcm_encrypt_arm32_crypto_128_out_start_byte
 4801L_aes_gcm_encrypt_arm32_crypto_128_out_end_bytes:
 4802L_aes_gcm_encrypt_arm32_crypto_128_partial_done:
 4803	# Finish
 4804	add	r8, r2, #15
 4805	sub	r8, r5, r8, lsr #4
 4806	rev	r8, r8
 4807	vmov.32	s27, r8
 4808	aese.8	q6, q0
 4809	aesmc.8	q6, q6
 4810	aese.8	q6, q1
 4811	aesmc.8	q6, q6
 4812	aese.8	q6, q2
 4813	aesmc.8	q6, q6
 4814	aese.8	q6, q3
 4815	aesmc.8	q6, q6
 4816	aese.8	q6, q7
 4817	aesmc.8	q6, q6
 4818	aese.8	q6, q8
 4819	aesmc.8	q6, q6
 4820	aese.8	q6, q9
 4821	aesmc.8	q6, q6
 4822	aese.8	q6, q10
 4823	aesmc.8	q6, q6
 4824	aese.8	q6, q11
 4825	aesmc.8	q6, q6
 4826	aese.8	q6, q12
 4827	veor.8	q6, q6, q13
 4828#endif /* !NO_AES_128 */
 4829L_aes_gcm_encrypt_arm32_crypto_done_enc:
 4830	# aadSz
 4831	ldr	r6, [sp, #116]
 4832	# gcm_h
 4833	ldr	r8, [sp, #124]
 4834	sub	r1, r1, r2
 4835	vmov.i8	q13, #0x87
 4836	veor.8	q7, q7, q7
 4837	vshr.u64	q13, q13, #56
 4838	vld1.32	{q8}, [r8]
 4839	orr	r10, r6, r2
 4840	cmp	r10, #32
 4841	blt	L_aes_gcm_encrypt_arm32_crypto_h_done
 4842	# Square H => H^2
 4843	vmull.p64	q1, d17, d17
 4844	vmull.p64	q0, d16, d16
 4845	vmull.p64	q9, d3, d27
 4846	veor.8	d2, d2, d19
 4847	veor.8	d1, d1, d18
 4848	vmull.p64	q9, d2, d26
 4849	veor.8	q9, q9, q0
 4850	cmp	r10, #0x40
 4851	blt	L_aes_gcm_encrypt_arm32_crypto_h_done
 4852	# Multiply H and H^2  => H^3
 4853	vmull.p64	q2, d17, d18
 4854	vmull.p64	q3, d16, d19
 4855	vmull.p64	q0, d16, d18
 4856	vmull.p64	q1, d17, d19
 4857	veor.8	q2, q2, q3
 4858	#   Reduce
 4859	vmull.p64	q10, d3, d27
 4860	veor.8	d2, d2, d5
 4861	veor.8	d1, d1, d4
 4862	veor.8	d2, d2, d21
 4863	veor.8	d1, d1, d20
 4864	vmull.p64	q10, d2, d26
 4865	veor.8	q10, q10, q0
 4866	# Square H^2 => H^4
 4867	vmull.p64	q1, d19, d19
 4868	vmull.p64	q0, d18, d18
 4869	vmull.p64	q11, d3, d27
 4870	veor.8	d2, d2, d23
 4871	veor.8	d1, d1, d22
 4872	vmull.p64	q11, d2, d26
 4873	veor.8	q11, q11, q0
 4874	# Done
 4875L_aes_gcm_encrypt_arm32_crypto_h_done:
 4876	# aad
 4877	ldr	r5, [sp, #112]
 4878	lsr	r10, r6, #4
 4879	cmp	r10, #1
 4880	blt	L_aes_gcm_encrypt_arm32_crypto_aad_done
 4881	beq	L_aes_gcm_encrypt_arm32_crypto_aad_start_1
 4882	cmp	r10, #4
 4883	blt	L_aes_gcm_encrypt_arm32_crypto_aad_start_2
 4884L_aes_gcm_encrypt_arm32_crypto_aad_start_4:
 4885	vldm	r5!, {q0-q2}
 4886	vmov.i8	q12, #0x55
 4887	vmov.i8	q5, #51
 4888	vshl.u8	q14, q0, #1
 4889	vshl.u8	q15, q1, #1
 4890	vshl.u8	q4, q2, #1
 4891	ldr	lr, [r5], #4
 4892	vshr.u8	q0, q0, #1
 4893	vshr.u8	q1, q1, #1
 4894	vshr.u8	q2, q2, #1
 4895	ldr	r4, [r5], #4
 4896	vbit.8	q14, q0, q12
 4897	vbit.8	q15, q1, q12
 4898	vbit.8	q4, q2, q12
 4899	ldr	r8, [r5], #4
 4900	vshl.u8	q0, q14, #2
 4901	vshl.u8	q1, q15, #2
 4902	vshl.u8	q2, q4, #2
 4903	ldr	r12, [r5], #4
 4904	vshr.u8	q14, q14, #2
 4905	vshr.u8	q15, q15, #2
 4906	vshr.u8	q4, q4, #2
 4907	rbit	lr, lr
 4908	vbit.8	q0, q14, q5
 4909	rbit	r4, r4
 4910	vbit.8	q1, q15, q5
 4911	rbit	r8, r8
 4912	vbit.8	q2, q4, q5
 4913	rbit	r12, r12
 4914	vshl.u8	q14, q0, #4
 4915	rev	lr, lr
 4916	vshl.u8	q15, q1, #4
 4917	rev	r4, r4
 4918	vshl.u8	q4, q2, #4
 4919	rev	r8, r8
 4920	vsri.u8	q14, q0, #4
 4921	rev	r12, r12
 4922	vsri.u8	q15, q1, #4
 4923	vsri.u8	q4, q2, #4
 4924	vmov	d10, lr, r4
 4925	vmov	d11, r8, r12
 4926	veor.8	q12, q7, q14
 4927	#   X  = C * H^1
 4928	vmull.p64	q2, d11, d16
 4929	vmull.p64	q7, d10, d17
 4930	vmull.p64	q0, d10, d16
 4931	vmull.p64	q1, d11, d17
 4932	veor.8	q2, q2, q7
 4933	#   X += C * H^2
 4934	vmull.p64	q3, d8, d18
 4935	vmull.p64	q7, d9, d19
 4936	veor.8	q0, q0, q3
 4937	veor.8	q1, q1, q7
 4938	vmull.p64	q3, d9, d18
 4939	vmull.p64	q7, d8, d19
 4940	veor.8	q2, q2, q3
 4941	veor.8	q2, q2, q7
 4942	#   X += C * H^3
 4943	vmull.p64	q3, d30, d20
 4944	vmull.p64	q7, d31, d21
 4945	veor.8	q0, q0, q3
 4946	veor.8	q1, q1, q7
 4947	vmull.p64	q3, d31, d20
 4948	vmull.p64	q7, d30, d21
 4949	veor.8	q2, q2, q3
 4950	veor.8	q2, q2, q7
 4951	#   X += C * H^4
 4952	vmull.p64	q3, d24, d22
 4953	vmull.p64	q7, d25, d23
 4954	veor.8	q0, q0, q3
 4955	veor.8	q1, q1, q7
 4956	vmull.p64	q3, d25, d22
 4957	vmull.p64	q7, d24, d23
 4958	veor.8	q2, q2, q3
 4959	veor.8	q2, q2, q7
 4960	#   Reduce
 4961	vmull.p64	q7, d3, d27
 4962	veor.8	d2, d2, d5
 4963	veor.8	d1, d1, d4
 4964	veor.8	d2, d2, d15
 4965	veor.8	d1, d1, d14
 4966	vmull.p64	q7, d2, d26
 4967	veor.8	q7, q7, q0
 4968	# Done GHASH
 4969	sub	r10, r10, #4
 4970	cmp	r10, #4
 4971	bge	L_aes_gcm_encrypt_arm32_crypto_aad_start_4
 4972	cmp	r10, #1
 4973	blt	L_aes_gcm_encrypt_arm32_crypto_aad_done
 4974	beq	L_aes_gcm_encrypt_arm32_crypto_aad_start_1
 4975L_aes_gcm_encrypt_arm32_crypto_aad_start_2:
 4976	vld1.32	{q14-q15}, [r5]!
 4977	vmov.i8	q12, #0x55
 4978	vshl.u8	q0, q14, #1
 4979	vshl.u8	q1, q15, #1
 4980	vshr.u8	q14, q14, #1
 4981	vshr.u8	q15, q15, #1
 4982	vbif.8	q14, q0, q12
 4983	vbif.8	q15, q1, q12
 4984	vmov.i8	q12, #51
 4985	vshl.u8	q0, q14, #2
 4986	vshl.u8	q1, q15, #2
 4987	vshr.u8	q14, q14, #2
 4988	vshr.u8	q15, q15, #2
 4989	vbit.8	q0, q14, q12
 4990	vbit.8	q1, q15, q12
 4991	vshl.u8	q14, q0, #4
 4992	vshl.u8	q15, q1, #4
 4993	vsri.u8	q14, q0, #4
 4994	vsri.u8	q15, q1, #4
 4995	veor.8	q12, q7, q14
 4996	#   X  = C * H^1
 4997	vmull.p64	q2, d31, d16
 4998	vmull.p64	q7, d30, d17
 4999	vmull.p64	q0, d30, d16
 5000	vmull.p64	q1, d31, d17
 5001	veor.8	q2, q2, q7
 5002	#   X += C * H^2
 5003	vmull.p64	q3, d24, d18
 5004	vmull.p64	q7, d25, d19
 5005	veor.8	q0, q0, q3
 5006	veor.8	q1, q1, q7
 5007	vmull.p64	q3, d25, d18
 5008	vmull.p64	q7, d24, d19
 5009	veor.8	q2, q2, q3
 5010	veor.8	q2, q2, q7
 5011	#   Reduce
 5012	vmull.p64	q7, d3, d27
 5013	veor.8	d2, d2, d5
 5014	veor.8	d1, d1, d4
 5015	veor.8	d2, d2, d15
 5016	veor.8	d1, d1, d14
 5017	vmull.p64	q7, d2, d26
 5018	veor.8	q7, q7, q0
 5019	# Done GHASH
 5020	sub	r10, r10, #2
 5021	cmp	r10, #0
 5022	beq	L_aes_gcm_encrypt_arm32_crypto_aad_done
 5023L_aes_gcm_encrypt_arm32_crypto_aad_start_1:
 5024	vld1.32	{q14}, [r5]!
 5025	vmov.i8	q12, #0x55
 5026	vshl.u8	q0, q14, #1
 5027	vshr.u8	q14, q14, #1
 5028	vbif.8	q14, q0, q12
 5029	vmov.i8	q12, #51
 5030	vshl.u8	q0, q14, #2
 5031	vshr.u8	q14, q14, #2
 5032	vbit.8	q0, q14, q12
 5033	vshl.u8	q14, q0, #4
 5034	vsri.u8	q14, q0, #4
 5035	veor.8	q12, q7, q14
 5036	#   X  = C * H^1
 5037	vmull.p64	q2, d25, d16
 5038	vmull.p64	q7, d24, d17
 5039	vmull.p64	q0, d24, d16
 5040	vmull.p64	q1, d25, d17
 5041	veor.8	q2, q2, q7
 5042	#   Reduce
 5043	vmull.p64	q7, d3, d27
 5044	veor.8	d2, d2, d5
 5045	veor.8	d1, d1, d4
 5046	veor.8	d2, d2, d15
 5047	veor.8	d1, d1, d14
 5048	vmull.p64	q7, d2, d26
 5049	veor.8	q7, q7, q0
 5050	# Done GHASH
 5051L_aes_gcm_encrypt_arm32_crypto_aad_done:
 5052	ands	r11, r6, #15
 5053	beq	L_aes_gcm_encrypt_arm32_crypto_aad_partial_done
 5054	veor.8	q0, q0, q0
 5055	mov	r12, r11
 5056	vst1.32	{q0}, [r9]
 5057	cmp	r12, #4
 5058	blt	L_aes_gcm_encrypt_arm32_crypto_aad_start_sw
 5059L_aes_gcm_encrypt_arm32_crypto_aad_start_dw:
 5060	ldr	r8, [r5], #4
 5061	sub	r12, r12, #4
 5062	str	r8, [r9], #4
 5063	cmp	r12, #4
 5064	bge	L_aes_gcm_encrypt_arm32_crypto_aad_start_dw
 5065L_aes_gcm_encrypt_arm32_crypto_aad_start_sw:
 5066	cmp	r12, #2
 5067	blt	L_aes_gcm_encrypt_arm32_crypto_aad_start_byte
 5068	ldrh	r8, [r5], #2
 5069	sub	r12, r12, #2
 5070	strh	r8, [r9], #2
 5071L_aes_gcm_encrypt_arm32_crypto_aad_start_byte:
 5072	cmp	r12, #1
 5073	blt	L_aes_gcm_encrypt_arm32_crypto_aad_end_bytes
 5074	ldrb	r8, [r5], #1
 5075	subs	r12, r12, #1
 5076	strb	r8, [r9], #1
 5077	bne	L_aes_gcm_encrypt_arm32_crypto_aad_start_byte
 5078L_aes_gcm_encrypt_arm32_crypto_aad_end_bytes:
 5079	sub	r9, r9, r11
 5080	vld1.32	{q14}, [r9]
 5081	vmov.i8	q12, #0x55
 5082	vshl.u8	q0, q14, #1
 5083	vshr.u8	q14, q14, #1
 5084	vbif.8	q14, q0, q12
 5085	vmov.i8	q12, #51
 5086	vshl.u8	q0, q14, #2
 5087	vshr.u8	q14, q14, #2
 5088	vbit.8	q0, q14, q12
 5089	vshl.u8	q14, q0, #4
 5090	vsri.u8	q14, q0, #4
 5091	veor.8	q12, q7, q14
 5092	#   X  = C * H^1
 5093	vmull.p64	q2, d25, d16
 5094	vmull.p64	q7, d24, d17
 5095	vmull.p64	q0, d24, d16
 5096	vmull.p64	q1, d25, d17
 5097	veor.8	q2, q2, q7
 5098	#   Reduce
 5099	vmull.p64	q7, d3, d27
 5100	veor.8	d2, d2, d5
 5101	veor.8	d1, d1, d4
 5102	veor.8	d2, d2, d15
 5103	veor.8	d1, d1, d14
 5104	vmull.p64	q7, d2, d26
 5105	veor.8	q7, q7, q0
 5106	# Done GHASH
 5107L_aes_gcm_encrypt_arm32_crypto_aad_partial_done:
 5108	# out
 5109	lsr	r10, r2, #4
 5110	cmp	r10, #1
 5111	blt	L_aes_gcm_encrypt_arm32_crypto_out_done
 5112	beq	L_aes_gcm_encrypt_arm32_crypto_out_start_1
 5113	cmp	r10, #4
 5114	blt	L_aes_gcm_encrypt_arm32_crypto_out_start_2
 5115L_aes_gcm_encrypt_arm32_crypto_out_start_4:
 5116	vldm	r1!, {q0-q2}
 5117	vmov.i8	q12, #0x55
 5118	vmov.i8	q5, #51
 5119	vshl.u8	q14, q0, #1
 5120	vshl.u8	q15, q1, #1
 5121	vshl.u8	q4, q2, #1
 5122	ldr	lr, [r1], #4
 5123	vshr.u8	q0, q0, #1
 5124	vshr.u8	q1, q1, #1
 5125	vshr.u8	q2, q2, #1
 5126	ldr	r4, [r1], #4
 5127	vbit.8	q14, q0, q12
 5128	vbit.8	q15, q1, q12
 5129	vbit.8	q4, q2, q12
 5130	ldr	r8, [r1], #4
 5131	vshl.u8	q0, q14, #2
 5132	vshl.u8	q1, q15, #2
 5133	vshl.u8	q2, q4, #2
 5134	ldr	r12, [r1], #4
 5135	vshr.u8	q14, q14, #2
 5136	vshr.u8	q15, q15, #2
 5137	vshr.u8	q4, q4, #2
 5138	rbit	lr, lr
 5139	vbit.8	q0, q14, q5
 5140	rbit	r4, r4
 5141	vbit.8	q1, q15, q5
 5142	rbit	r8, r8
 5143	vbit.8	q2, q4, q5
 5144	rbit	r12, r12
 5145	vshl.u8	q14, q0, #4
 5146	rev	lr, lr
 5147	vshl.u8	q15, q1, #4
 5148	rev	r4, r4
 5149	vshl.u8	q4, q2, #4
 5150	rev	r8, r8
 5151	vsri.u8	q14, q0, #4
 5152	rev	r12, r12
 5153	vsri.u8	q15, q1, #4
 5154	vsri.u8	q4, q2, #4
 5155	vmov	d10, lr, r4
 5156	vmov	d11, r8, r12
 5157	veor.8	q12, q7, q14
 5158	#   X  = C * H^1
 5159	vmull.p64	q2, d11, d16
 5160	vmull.p64	q7, d10, d17
 5161	vmull.p64	q0, d10, d16
 5162	vmull.p64	q1, d11, d17
 5163	veor.8	q2, q2, q7
 5164	#   X += C * H^2
 5165	vmull.p64	q3, d8, d18
 5166	vmull.p64	q7, d9, d19
 5167	veor.8	q0, q0, q3
 5168	veor.8	q1, q1, q7
 5169	vmull.p64	q3, d9, d18
 5170	vmull.p64	q7, d8, d19
 5171	veor.8	q2, q2, q3
 5172	veor.8	q2, q2, q7
 5173	#   X += C * H^3
 5174	vmull.p64	q3, d30, d20
 5175	vmull.p64	q7, d31, d21
 5176	veor.8	q0, q0, q3
 5177	veor.8	q1, q1, q7
 5178	vmull.p64	q3, d31, d20
 5179	vmull.p64	q7, d30, d21
 5180	veor.8	q2, q2, q3
 5181	veor.8	q2, q2, q7
 5182	#   X += C * H^4
 5183	vmull.p64	q3, d24, d22
 5184	vmull.p64	q7, d25, d23
 5185	veor.8	q0, q0, q3
 5186	veor.8	q1, q1, q7
 5187	vmull.p64	q3, d25, d22
 5188	vmull.p64	q7, d24, d23
 5189	veor.8	q2, q2, q3
 5190	veor.8	q2, q2, q7
 5191	#   Reduce
 5192	vmull.p64	q7, d3, d27
 5193	veor.8	d2, d2, d5
 5194	veor.8	d1, d1, d4
 5195	veor.8	d2, d2, d15
 5196	veor.8	d1, d1, d14
 5197	vmull.p64	q7, d2, d26
 5198	veor.8	q7, q7, q0
 5199	# Done GHASH
 5200	sub	r10, r10, #4
 5201	cmp	r10, #4
 5202	bge	L_aes_gcm_encrypt_arm32_crypto_out_start_4
 5203	cmp	r10, #1
 5204	blt	L_aes_gcm_encrypt_arm32_crypto_out_done
 5205	beq	L_aes_gcm_encrypt_arm32_crypto_out_start_1
 5206L_aes_gcm_encrypt_arm32_crypto_out_start_2:
 5207	vld1.32	{q14-q15}, [r1]!
 5208	vmov.i8	q12, #0x55
 5209	vshl.u8	q0, q14, #1
 5210	vshl.u8	q1, q15, #1
 5211	vshr.u8	q14, q14, #1
 5212	vshr.u8	q15, q15, #1
 5213	vbif.8	q14, q0, q12
 5214	vbif.8	q15, q1, q12
 5215	vmov.i8	q12, #51
 5216	vshl.u8	q0, q14, #2
 5217	vshl.u8	q1, q15, #2
 5218	vshr.u8	q14, q14, #2
 5219	vshr.u8	q15, q15, #2
 5220	vbit.8	q0, q14, q12
 5221	vbit.8	q1, q15, q12
 5222	vshl.u8	q14, q0, #4
 5223	vshl.u8	q15, q1, #4
 5224	vsri.u8	q14, q0, #4
 5225	vsri.u8	q15, q1, #4
 5226	veor.8	q12, q7, q14
 5227	#   X  = C * H^1
 5228	vmull.p64	q2, d31, d16
 5229	vmull.p64	q7, d30, d17
 5230	vmull.p64	q0, d30, d16
 5231	vmull.p64	q1, d31, d17
 5232	veor.8	q2, q2, q7
 5233	#   X += C * H^2
 5234	vmull.p64	q3, d24, d18
 5235	vmull.p64	q7, d25, d19
 5236	veor.8	q0, q0, q3
 5237	veor.8	q1, q1, q7
 5238	vmull.p64	q3, d25, d18
 5239	vmull.p64	q7, d24, d19
 5240	veor.8	q2, q2, q3
 5241	veor.8	q2, q2, q7
 5242	#   Reduce
 5243	vmull.p64	q7, d3, d27
 5244	veor.8	d2, d2, d5
 5245	veor.8	d1, d1, d4
 5246	veor.8	d2, d2, d15
 5247	veor.8	d1, d1, d14
 5248	vmull.p64	q7, d2, d26
 5249	veor.8	q7, q7, q0
 5250	# Done GHASH
 5251	sub	r10, r10, #2
 5252	cmp	r10, #0
 5253	beq	L_aes_gcm_encrypt_arm32_crypto_out_done
 5254L_aes_gcm_encrypt_arm32_crypto_out_start_1:
 5255	vld1.32	{q14}, [r1]!
 5256	vmov.i8	q12, #0x55
 5257	vshl.u8	q0, q14, #1
 5258	vshr.u8	q14, q14, #1
 5259	vbif.8	q14, q0, q12
 5260	vmov.i8	q12, #51
 5261	vshl.u8	q0, q14, #2
 5262	vshr.u8	q14, q14, #2
 5263	vbit.8	q0, q14, q12
 5264	vshl.u8	q14, q0, #4
 5265	vsri.u8	q14, q0, #4
 5266	veor.8	q12, q7, q14
 5267	#   X  = C * H^1
 5268	vmull.p64	q2, d25, d16
 5269	vmull.p64	q7, d24, d17
 5270	vmull.p64	q0, d24, d16
 5271	vmull.p64	q1, d25, d17
 5272	veor.8	q2, q2, q7
 5273	#   Reduce
 5274	vmull.p64	q7, d3, d27
 5275	veor.8	d2, d2, d5
 5276	veor.8	d1, d1, d4
 5277	veor.8	d2, d2, d15
 5278	veor.8	d1, d1, d14
 5279	vmull.p64	q7, d2, d26
 5280	veor.8	q7, q7, q0
 5281	# Done GHASH
 5282L_aes_gcm_encrypt_arm32_crypto_out_done:
 5283	ands	r11, r2, #15
 5284	beq	L_aes_gcm_encrypt_arm32_crypto_out_partial_done
 5285	veor.8	q0, q0, q0
 5286	mov	r12, r11
 5287	vst1.32	{q0}, [r9]
 5288	cmp	r12, #4
 5289	blt	L_aes_gcm_encrypt_arm32_crypto_out_start_sw
 5290L_aes_gcm_encrypt_arm32_crypto_out_start_dw:
 5291	ldr	r8, [r1], #4
 5292	sub	r12, r12, #4
 5293	str	r8, [r9], #4
 5294	cmp	r12, #4
 5295	bge	L_aes_gcm_encrypt_arm32_crypto_out_start_dw
 5296L_aes_gcm_encrypt_arm32_crypto_out_start_sw:
 5297	cmp	r12, #2
 5298	blt	L_aes_gcm_encrypt_arm32_crypto_out_start_byte
 5299	ldrh	r8, [r1], #2
 5300	sub	r12, r12, #2
 5301	strh	r8, [r9], #2
 5302L_aes_gcm_encrypt_arm32_crypto_out_start_byte:
 5303	cmp	r12, #1
 5304	blt	L_aes_gcm_encrypt_arm32_crypto_out_end_bytes
 5305	ldrb	r8, [r1], #1
 5306	subs	r12, r12, #1
 5307	strb	r8, [r9], #1
 5308	bne	L_aes_gcm_encrypt_arm32_crypto_out_start_byte
 5309L_aes_gcm_encrypt_arm32_crypto_out_end_bytes:
 5310	sub	r9, r9, r11
 5311	vld1.32	{q14}, [r9]
 5312	vmov.i8	q12, #0x55
 5313	vshl.u8	q0, q14, #1
 5314	vshr.u8	q14, q14, #1
 5315	vbif.8	q14, q0, q12
 5316	vmov.i8	q12, #51
 5317	vshl.u8	q0, q14, #2
 5318	vshr.u8	q14, q14, #2
 5319	vbit.8	q0, q14, q12
 5320	vshl.u8	q14, q0, #4
 5321	vsri.u8	q14, q0, #4
 5322	veor.8	q12, q7, q14
 5323	#   X  = C * H^1
 5324	vmull.p64	q2, d25, d16
 5325	vmull.p64	q7, d24, d17
 5326	vmull.p64	q0, d24, d16
 5327	vmull.p64	q1, d25, d17
 5328	veor.8	q2, q2, q7
 5329	#   Reduce
 5330	vmull.p64	q7, d3, d27
 5331	veor.8	d2, d2, d5
 5332	veor.8	d1, d1, d4
 5333	veor.8	d2, d2, d15
 5334	veor.8	d1, d1, d14
 5335	vmull.p64	q7, d2, d26
 5336	veor.8	q7, q7, q0
 5337	# Done GHASH
 5338L_aes_gcm_encrypt_arm32_crypto_out_partial_done:
 5339	lsr	lr, r6, #29
 5340	lsl	r6, r6, #3
 5341	rbit	lr, lr
 5342	rbit	r6, r6
 5343	vmov	s0, lr
 5344	vmov	s1, r6
 5345	lsr	lr, r2, #29
 5346	lsl	r2, r2, #3
 5347	rbit	lr, lr
 5348	rbit	r2, r2
 5349	vmov	s2, lr
 5350	vmov	s3, r2
 5351	veor.8	q7, q7, q0
 5352	vmull.p64	q2, d15, d16
 5353	vmull.p64	q3, d14, d17
 5354	vmull.p64	q0, d14, d16
 5355	vmull.p64	q1, d15, d17
 5356	veor.8	q2, q2, q3
 5357	#   Reduce
 5358	vmull.p64	q7, d3, d27
 5359	veor.8	d2, d2, d5
 5360	veor.8	d1, d1, d4
 5361	veor.8	d2, d2, d15
 5362	veor.8	d1, d1, d14
 5363	vmull.p64	q7, d2, d26
 5364	veor.8	q7, q7, q0
 5365	vmov.i8	q0, #0x55
 5366	vshl.u8	q1, q7, #1
 5367	vshr.u8	q7, q7, #1
 5368	vbif.8	q7, q1, q0
 5369	vmov.i8	q0, #51
 5370	vshl.u8	q1, q7, #2
 5371	vshr.u8	q7, q7, #2
 5372	vbit.8	q1, q7, q0
 5373	vshl.u8	q7, q1, #4
 5374	vsri.u8	q7, q1, #4
 5375	# DONE
 5376	veor.8	q7, q7, q6
 5377	# tag
 5378	ldr	lr, [sp, #104]
 5379	# tagSz
 5380	ldr	r4, [sp, #108]
 5381	cmp	r4, #16
 5382	bne	L_aes_gcm_encrypt_arm32_crypto_tag_tag_partial
 5383	vst1.8	{q7}, [lr]
 5384	b	L_aes_gcm_encrypt_arm32_crypto_done_gcm
 5385L_aes_gcm_encrypt_arm32_crypto_tag_tag_partial:
 5386	vst1.8	{q7}, [r9]
 5387	cmp	r4, #4
 5388	blt	L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_sw
 5389L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_dw:
 5390	ldr	r8, [r9], #4
 5391	sub	r4, r4, #4
 5392	str	r8, [lr], #4
 5393	cmp	r4, #4
 5394	bge	L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_dw
 5395L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_sw:
 5396	cmp	r4, #2
 5397	blt	L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_byte
 5398	ldrh	r8, [r9], #2
 5399	sub	r4, r4, #2
 5400	strh	r8, [lr], #2
 5401L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_byte:
 5402	cmp	r4, #1
 5403	blt	L_aes_gcm_encrypt_arm32_crypto_tag_tag_end_bytes
 5404	ldrb	r8, [r9], #1
 5405	subs	r4, r4, #1
 5406	strb	r8, [lr], #1
 5407	bne	L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_byte
 5408L_aes_gcm_encrypt_arm32_crypto_tag_tag_end_bytes:
 5409L_aes_gcm_encrypt_arm32_crypto_done_gcm:
 5410	vpop	{d8-d15}
 5411	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
 5412	.size	AES_GCM_encrypt_AARCH32,.-AES_GCM_encrypt_AARCH32
 5413#ifdef HAVE_AES_DECRYPT
 5414	.text
 5415	.align	4
 5416	.globl	AES_GCM_decrypt_AARCH32
 5417	.type	AES_GCM_decrypt_AARCH32, %function
 5418AES_GCM_decrypt_AARCH32:
 5419	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
 5420	vpush	{d8-d15}
 5421	# key
 5422	ldr	r7, [sp, #120]
 5423	# tmp
 5424	ldr	r9, [sp, #128]
 5425	# aadSz
 5426	ldr	r6, [sp, #116]
 5427	# gcm_h
 5428	ldr	r8, [sp, #124]
 5429	vmov.i8	q13, #0x87
 5430	veor.8	q7, q7, q7
 5431	vshr.u64	q13, q13, #56
 5432	vld1.32	{q8}, [r8]
 5433	orr	r10, r6, r2
 5434	cmp	r10, #32
 5435	blt	L_aes_gcm_decrypt_arm32_crypto_h_done
 5436	# Square H => H^2
 5437	vmull.p64	q1, d17, d17
 5438	vmull.p64	q0, d16, d16
 5439	vmull.p64	q9, d3, d27
 5440	veor.8	d2, d2, d19
 5441	veor.8	d1, d1, d18
 5442	vmull.p64	q9, d2, d26
 5443	veor.8	q9, q9, q0
 5444	cmp	r10, #0x40
 5445	blt	L_aes_gcm_decrypt_arm32_crypto_h_done
 5446	# Multiply H and H^2  => H^3
 5447	vmull.p64	q2, d17, d18
 5448	vmull.p64	q3, d16, d19
 5449	vmull.p64	q0, d16, d18
 5450	vmull.p64	q1, d17, d19
 5451	veor.8	q2, q2, q3
 5452	#   Reduce
 5453	vmull.p64	q10, d3, d27
 5454	veor.8	d2, d2, d5
 5455	veor.8	d1, d1, d4
 5456	veor.8	d2, d2, d21
 5457	veor.8	d1, d1, d20
 5458	vmull.p64	q10, d2, d26
 5459	veor.8	q10, q10, q0
 5460	# Square H^2 => H^4
 5461	vmull.p64	q1, d19, d19
 5462	vmull.p64	q0, d18, d18
 5463	vmull.p64	q11, d3, d27
 5464	veor.8	d2, d2, d23
 5465	veor.8	d1, d1, d22
 5466	vmull.p64	q11, d2, d26
 5467	veor.8	q11, q11, q0
 5468	# Done
 5469L_aes_gcm_decrypt_arm32_crypto_h_done:
 5470	# aad
 5471	ldr	r5, [sp, #112]
 5472	lsr	r10, r6, #4
 5473	cmp	r10, #1
 5474	blt	L_aes_gcm_decrypt_arm32_crypto_aad_done
 5475	beq	L_aes_gcm_decrypt_arm32_crypto_aad_start_1
 5476	cmp	r10, #4
 5477	blt	L_aes_gcm_decrypt_arm32_crypto_aad_start_2
 5478L_aes_gcm_decrypt_arm32_crypto_aad_start_4:
 5479	vldm	r5!, {q0-q2}
 5480	vmov.i8	q12, #0x55
 5481	vmov.i8	q5, #51
 5482	vshl.u8	q14, q0, #1
 5483	vshl.u8	q15, q1, #1
 5484	vshl.u8	q4, q2, #1
 5485	ldr	lr, [r5], #4
 5486	vshr.u8	q0, q0, #1
 5487	vshr.u8	q1, q1, #1
 5488	vshr.u8	q2, q2, #1
 5489	ldr	r4, [r5], #4
 5490	vbit.8	q14, q0, q12
 5491	vbit.8	q15, q1, q12
 5492	vbit.8	q4, q2, q12
 5493	ldr	r8, [r5], #4
 5494	vshl.u8	q0, q14, #2
 5495	vshl.u8	q1, q15, #2
 5496	vshl.u8	q2, q4, #2
 5497	ldr	r12, [r5], #4
 5498	vshr.u8	q14, q14, #2
 5499	vshr.u8	q15, q15, #2
 5500	vshr.u8	q4, q4, #2
 5501	rbit	lr, lr
 5502	vbit.8	q0, q14, q5
 5503	rbit	r4, r4
 5504	vbit.8	q1, q15, q5
 5505	rbit	r8, r8
 5506	vbit.8	q2, q4, q5
 5507	rbit	r12, r12
 5508	vshl.u8	q14, q0, #4
 5509	rev	lr, lr
 5510	vshl.u8	q15, q1, #4
 5511	rev	r4, r4
 5512	vshl.u8	q4, q2, #4
 5513	rev	r8, r8
 5514	vsri.u8	q14, q0, #4
 5515	rev	r12, r12
 5516	vsri.u8	q15, q1, #4
 5517	vsri.u8	q4, q2, #4
 5518	vmov	d10, lr, r4
 5519	vmov	d11, r8, r12
 5520	veor.8	q12, q7, q14
 5521	#   X  = C * H^1
 5522	vmull.p64	q2, d11, d16
 5523	vmull.p64	q7, d10, d17
 5524	vmull.p64	q0, d10, d16
 5525	vmull.p64	q1, d11, d17
 5526	veor.8	q2, q2, q7
 5527	#   X += C * H^2
 5528	vmull.p64	q3, d8, d18
 5529	vmull.p64	q7, d9, d19
 5530	veor.8	q0, q0, q3
 5531	veor.8	q1, q1, q7
 5532	vmull.p64	q3, d9, d18
 5533	vmull.p64	q7, d8, d19
 5534	veor.8	q2, q2, q3
 5535	veor.8	q2, q2, q7
 5536	#   X += C * H^3
 5537	vmull.p64	q3, d30, d20
 5538	vmull.p64	q7, d31, d21
 5539	veor.8	q0, q0, q3
 5540	veor.8	q1, q1, q7
 5541	vmull.p64	q3, d31, d20
 5542	vmull.p64	q7, d30, d21
 5543	veor.8	q2, q2, q3
 5544	veor.8	q2, q2, q7
 5545	#   X += C * H^4
 5546	vmull.p64	q3, d24, d22
 5547	vmull.p64	q7, d25, d23
 5548	veor.8	q0, q0, q3
 5549	veor.8	q1, q1, q7
 5550	vmull.p64	q3, d25, d22
 5551	vmull.p64	q7, d24, d23
 5552	veor.8	q2, q2, q3
 5553	veor.8	q2, q2, q7
 5554	#   Reduce
 5555	vmull.p64	q7, d3, d27
 5556	veor.8	d2, d2, d5
 5557	veor.8	d1, d1, d4
 5558	veor.8	d2, d2, d15
 5559	veor.8	d1, d1, d14
 5560	vmull.p64	q7, d2, d26
 5561	veor.8	q7, q7, q0
 5562	# Done GHASH
 5563	sub	r10, r10, #4
 5564	cmp	r10, #4
 5565	bge	L_aes_gcm_decrypt_arm32_crypto_aad_start_4
 5566	cmp	r10, #1
 5567	blt	L_aes_gcm_decrypt_arm32_crypto_aad_done
 5568	beq	L_aes_gcm_decrypt_arm32_crypto_aad_start_1
 5569L_aes_gcm_decrypt_arm32_crypto_aad_start_2:
 5570	vld1.32	{q14-q15}, [r5]!
 5571	vmov.i8	q12, #0x55
 5572	vshl.u8	q0, q14, #1
 5573	vshl.u8	q1, q15, #1
 5574	vshr.u8	q14, q14, #1
 5575	vshr.u8	q15, q15, #1
 5576	vbif.8	q14, q0, q12
 5577	vbif.8	q15, q1, q12
 5578	vmov.i8	q12, #51
 5579	vshl.u8	q0, q14, #2
 5580	vshl.u8	q1, q15, #2
 5581	vshr.u8	q14, q14, #2
 5582	vshr.u8	q15, q15, #2
 5583	vbit.8	q0, q14, q12
 5584	vbit.8	q1, q15, q12
 5585	vshl.u8	q14, q0, #4
 5586	vshl.u8	q15, q1, #4
 5587	vsri.u8	q14, q0, #4
 5588	vsri.u8	q15, q1, #4
 5589	veor.8	q12, q7, q14
 5590	#   X  = C * H^1
 5591	vmull.p64	q2, d31, d16
 5592	vmull.p64	q7, d30, d17
 5593	vmull.p64	q0, d30, d16
 5594	vmull.p64	q1, d31, d17
 5595	veor.8	q2, q2, q7
 5596	#   X += C * H^2
 5597	vmull.p64	q3, d24, d18
 5598	vmull.p64	q7, d25, d19
 5599	veor.8	q0, q0, q3
 5600	veor.8	q1, q1, q7
 5601	vmull.p64	q3, d25, d18
 5602	vmull.p64	q7, d24, d19
 5603	veor.8	q2, q2, q3
 5604	veor.8	q2, q2, q7
 5605	#   Reduce
 5606	vmull.p64	q7, d3, d27
 5607	veor.8	d2, d2, d5
 5608	veor.8	d1, d1, d4
 5609	veor.8	d2, d2, d15
 5610	veor.8	d1, d1, d14
 5611	vmull.p64	q7, d2, d26
 5612	veor.8	q7, q7, q0
 5613	# Done GHASH
 5614	sub	r10, r10, #2
 5615	cmp	r10, #0
 5616	beq	L_aes_gcm_decrypt_arm32_crypto_aad_done
 5617L_aes_gcm_decrypt_arm32_crypto_aad_start_1:
 5618	vld1.32	{q14}, [r5]!
 5619	vmov.i8	q12, #0x55
 5620	vshl.u8	q0, q14, #1
 5621	vshr.u8	q14, q14, #1
 5622	vbif.8	q14, q0, q12
 5623	vmov.i8	q12, #51
 5624	vshl.u8	q0, q14, #2
 5625	vshr.u8	q14, q14, #2
 5626	vbit.8	q0, q14, q12
 5627	vshl.u8	q14, q0, #4
 5628	vsri.u8	q14, q0, #4
 5629	veor.8	q12, q7, q14
 5630	#   X  = C * H^1
 5631	vmull.p64	q2, d25, d16
 5632	vmull.p64	q7, d24, d17
 5633	vmull.p64	q0, d24, d16
 5634	vmull.p64	q1, d25, d17
 5635	veor.8	q2, q2, q7
 5636	#   Reduce
 5637	vmull.p64	q7, d3, d27
 5638	veor.8	d2, d2, d5
 5639	veor.8	d1, d1, d4
 5640	veor.8	d2, d2, d15
 5641	veor.8	d1, d1, d14
 5642	vmull.p64	q7, d2, d26
 5643	veor.8	q7, q7, q0
 5644	# Done GHASH
 5645L_aes_gcm_decrypt_arm32_crypto_aad_done:
 5646	ands	r11, r6, #15
 5647	beq	L_aes_gcm_decrypt_arm32_crypto_aad_partial_done
 5648	veor.8	q0, q0, q0
 5649	mov	r12, r11
 5650	vst1.32	{q0}, [r9]
 5651	cmp	r12, #4
 5652	blt	L_aes_gcm_decrypt_arm32_crypto_aad_start_sw
 5653L_aes_gcm_decrypt_arm32_crypto_aad_start_dw:
 5654	ldr	r8, [r5], #4
 5655	sub	r12, r12, #4
 5656	str	r8, [r9], #4
 5657	cmp	r12, #4
 5658	bge	L_aes_gcm_decrypt_arm32_crypto_aad_start_dw
 5659L_aes_gcm_decrypt_arm32_crypto_aad_start_sw:
 5660	cmp	r12, #2
 5661	blt	L_aes_gcm_decrypt_arm32_crypto_aad_start_byte
 5662	ldrh	r8, [r5], #2
 5663	sub	r12, r12, #2
 5664	strh	r8, [r9], #2
 5665L_aes_gcm_decrypt_arm32_crypto_aad_start_byte:
 5666	cmp	r12, #1
 5667	blt	L_aes_gcm_decrypt_arm32_crypto_aad_end_bytes
 5668	ldrb	r8, [r5], #1
 5669	subs	r12, r12, #1
 5670	strb	r8, [r9], #1
 5671	bne	L_aes_gcm_decrypt_arm32_crypto_aad_start_byte
 5672L_aes_gcm_decrypt_arm32_crypto_aad_end_bytes:
 5673	sub	r9, r9, r11
 5674	vld1.32	{q14}, [r9]
 5675	vmov.i8	q12, #0x55
 5676	vshl.u8	q0, q14, #1
 5677	vshr.u8	q14, q14, #1
 5678	vbif.8	q14, q0, q12
 5679	vmov.i8	q12, #51
 5680	vshl.u8	q0, q14, #2
 5681	vshr.u8	q14, q14, #2
 5682	vbit.8	q0, q14, q12
 5683	vshl.u8	q14, q0, #4
 5684	vsri.u8	q14, q0, #4
 5685	veor.8	q12, q7, q14
 5686	#   X  = C * H^1
 5687	vmull.p64	q2, d25, d16
 5688	vmull.p64	q7, d24, d17
 5689	vmull.p64	q0, d24, d16
 5690	vmull.p64	q1, d25, d17
 5691	veor.8	q2, q2, q7
 5692	#   Reduce
 5693	vmull.p64	q7, d3, d27
 5694	veor.8	d2, d2, d5
 5695	veor.8	d1, d1, d4
 5696	veor.8	d2, d2, d15
 5697	veor.8	d1, d1, d14
 5698	vmull.p64	q7, d2, d26
 5699	veor.8	q7, q7, q0
 5700	# Done GHASH
 5701L_aes_gcm_decrypt_arm32_crypto_aad_partial_done:
 5702	# in
 5703	lsr	r10, r2, #4
 5704	cmp	r10, #1
 5705	blt	L_aes_gcm_decrypt_arm32_crypto_in_done
 5706	beq	L_aes_gcm_decrypt_arm32_crypto_in_start_1
 5707	cmp	r10, #4
 5708	blt	L_aes_gcm_decrypt_arm32_crypto_in_start_2
 5709L_aes_gcm_decrypt_arm32_crypto_in_start_4:
 5710	vldm	r0!, {q0-q2}
 5711	vmov.i8	q12, #0x55
 5712	vmov.i8	q5, #51
 5713	vshl.u8	q14, q0, #1
 5714	vshl.u8	q15, q1, #1
 5715	vshl.u8	q4, q2, #1
 5716	ldr	lr, [r0], #4
 5717	vshr.u8	q0, q0, #1
 5718	vshr.u8	q1, q1, #1
 5719	vshr.u8	q2, q2, #1
 5720	ldr	r4, [r0], #4
 5721	vbit.8	q14, q0, q12
 5722	vbit.8	q15, q1, q12
 5723	vbit.8	q4, q2, q12
 5724	ldr	r8, [r0], #4
 5725	vshl.u8	q0, q14, #2
 5726	vshl.u8	q1, q15, #2
 5727	vshl.u8	q2, q4, #2
 5728	ldr	r12, [r0], #4
 5729	vshr.u8	q14, q14, #2
 5730	vshr.u8	q15, q15, #2
 5731	vshr.u8	q4, q4, #2
 5732	rbit	lr, lr
 5733	vbit.8	q0, q14, q5
 5734	rbit	r4, r4
 5735	vbit.8	q1, q15, q5
 5736	rbit	r8, r8
 5737	vbit.8	q2, q4, q5
 5738	rbit	r12, r12
 5739	vshl.u8	q14, q0, #4
 5740	rev	lr, lr
 5741	vshl.u8	q15, q1, #4
 5742	rev	r4, r4
 5743	vshl.u8	q4, q2, #4
 5744	rev	r8, r8
 5745	vsri.u8	q14, q0, #4
 5746	rev	r12, r12
 5747	vsri.u8	q15, q1, #4
 5748	vsri.u8	q4, q2, #4
 5749	vmov	d10, lr, r4
 5750	vmov	d11, r8, r12
 5751	veor.8	q12, q7, q14
 5752	#   X  = C * H^1
 5753	vmull.p64	q2, d11, d16
 5754	vmull.p64	q7, d10, d17
 5755	vmull.p64	q0, d10, d16
 5756	vmull.p64	q1, d11, d17
 5757	veor.8	q2, q2, q7
 5758	#   X += C * H^2
 5759	vmull.p64	q3, d8, d18
 5760	vmull.p64	q7, d9, d19
 5761	veor.8	q0, q0, q3
 5762	veor.8	q1, q1, q7
 5763	vmull.p64	q3, d9, d18
 5764	vmull.p64	q7, d8, d19
 5765	veor.8	q2, q2, q3
 5766	veor.8	q2, q2, q7
 5767	#   X += C * H^3
 5768	vmull.p64	q3, d30, d20
 5769	vmull.p64	q7, d31, d21
 5770	veor.8	q0, q0, q3
 5771	veor.8	q1, q1, q7
 5772	vmull.p64	q3, d31, d20
 5773	vmull.p64	q7, d30, d21
 5774	veor.8	q2, q2, q3
 5775	veor.8	q2, q2, q7
 5776	#   X += C * H^4
 5777	vmull.p64	q3, d24, d22
 5778	vmull.p64	q7, d25, d23
 5779	veor.8	q0, q0, q3
 5780	veor.8	q1, q1, q7
 5781	vmull.p64	q3, d25, d22
 5782	vmull.p64	q7, d24, d23
 5783	veor.8	q2, q2, q3
 5784	veor.8	q2, q2, q7
 5785	#   Reduce
 5786	vmull.p64	q7, d3, d27
 5787	veor.8	d2, d2, d5
 5788	veor.8	d1, d1, d4
 5789	veor.8	d2, d2, d15
 5790	veor.8	d1, d1, d14
 5791	vmull.p64	q7, d2, d26
 5792	veor.8	q7, q7, q0
 5793	# Done GHASH
 5794	sub	r10, r10, #4
 5795	cmp	r10, #4
 5796	bge	L_aes_gcm_decrypt_arm32_crypto_in_start_4
 5797	cmp	r10, #1
 5798	blt	L_aes_gcm_decrypt_arm32_crypto_in_done
 5799	beq	L_aes_gcm_decrypt_arm32_crypto_in_start_1
 5800L_aes_gcm_decrypt_arm32_crypto_in_start_2:
 5801	vld1.32	{q14-q15}, [r0]!
 5802	vmov.i8	q12, #0x55
 5803	vshl.u8	q0, q14, #1
 5804	vshl.u8	q1, q15, #1
 5805	vshr.u8	q14, q14, #1
 5806	vshr.u8	q15, q15, #1
 5807	vbif.8	q14, q0, q12
 5808	vbif.8	q15, q1, q12
 5809	vmov.i8	q12, #51
 5810	vshl.u8	q0, q14, #2
 5811	vshl.u8	q1, q15, #2
 5812	vshr.u8	q14, q14, #2
 5813	vshr.u8	q15, q15, #2
 5814	vbit.8	q0, q14, q12
 5815	vbit.8	q1, q15, q12
 5816	vshl.u8	q14, q0, #4
 5817	vshl.u8	q15, q1, #4
 5818	vsri.u8	q14, q0, #4
 5819	vsri.u8	q15, q1, #4
 5820	veor.8	q12, q7, q14
 5821	#   X  = C * H^1
 5822	vmull.p64	q2, d31, d16
 5823	vmull.p64	q7, d30, d17
 5824	vmull.p64	q0, d30, d16
 5825	vmull.p64	q1, d31, d17
 5826	veor.8	q2, q2, q7
 5827	#   X += C * H^2
 5828	vmull.p64	q3, d24, d18
 5829	vmull.p64	q7, d25, d19
 5830	veor.8	q0, q0, q3
 5831	veor.8	q1, q1, q7
 5832	vmull.p64	q3, d25, d18
 5833	vmull.p64	q7, d24, d19
 5834	veor.8	q2, q2, q3
 5835	veor.8	q2, q2, q7
 5836	#   Reduce
 5837	vmull.p64	q7, d3, d27
 5838	veor.8	d2, d2, d5
 5839	veor.8	d1, d1, d4
 5840	veor.8	d2, d2, d15
 5841	veor.8	d1, d1, d14
 5842	vmull.p64	q7, d2, d26
 5843	veor.8	q7, q7, q0
 5844	# Done GHASH
 5845	sub	r10, r10, #2
 5846	cmp	r10, #0
 5847	beq	L_aes_gcm_decrypt_arm32_crypto_in_done
 5848L_aes_gcm_decrypt_arm32_crypto_in_start_1:
 5849	vld1.32	{q14}, [r0]!
 5850	vmov.i8	q12, #0x55
 5851	vshl.u8	q0, q14, #1
 5852	vshr.u8	q14, q14, #1
 5853	vbif.8	q14, q0, q12
 5854	vmov.i8	q12, #51
 5855	vshl.u8	q0, q14, #2
 5856	vshr.u8	q14, q14, #2
 5857	vbit.8	q0, q14, q12
 5858	vshl.u8	q14, q0, #4
 5859	vsri.u8	q14, q0, #4
 5860	veor.8	q12, q7, q14
 5861	#   X  = C * H^1
 5862	vmull.p64	q2, d25, d16
 5863	vmull.p64	q7, d24, d17
 5864	vmull.p64	q0, d24, d16
 5865	vmull.p64	q1, d25, d17
 5866	veor.8	q2, q2, q7
 5867	#   Reduce
 5868	vmull.p64	q7, d3, d27
 5869	veor.8	d2, d2, d5
 5870	veor.8	d1, d1, d4
 5871	veor.8	d2, d2, d15
 5872	veor.8	d1, d1, d14
 5873	vmull.p64	q7, d2, d26
 5874	veor.8	q7, q7, q0
 5875	# Done GHASH
 5876L_aes_gcm_decrypt_arm32_crypto_in_done:
 5877	ands	r11, r2, #15
 5878	beq	L_aes_gcm_decrypt_arm32_crypto_in_partial_done
 5879	veor.8	q0, q0, q0
 5880	mov	r12, r11
 5881	vst1.32	{q0}, [r9]
 5882	cmp	r12, #4
 5883	blt	L_aes_gcm_decrypt_arm32_crypto_in_start_sw
 5884L_aes_gcm_decrypt_arm32_crypto_in_start_dw:
 5885	ldr	r8, [r0], #4
 5886	sub	r12, r12, #4
 5887	str	r8, [r9], #4
 5888	cmp	r12, #4
 5889	bge	L_aes_gcm_decrypt_arm32_crypto_in_start_dw
 5890L_aes_gcm_decrypt_arm32_crypto_in_start_sw:
 5891	cmp	r12, #2
 5892	blt	L_aes_gcm_decrypt_arm32_crypto_in_start_byte
 5893	ldrh	r8, [r0], #2
 5894	sub	r12, r12, #2
 5895	strh	r8, [r9], #2
 5896L_aes_gcm_decrypt_arm32_crypto_in_start_byte:
 5897	cmp	r12, #1
 5898	blt	L_aes_gcm_decrypt_arm32_crypto_in_end_bytes
 5899	ldrb	r8, [r0], #1
 5900	subs	r12, r12, #1
 5901	strb	r8, [r9], #1
 5902	bne	L_aes_gcm_decrypt_arm32_crypto_in_start_byte
 5903L_aes_gcm_decrypt_arm32_crypto_in_end_bytes:
 5904	sub	r9, r9, r11
 5905	vld1.32	{q14}, [r9]
 5906	vmov.i8	q12, #0x55
 5907	vshl.u8	q0, q14, #1
 5908	vshr.u8	q14, q14, #1
 5909	vbif.8	q14, q0, q12
 5910	vmov.i8	q12, #51
 5911	vshl.u8	q0, q14, #2
 5912	vshr.u8	q14, q14, #2
 5913	vbit.8	q0, q14, q12
 5914	vshl.u8	q14, q0, #4
 5915	vsri.u8	q14, q0, #4
 5916	veor.8	q12, q7, q14
 5917	#   X  = C * H^1
 5918	vmull.p64	q2, d25, d16
 5919	vmull.p64	q7, d24, d17
 5920	vmull.p64	q0, d24, d16
 5921	vmull.p64	q1, d25, d17
 5922	veor.8	q2, q2, q7
 5923	#   Reduce
 5924	vmull.p64	q7, d3, d27
 5925	veor.8	d2, d2, d5
 5926	veor.8	d1, d1, d4
 5927	veor.8	d2, d2, d15
 5928	veor.8	d1, d1, d14
 5929	vmull.p64	q7, d2, d26
 5930	veor.8	q7, q7, q0
 5931	# Done GHASH
 5932L_aes_gcm_decrypt_arm32_crypto_in_partial_done:
 5933	sub	r0, r0, r2
 5934L_aes_gcm_decrypt_arm32_crypto_done_gcm:
 5935	# nonceSz
 5936	ldr	r12, [sp, #100]
 5937	# Load Nonce
 5938	cmp	r12, #12
 5939	bne	L_aes_gcm_decrypt_arm32_crypto_ghash_nonce
 5940	ldr	r5, [r3]
 5941	ldr	r8, [r3, #4]
 5942	ldr	r12, [r3, #8]
 5943	vmov.i32	q6, #0x1000000
 5944	vmov.32	s24, r5
 5945	vmov.32	s25, r8
 5946	vmov.32	s26, r12
 5947	mov	r5, #1
 5948	b	L_aes_gcm_decrypt_arm32_crypto_done_nonce
 5949L_aes_gcm_decrypt_arm32_crypto_ghash_nonce:
 5950	lsr	r10, r12, #4
 5951	cmp	r10, #0
 5952	beq	L_aes_gcm_decrypt_arm32_crypto_nonce_done
 5953L_aes_gcm_decrypt_arm32_crypto_nonce_start_1:
 5954	vld1.32	{q14}, [r3]!
 5955	vmov.i8	q12, #0x55
 5956	vshl.u8	q0, q14, #1
 5957	vshr.u8	q14, q14, #1
 5958	vbif.8	q14, q0, q12
 5959	vmov.i8	q12, #51
 5960	vshl.u8	q0, q14, #2
 5961	vshr.u8	q14, q14, #2
 5962	vbit.8	q0, q14, q12
 5963	vshl.u8	q14, q0, #4
 5964	vsri.u8	q14, q0, #4
 5965	veor.8	q12, q6, q14
 5966	#   X  = C * H^1
 5967	vmull.p64	q2, d25, d16
 5968	vmull.p64	q6, d24, d17
 5969	vmull.p64	q0, d24, d16
 5970	vmull.p64	q1, d25, d17
 5971	veor.8	q2, q2, q6
 5972	#   Reduce
 5973	vmull.p64	q6, d3, d27
 5974	veor.8	d2, d2, d5
 5975	veor.8	d1, d1, d4
 5976	veor.8	d2, d2, d13
 5977	veor.8	d1, d1, d12
 5978	vmull.p64	q6, d2, d26
 5979	veor.8	q6, q6, q0
 5980	# Done GHASH
 5981	subs	r10, r10, #1
 5982	bne	L_aes_gcm_decrypt_arm32_crypto_nonce_start_1
 5983L_aes_gcm_decrypt_arm32_crypto_nonce_done:
 5984	ands	r11, r12, #15
 5985	beq	L_aes_gcm_decrypt_arm32_crypto_nonce_partial_done
 5986	veor.8	q0, q0, q0
 5987	mov	r12, r11
 5988	vst1.32	{q0}, [r9]
 5989	cmp	r12, #4
 5990	blt	L_aes_gcm_decrypt_arm32_crypto_nonce_start_sw
 5991L_aes_gcm_decrypt_arm32_crypto_nonce_start_dw:
 5992	ldr	r8, [r3], #4
 5993	sub	r12, r12, #4
 5994	str	r8, [r9], #4
 5995	cmp	r12, #4
 5996	bge	L_aes_gcm_decrypt_arm32_crypto_nonce_start_dw
 5997L_aes_gcm_decrypt_arm32_crypto_nonce_start_sw:
 5998	cmp	r12, #2
 5999	blt	L_aes_gcm_decrypt_arm32_crypto_nonce_start_byte
 6000	ldrh	r8, [r3], #2
 6001	sub	r12, r12, #2
 6002	strh	r8, [r9], #2
 6003L_aes_gcm_decrypt_arm32_crypto_nonce_start_byte:
 6004	cmp	r12, #1
 6005	blt	L_aes_gcm_decrypt_arm32_crypto_nonce_end_bytes
 6006	ldrb	r8, [r3], #1
 6007	subs	r12, r12, #1
 6008	strb	r8, [r9], #1
 6009	bne	L_aes_gcm_decrypt_arm32_crypto_nonce_start_byte
 6010L_aes_gcm_decrypt_arm32_crypto_nonce_end_bytes:
 6011	sub	r9, r9, r11
 6012	vld1.32	{q14}, [r9]
 6013	vmov.i8	q12, #0x55
 6014	vshl.u8	q0, q14, #1
 6015	vshr.u8	q14, q14, #1
 6016	vbif.8	q14, q0, q12
 6017	vmov.i8	q12, #51
 6018	vshl.u8	q0, q14, #2
 6019	vshr.u8	q14, q14, #2
 6020	vbit.8	q0, q14, q12
 6021	vshl.u8	q14, q0, #4
 6022	vsri.u8	q14, q0, #4
 6023	veor.8	q12, q6, q14
 6024	#   X  = C * H^1
 6025	vmull.p64	q2, d25, d16
 6026	vmull.p64	q6, d24, d17
 6027	vmull.p64	q0, d24, d16
 6028	vmull.p64	q1, d25, d17
 6029	veor.8	q2, q2, q6
 6030	#   Reduce
 6031	vmull.p64	q6, d3, d27
 6032	veor.8	d2, d2, d5
 6033	veor.8	d1, d1, d4
 6034	veor.8	d2, d2, d13
 6035	veor.8	d1, d1, d12
 6036	vmull.p64	q6, d2, d26
 6037	veor.8	q6, q6, q0
 6038	# Done GHASH
 6039L_aes_gcm_decrypt_arm32_crypto_nonce_partial_done:
 6040	veor.8	q0, q0, q0
 6041	# nonceSz
 6042	ldr	r12, [sp, #100]
 6043	lsr	r10, r12, #29
 6044	lsl	r11, r12, #3
 6045	rbit	r10, r10
 6046	rbit	r11, r11
 6047	vmov.32	s2, r10
 6048	vmov.32	s3, r11
 6049	veor.8	q6, q6, q0
 6050	vmull.p64	q2, d13, d16
 6051	vmull.p64	q12, d12, d17
 6052	vmull.p64	q0, d12, d16
 6053	vmull.p64	q1, d13, d17
 6054	veor.8	q2, q2, q12
 6055	vmull.p64	q6, d3, d27
 6056	veor.8	d2, d2, d5
 6057	veor.8	d1, d1, d4
 6058	veor.8	d2, d2, d13
 6059	veor.8	d1, d1, d12
 6060	vmull.p64	q6, d2, d26
 6061	veor.8	q6, q6, q0
 6062	vmov.32	r5, s24
 6063	vmov.32	r8, s25
 6064	vmov.32	r12, s26
 6065	rbit	r5, r5
 6066	rbit	r8, r8
 6067	rbit	r12, r12
 6068	rev	r5, r5
 6069	rev	r8, r8
 6070	rev	r12, r12
 6071	vmov.32	s24, r5
 6072	vmov.32	s25, r8
 6073	vmov.32	s26, r12
 6074	vmov.32	r5, s27
 6075	rbit	r5, r5
 6076	rev	r5, r5
 6077	vmov.32	s27, r5
 6078	rev	r5, r5
 6079L_aes_gcm_decrypt_arm32_crypto_done_nonce:
 6080	# reg
 6081	ldr	r9, [sp, #132]
 6082	vst1.32	{q7}, [r9]
 6083	# tmp
 6084	ldr	r9, [sp, #128]
 6085	vldm.32	r7!, {q0-q3}
 6086	vldm.32	r7!, {q7-q13}
 6087	# nr
 6088	ldr	r12, [sp, #136]
 6089	lsr	r10, r2, #4
 6090	and	r11, r2, #15
 6091	cmp	r12, #12
 6092	blt	L_aes_gcm_decrypt_arm32_crypto_start_128
 6093	bgt	L_aes_gcm_decrypt_arm32_crypto_start_256
 6094	# AES_GCM_192
 6095#ifndef NO_AES_192
 6096	cmp	r10, #1
 6097	blt	L_aes_gcm_decrypt_arm32_crypto_192_done
 6098	beq	L_aes_gcm_decrypt_arm32_crypto_192_start_1
 6099L_aes_gcm_decrypt_arm32_crypto_192_start_2:
 6100	add	r8, r5, #1
 6101	vmov.8	q4, q6
 6102	add	r5, r5, #2
 6103	vmov.8	q5, q6
 6104	rev	r8, r8
 6105	rev	r12, r5
 6106	vmov	s19, r8
 6107	vmov	s23, r12
 6108	aese.8	q4, q0
 6109	aesmc.8	q4, q4
 6110	aese.8	q5, q0
 6111	aesmc.8	q5, q5
 6112	aese.8	q4, q1
 6113	aesmc.8	q4, q4
 6114	aese.8	q5, q1
 6115	aesmc.8	q5, q5
 6116	aese.8	q4, q2
 6117	aesmc.8	q4, q4
 6118	aese.8	q5, q2
 6119	aesmc.8	q5, q5
 6120	aese.8	q4, q3
 6121	aesmc.8	q4, q4
 6122	aese.8	q5, q3
 6123	aesmc.8	q5, q5
 6124	aese.8	q4, q7
 6125	aesmc.8	q4, q4
 6126	aese.8	q5, q7
 6127	aesmc.8	q5, q5
 6128	aese.8	q4, q8
 6129	aesmc.8	q4, q4
 6130	aese.8	q5, q8
 6131	aesmc.8	q5, q5
 6132	aese.8	q4, q9
 6133	aesmc.8	q4, q4
 6134	aese.8	q5, q9
 6135	aesmc.8	q5, q5
 6136	subs	r10, r10, #2
 6137	aese.8	q4, q10
 6138	aesmc.8	q4, q4
 6139	aese.8	q5, q10
 6140	aesmc.8	q5, q5
 6141	aese.8	q4, q11
 6142	aesmc.8	q4, q4
 6143	aese.8	q5, q11
 6144	aesmc.8	q5, q5
 6145	aese.8	q4, q12
 6146	aesmc.8	q4, q4
 6147	aese.8	q5, q12
 6148	aesmc.8	q5, q5
 6149	vld1.32	{q14}, [r7]!
 6150	aese.8	q4, q13
 6151	aesmc.8	q4, q4
 6152	aese.8	q5, q13
 6153	aesmc.8	q5, q5
 6154	vld1.32	{q15}, [r7]
 6155	aese.8	q4, q14
 6156	veor.8	q4, q4, q15
 6157	aese.8	q5, q14
 6158	veor.8	q5, q5, q15
 6159	vld1.8	{q14-q15}, [r0]!
 6160	sub	r7, r7, #16
 6161	veor.8	q14, q14, q4
 6162	veor.8	q15, q15, q5
 6163	vst1.8	{q14-q15}, [r1]!
 6164	cmp	r10, #1
 6165	bgt	L_aes_gcm_decrypt_arm32_crypto_192_start_2
 6166	blt	L_aes_gcm_decrypt_arm32_crypto_192_done
 6167L_aes_gcm_decrypt_arm32_crypto_192_start_1:
 6168	add	r5, r5, #1
 6169	vmov.8	q4, q6
 6170	rev	r8, r5
 6171	vmov	s19, r8
 6172	aese.8	q4, q0
 6173	aesmc.8	q4, q4
 6174	aese.8	q4, q1
 6175	aesmc.8	q4, q4
 6176	aese.8	q4, q2
 6177	aesmc.8	q4, q4
 6178	aese.8	q4, q3
 6179	aesmc.8	q4, q4
 6180	aese.8	q4, q7
 6181	aesmc.8	q4, q4
 6182	aese.8	q4, q8
 6183	aesmc.8	q4, q4
 6184	aese.8	q4, q9
 6185	aesmc.8	q4, q4
 6186	aese.8	q4, q10
 6187	aesmc.8	q4, q4
 6188	aese.8	q4, q11
 6189	aesmc.8	q4, q4
 6190	aese.8	q4, q12
 6191	aesmc.8	q4, q4
 6192	vld1.32	{q14}, [r7]!
 6193	aese.8	q4, q13
 6194	aesmc.8	q4, q4
 6195	vld1.32	{q15}, [r7]
 6196	aese.8	q4, q14
 6197	veor.8	q4, q4, q15
 6198	vld1.8	{q14}, [r0]!
 6199	sub	r7, r7, #16
 6200	veor.8	q14, q14, q4
 6201	vst1.32	{q14}, [r1]!
 6202L_aes_gcm_decrypt_arm32_crypto_192_done:
 6203	ands	r11, r2, #15
 6204	beq	L_aes_gcm_decrypt_arm32_crypto_192_partial_done
 6205	veor.8	q14, q14, q14
 6206	mov	r4, r11
 6207	vst1.32	{q14}, [r9]
 6208	cmp	r4, #4
 6209	blt	L_aes_gcm_decrypt_arm32_crypto_192_start_sw
 6210L_aes_gcm_decrypt_arm32_crypto_192_start_dw:
 6211	ldr	lr, [r0], #4
 6212	sub	r4, r4, #4
 6213	str	lr, [r9], #4
 6214	cmp	r4, #4
 6215	bge	L_aes_gcm_decrypt_arm32_crypto_192_start_dw
 6216L_aes_gcm_decrypt_arm32_crypto_192_start_sw:
 6217	cmp	r4, #2
 6218	blt	L_aes_gcm_decrypt_arm32_crypto_192_start_byte
 6219	ldrh	lr, [r0], #2
 6220	sub	r4, r4, #2
 6221	strh	lr, [r9], #2
 6222L_aes_gcm_decrypt_arm32_crypto_192_start_byte:
 6223	cmp	r4, #1
 6224	blt	L_aes_gcm_decrypt_arm32_crypto_192_end_bytes
 6225	ldrb	lr, [r0], #1
 6226	subs	r4, r4, #1
 6227	strb	lr, [r9], #1
 6228	bne	L_aes_gcm_decrypt_arm32_crypto_192_start_byte
 6229L_aes_gcm_decrypt_arm32_crypto_192_end_bytes:
 6230	sub	r9, r9, r11
 6231	add	r5, r5, #1
 6232	vmov.8	q4, q6
 6233	rev	r8, r5
 6234	vmov	s19, r8
 6235	aese.8	q4, q0
 6236	aesmc.8	q4, q4
 6237	aese.8	q4, q1
 6238	aesmc.8	q4, q4
 6239	aese.8	q4, q2
 6240	aesmc.8	q4, q4
 6241	aese.8	q4, q3
 6242	aesmc.8	q4, q4
 6243	aese.8	q4, q7
 6244	aesmc.8	q4, q4
 6245	aese.8	q4, q8
 6246	aesmc.8	q4, q4
 6247	aese.8	q4, q9
 6248	aesmc.8	q4, q4
 6249	aese.8	q4, q10
 6250	aesmc.8	q4, q4
 6251	aese.8	q4, q11
 6252	aesmc.8	q4, q4
 6253	aese.8	q4, q12
 6254	aesmc.8	q4, q4
 6255	vld1.32	{q14}, [r7]!
 6256	aese.8	q4, q13
 6257	aesmc.8	q4, q4
 6258	vld1.32	{q15}, [r7]
 6259	aese.8	q4, q14
 6260	veor.8	q4, q4, q15
 6261	vld1.8	{q14}, [r9]
 6262	sub	r7, r7, #16
 6263	veor.8	q14, q14, q4
 6264	vst1.32	{q14}, [r9]
 6265	mov	r4, r11
 6266	cmp	r4, #4
 6267	blt	L_aes_gcm_decrypt_arm32_crypto_192_out_start_sw
 6268L_aes_gcm_decrypt_arm32_crypto_192_out_start_dw:
 6269	ldr	lr, [r9], #4
 6270	sub	r4, r4, #4
 6271	str	lr, [r1], #4
 6272	cmp	r4, #4
 6273	bge	L_aes_gcm_decrypt_arm32_crypto_192_out_start_dw
 6274L_aes_gcm_decrypt_arm32_crypto_192_out_start_sw:
 6275	cmp	r4, #2
 6276	blt	L_aes_gcm_decrypt_arm32_crypto_192_out_start_byte
 6277	ldrh	lr, [r9], #2
 6278	sub	r4, r4, #2
 6279	strh	lr, [r1], #2
 6280L_aes_gcm_decrypt_arm32_crypto_192_out_start_byte:
 6281	cmp	r4, #1
 6282	blt	L_aes_gcm_decrypt_arm32_crypto_192_out_end_bytes
 6283	ldrb	lr, [r9], #1
 6284	subs	r4, r4, #1
 6285	strb	lr, [r1], #1
 6286	bne	L_aes_gcm_decrypt_arm32_crypto_192_out_start_byte
 6287L_aes_gcm_decrypt_arm32_crypto_192_out_end_bytes:
 6288L_aes_gcm_decrypt_arm32_crypto_192_partial_done:
 6289	# Finish
 6290	add	r8, r2, #15
 6291	sub	r8, r5, r8, lsr #4
 6292	rev	r8, r8
 6293	vmov.32	s27, r8
 6294	aese.8	q6, q0
 6295	aesmc.8	q6, q6
 6296	aese.8	q6, q1
 6297	aesmc.8	q6, q6
 6298	aese.8	q6, q2
 6299	aesmc.8	q6, q6
 6300	aese.8	q6, q3
 6301	aesmc.8	q6, q6
 6302	aese.8	q6, q7
 6303	aesmc.8	q6, q6
 6304	aese.8	q6, q8
 6305	aesmc.8	q6, q6
 6306	aese.8	q6, q9
 6307	aesmc.8	q6, q6
 6308	aese.8	q6, q10
 6309	aesmc.8	q6, q6
 6310	aese.8	q6, q11
 6311	aesmc.8	q6, q6
 6312	aese.8	q6, q12
 6313	aesmc.8	q6, q6
 6314	vld1.32	{q14}, [r7]!
 6315	aese.8	q6, q13
 6316	aesmc.8	q6, q6
 6317	vld1.32	{q15}, [r7]
 6318	aese.8	q6, q14
 6319	veor.8	q6, q6, q15
 6320	sub	r7, r7, #16
 6321#endif /* !NO_AES_192 */
 6322	b	L_aes_gcm_decrypt_arm32_crypto_done_enc
 6323	# AES_GCM_256
 6324L_aes_gcm_decrypt_arm32_crypto_start_256:
 6325#ifndef NO_AES_256
 6326	cmp	r10, #1
 6327	blt	L_aes_gcm_decrypt_arm32_crypto_256_done
 6328	beq	L_aes_gcm_decrypt_arm32_crypto_256_start_1
 6329L_aes_gcm_decrypt_arm32_crypto_256_start_2:
 6330	add	r8, r5, #1
 6331	vmov.8	q4, q6
 6332	add	r5, r5, #2
 6333	vmov.8	q5, q6
 6334	rev	r8, r8
 6335	rev	r12, r5
 6336	vmov	s19, r8
 6337	vmov	s23, r12
 6338	aese.8	q4, q0
 6339	aesmc.8	q4, q4
 6340	aese.8	q5, q0
 6341	aesmc.8	q5, q5
 6342	aese.8	q4, q1
 6343	aesmc.8	q4, q4
 6344	aese.8	q5, q1
 6345	aesmc.8	q5, q5
 6346	aese.8	q4, q2
 6347	aesmc.8	q4, q4
 6348	aese.8	q5, q2
 6349	aesmc.8	q5, q5
 6350	aese.8	q4, q3
 6351	aesmc.8	q4, q4
 6352	aese.8	q5, q3
 6353	aesmc.8	q5, q5
 6354	aese.8	q4, q7
 6355	aesmc.8	q4, q4
 6356	aese.8	q5, q7
 6357	aesmc.8	q5, q5
 6358	aese.8	q4, q8
 6359	aesmc.8	q4, q4
 6360	aese.8	q5, q8
 6361	aesmc.8	q5, q5
 6362	aese.8	q4, q9
 6363	aesmc.8	q4, q4
 6364	aese.8	q5, q9
 6365	aesmc.8	q5, q5
 6366	subs	r10, r10, #2
 6367	aese.8	q4, q10
 6368	aesmc.8	q4, q4
 6369	aese.8	q5, q10
 6370	aesmc.8	q5, q5
 6371	aese.8	q4, q11
 6372	aesmc.8	q4, q4
 6373	aese.8	q5, q11
 6374	aesmc.8	q5, q5
 6375	aese.8	q4, q12
 6376	aesmc.8	q4, q4
 6377	aese.8	q5, q12
 6378	aesmc.8	q5, q5
 6379	vld1.32	{q14}, [r7]!
 6380	aese.8	q4, q13
 6381	aesmc.8	q4, q4
 6382	aese.8	q5, q13
 6383	aesmc.8	q5, q5
 6384	vld1.32	{q15}, [r7]!
 6385	aese.8	q4, q14
 6386	aesmc.8	q4, q4
 6387	aese.8	q5, q14
 6388	aesmc.8	q5, q5
 6389	vld1.32	{q14}, [r7]!
 6390	aese.8	q4, q15
 6391	aesmc.8	q4, q4
 6392	aese.8	q5, q15
 6393	aesmc.8	q5, q5
 6394	vld1.32	{q15}, [r7]
 6395	aese.8	q4, q14
 6396	veor.8	q4, q4, q15
 6397	aese.8	q5, q14
 6398	veor.8	q5, q5, q15
 6399	vld1.8	{q14-q15}, [r0]!
 6400	sub	r7, r7, #48
 6401	veor.8	q14, q14, q4
 6402	veor.8	q15, q15, q5
 6403	vst1.8	{q14-q15}, [r1]!
 6404	cmp	r10, #1
 6405	bgt	L_aes_gcm_decrypt_arm32_crypto_256_start_2
 6406	blt	L_aes_gcm_decrypt_arm32_crypto_256_done
 6407L_aes_gcm_decrypt_arm32_crypto_256_start_1:
 6408	add	r5, r5, #1
 6409	vmov.8	q4, q6
 6410	rev	r8, r5
 6411	vmov	s19, r8
 6412	aese.8	q4, q0
 6413	aesmc.8	q4, q4
 6414	aese.8	q4, q1
 6415	aesmc.8	q4, q4
 6416	aese.8	q4, q2
 6417	aesmc.8	q4, q4
 6418	aese.8	q4, q3
 6419	aesmc.8	q4, q4
 6420	aese.8	q4, q7
 6421	aesmc.8	q4, q4
 6422	aese.8	q4, q8
 6423	aesmc.8	q4, q4
 6424	aese.8	q4, q9
 6425	aesmc.8	q4, q4
 6426	aese.8	q4, q10
 6427	aesmc.8	q4, q4
 6428	aese.8	q4, q11
 6429	aesmc.8	q4, q4
 6430	aese.8	q4, q12
 6431	aesmc.8	q4, q4
 6432	vld1.32	{q14}, [r7]!
 6433	aese.8	q4, q13
 6434	aesmc.8	q4, q4
 6435	vld1.32	{q15}, [r7]!
 6436	aese.8	q4, q14
 6437	aesmc.8	q4, q4
 6438	vld1.32	{q14}, [r7]!
 6439	aese.8	q4, q15
 6440	aesmc.8	q4, q4
 6441	vld1.32	{q15}, [r7]
 6442	aese.8	q4, q14
 6443	veor.8	q4, q4, q15
 6444	vld1.8	{q14}, [r0]!
 6445	sub	r7, r7, #48
 6446	veor.8	q14, q14, q4
 6447	vst1.32	{q14}, [r1]!
 6448L_aes_gcm_decrypt_arm32_crypto_256_done:
 6449	ands	r11, r2, #15
 6450	beq	L_aes_gcm_decrypt_arm32_crypto_256_partial_done
 6451	veor.8	q14, q14, q14
 6452	mov	r4, r11
 6453	vst1.32	{q14}, [r9]
 6454	cmp	r4, #4
 6455	blt	L_aes_gcm_decrypt_arm32_crypto_256_start_sw
 6456L_aes_gcm_decrypt_arm32_crypto_256_start_dw:
 6457	ldr	lr, [r0], #4
 6458	sub	r4, r4, #4
 6459	str	lr, [r9], #4
 6460	cmp	r4, #4
 6461	bge	L_aes_gcm_decrypt_arm32_crypto_256_start_dw
 6462L_aes_gcm_decrypt_arm32_crypto_256_start_sw:
 6463	cmp	r4, #2
 6464	blt	L_aes_gcm_decrypt_arm32_crypto_256_start_byte
 6465	ldrh	lr, [r0], #2
 6466	sub	r4, r4, #2
 6467	strh	lr, [r9], #2
 6468L_aes_gcm_decrypt_arm32_crypto_256_start_byte:
 6469	cmp	r4, #1
 6470	blt	L_aes_gcm_decrypt_arm32_crypto_256_end_bytes
 6471	ldrb	lr, [r0], #1
 6472	subs	r4, r4, #1
 6473	strb	lr, [r9], #1
 6474	bne	L_aes_gcm_decrypt_arm32_crypto_256_start_byte
 6475L_aes_gcm_decrypt_arm32_crypto_256_end_bytes:
 6476	sub	r9, r9, r11
 6477	add	r5, r5, #1
 6478	vmov.8	q4, q6
 6479	rev	r8, r5
 6480	vmov	s19, r8
 6481	aese.8	q4, q0
 6482	aesmc.8	q4, q4
 6483	aese.8	q4, q1
 6484	aesmc.8	q4, q4
 6485	aese.8	q4, q2
 6486	aesmc.8	q4, q4
 6487	aese.8	q4, q3
 6488	aesmc.8	q4, q4
 6489	aese.8	q4, q7
 6490	aesmc.8	q4, q4
 6491	aese.8	q4, q8
 6492	aesmc.8	q4, q4
 6493	aese.8	q4, q9
 6494	aesmc.8	q4, q4
 6495	aese.8	q4, q10
 6496	aesmc.8	q4, q4
 6497	aese.8	q4, q11
 6498	aesmc.8	q4, q4
 6499	aese.8	q4, q12
 6500	aesmc.8	q4, q4
 6501	vld1.32	{q14}, [r7]!
 6502	aese.8	q4, q13
 6503	aesmc.8	q4, q4
 6504	vld1.32	{q15}, [r7]!
 6505	aese.8	q4, q14
 6506	aesmc.8	q4, q4
 6507	vld1.32	{q14}, [r7]!
 6508	aese.8	q4, q15
 6509	aesmc.8	q4, q4
 6510	vld1.32	{q15}, [r7]
 6511	aese.8	q4, q14
 6512	veor.8	q4, q4, q15
 6513	vld1.8	{q14}, [r9]
 6514	sub	r7, r7, #48
 6515	veor.8	q14, q14, q4
 6516	vst1.32	{q14}, [r9]
 6517	mov	r4, r11
 6518	cmp	r4, #4
 6519	blt	L_aes_gcm_decrypt_arm32_crypto_256_out_start_sw
 6520L_aes_gcm_decrypt_arm32_crypto_256_out_start_dw:
 6521	ldr	lr, [r9], #4
 6522	sub	r4, r4, #4
 6523	str	lr, [r1], #4
 6524	cmp	r4, #4
 6525	bge	L_aes_gcm_decrypt_arm32_crypto_256_out_start_dw
 6526L_aes_gcm_decrypt_arm32_crypto_256_out_start_sw:
 6527	cmp	r4, #2
 6528	blt	L_aes_gcm_decrypt_arm32_crypto_256_out_start_byte
 6529	ldrh	lr, [r9], #2
 6530	sub	r4, r4, #2
 6531	strh	lr, [r1], #2
 6532L_aes_gcm_decrypt_arm32_crypto_256_out_start_byte:
 6533	cmp	r4, #1
 6534	blt	L_aes_gcm_decrypt_arm32_crypto_256_out_end_bytes
 6535	ldrb	lr, [r9], #1
 6536	subs	r4, r4, #1
 6537	strb	lr, [r1], #1
 6538	bne	L_aes_gcm_decrypt_arm32_crypto_256_out_start_byte
 6539L_aes_gcm_decrypt_arm32_crypto_256_out_end_bytes:
 6540L_aes_gcm_decrypt_arm32_crypto_256_partial_done:
 6541	# Finish
 6542	add	r8, r2, #15
 6543	sub	r8, r5, r8, lsr #4
 6544	rev	r8, r8
 6545	vmov.32	s27, r8
 6546	aese.8	q6, q0
 6547	aesmc.8	q6, q6
 6548	aese.8	q6, q1
 6549	aesmc.8	q6, q6
 6550	aese.8	q6, q2
 6551	aesmc.8	q6, q6
 6552	aese.8	q6, q3
 6553	aesmc.8	q6, q6
 6554	aese.8	q6, q7
 6555	aesmc.8	q6, q6
 6556	aese.8	q6, q8
 6557	aesmc.8	q6, q6
 6558	aese.8	q6, q9
 6559	aesmc.8	q6, q6
 6560	aese.8	q6, q10
 6561	aesmc.8	q6, q6
 6562	aese.8	q6, q11
 6563	aesmc.8	q6, q6
 6564	aese.8	q6, q12
 6565	aesmc.8	q6, q6
 6566	vld1.32	{q14}, [r7]!
 6567	aese.8	q6, q13
 6568	aesmc.8	q6, q6
 6569	vld1.32	{q15}, [r7]!
 6570	aese.8	q6, q14
 6571	aesmc.8	q6, q6
 6572	vld1.32	{q14}, [r7]!
 6573	aese.8	q6, q15
 6574	aesmc.8	q6, q6
 6575	vld1.32	{q15}, [r7]
 6576	aese.8	q6, q14
 6577	veor.8	q6, q6, q15
 6578	sub	r7, r7, #48
 6579#endif /* !NO_AES_256 */
 6580	b	L_aes_gcm_decrypt_arm32_crypto_done_enc
 6581	# AES_GCM_128
 6582L_aes_gcm_decrypt_arm32_crypto_start_128:
 6583#ifndef NO_AES_128
 6584	cmp	r10, #1
 6585	blt	L_aes_gcm_decrypt_arm32_crypto_128_done
 6586	beq	L_aes_gcm_decrypt_arm32_crypto_128_start_1
 6587L_aes_gcm_decrypt_arm32_crypto_128_start_2:
 6588	add	r8, r5, #1
 6589	vmov.8	q4, q6
 6590	add	r5, r5, #2
 6591	vmov.8	q5, q6
 6592	rev	r8, r8
 6593	rev	r12, r5
 6594	vmov	s19, r8
 6595	vmov	s23, r12
 6596	aese.8	q4, q0
 6597	aesmc.8	q4, q4
 6598	aese.8	q5, q0
 6599	aesmc.8	q5, q5
 6600	aese.8	q4, q1
 6601	aesmc.8	q4, q4
 6602	aese.8	q5, q1
 6603	aesmc.8	q5, q5
 6604	aese.8	q4, q2
 6605	aesmc.8	q4, q4
 6606	aese.8	q5, q2
 6607	aesmc.8	q5, q5
 6608	aese.8	q4, q3
 6609	aesmc.8	q4, q4
 6610	aese.8	q5, q3
 6611	aesmc.8	q5, q5
 6612	aese.8	q4, q7
 6613	aesmc.8	q4, q4
 6614	aese.8	q5, q7
 6615	aesmc.8	q5, q5
 6616	aese.8	q4, q8
 6617	aesmc.8	q4, q4
 6618	aese.8	q5, q8
 6619	aesmc.8	q5, q5
 6620	aese.8	q4, q9
 6621	aesmc.8	q4, q4
 6622	aese.8	q5, q9
 6623	aesmc.8	q5, q5
 6624	subs	r10, r10, #2
 6625	aese.8	q4, q10
 6626	aesmc.8	q4, q4
 6627	aese.8	q5, q10
 6628	aesmc.8	q5, q5
 6629	aese.8	q4, q11
 6630	aesmc.8	q4, q4
 6631	aese.8	q5, q11
 6632	aesmc.8	q5, q5
 6633	vld1.8	{q14-q15}, [r0]!
 6634	aese.8	q4, q12
 6635	veor.8	q4, q4, q13
 6636	aese.8	q5, q12
 6637	veor.8	q5, q5, q13
 6638	veor.8	q14, q14, q4
 6639	veor.8	q15, q15, q5
 6640	vst1.8	{q14-q15}, [r1]!
 6641	cmp	r10, #1
 6642	bgt	L_aes_gcm_decrypt_arm32_crypto_128_start_2
 6643	blt	L_aes_gcm_decrypt_arm32_crypto_128_done
 6644L_aes_gcm_decrypt_arm32_crypto_128_start_1:
 6645	add	r5, r5, #1
 6646	vmov.8	q4, q6
 6647	rev	r8, r5
 6648	vmov	s19, r8
 6649	aese.8	q4, q0
 6650	aesmc.8	q4, q4
 6651	aese.8	q4, q1
 6652	aesmc.8	q4, q4
 6653	aese.8	q4, q2
 6654	aesmc.8	q4, q4
 6655	aese.8	q4, q3
 6656	aesmc.8	q4, q4
 6657	aese.8	q4, q7
 6658	aesmc.8	q4, q4
 6659	aese.8	q4, q8
 6660	aesmc.8	q4, q4
 6661	aese.8	q4, q9
 6662	aesmc.8	q4, q4
 6663	aese.8	q4, q10
 6664	aesmc.8	q4, q4
 6665	aese.8	q4, q11
 6666	aesmc.8	q4, q4
 6667	vld1.8	{q14}, [r0]!
 6668	aese.8	q4, q12
 6669	veor.8	q4, q4, q13
 6670	veor.8	q14, q14, q4
 6671	vst1.32	{q14}, [r1]!
 6672L_aes_gcm_decrypt_arm32_crypto_128_done:
 6673	ands	r11, r2, #15
 6674	beq	L_aes_gcm_decrypt_arm32_crypto_128_partial_done
 6675	veor.8	q14, q14, q14
 6676	mov	r4, r11
 6677	vst1.32	{q14}, [r9]
 6678	cmp	r4, #4
 6679	blt	L_aes_gcm_decrypt_arm32_crypto_128_start_sw
 6680L_aes_gcm_decrypt_arm32_crypto_128_start_dw:
 6681	ldr	lr, [r0], #4
 6682	sub	r4, r4, #4
 6683	str	lr, [r9], #4
 6684	cmp	r4, #4
 6685	bge	L_aes_gcm_decrypt_arm32_crypto_128_start_dw
 6686L_aes_gcm_decrypt_arm32_crypto_128_start_sw:
 6687	cmp	r4, #2
 6688	blt	L_aes_gcm_decrypt_arm32_crypto_128_start_byte
 6689	ldrh	lr, [r0], #2
 6690	sub	r4, r4, #2
 6691	strh	lr, [r9], #2
 6692L_aes_gcm_decrypt_arm32_crypto_128_start_byte:
 6693	cmp	r4, #1
 6694	blt	L_aes_gcm_decrypt_arm32_crypto_128_end_bytes
 6695	ldrb	lr, [r0], #1
 6696	subs	r4, r4, #1
 6697	strb	lr, [r9], #1
 6698	bne	L_aes_gcm_decrypt_arm32_crypto_128_start_byte
 6699L_aes_gcm_decrypt_arm32_crypto_128_end_bytes:
 6700	sub	r9, r9, r11
 6701	add	r5, r5, #1
 6702	vmov.8	q4, q6
 6703	rev	r8, r5
 6704	vmov	s19, r8
 6705	aese.8	q4, q0
 6706	aesmc.8	q4, q4
 6707	aese.8	q4, q1
 6708	aesmc.8	q4, q4
 6709	aese.8	q4, q2
 6710	aesmc.8	q4, q4
 6711	aese.8	q4, q3
 6712	aesmc.8	q4, q4
 6713	aese.8	q4, q7
 6714	aesmc.8	q4, q4
 6715	aese.8	q4, q8
 6716	aesmc.8	q4, q4
 6717	aese.8	q4, q9
 6718	aesmc.8	q4, q4
 6719	aese.8	q4, q10
 6720	aesmc.8	q4, q4
 6721	aese.8	q4, q11
 6722	aesmc.8	q4, q4
 6723	vld1.8	{q14}, [r9]
 6724	aese.8	q4, q12
 6725	veor.8	q4, q4, q13
 6726	veor.8	q14, q14, q4
 6727	vst1.32	{q14}, [r9]
 6728	mov	r4, r11
 6729	cmp	r4, #4
 6730	blt	L_aes_gcm_decrypt_arm32_crypto_128_out_start_sw
 6731L_aes_gcm_decrypt_arm32_crypto_128_out_start_dw:
 6732	ldr	lr, [r9], #4
 6733	sub	r4, r4, #4
 6734	str	lr, [r1], #4
 6735	cmp	r4, #4
 6736	bge	L_aes_gcm_decrypt_arm32_crypto_128_out_start_dw
 6737L_aes_gcm_decrypt_arm32_crypto_128_out_start_sw:
 6738	cmp	r4, #2
 6739	blt	L_aes_gcm_decrypt_arm32_crypto_128_out_start_byte
 6740	ldrh	lr, [r9], #2
 6741	sub	r4, r4, #2
 6742	strh	lr, [r1], #2
 6743L_aes_gcm_decrypt_arm32_crypto_128_out_start_byte:
 6744	cmp	r4, #1
 6745	blt	L_aes_gcm_decrypt_arm32_crypto_128_out_end_bytes
 6746	ldrb	lr, [r9], #1
 6747	subs	r4, r4, #1
 6748	strb	lr, [r1], #1
 6749	bne	L_aes_gcm_decrypt_arm32_crypto_128_out_start_byte
 6750L_aes_gcm_decrypt_arm32_crypto_128_out_end_bytes:
 6751L_aes_gcm_decrypt_arm32_crypto_128_partial_done:
 6752	# Finish
 6753	add	r8, r2, #15
 6754	sub	r8, r5, r8, lsr #4
 6755	rev	r8, r8
 6756	vmov.32	s27, r8
 6757	aese.8	q6, q0
 6758	aesmc.8	q6, q6
 6759	aese.8	q6, q1
 6760	aesmc.8	q6, q6
 6761	aese.8	q6, q2
 6762	aesmc.8	q6, q6
 6763	aese.8	q6, q3
 6764	aesmc.8	q6, q6
 6765	aese.8	q6, q7
 6766	aesmc.8	q6, q6
 6767	aese.8	q6, q8
 6768	aesmc.8	q6, q6
 6769	aese.8	q6, q9
 6770	aesmc.8	q6, q6
 6771	aese.8	q6, q10
 6772	aesmc.8	q6, q6
 6773	aese.8	q6, q11
 6774	aesmc.8	q6, q6
 6775	aese.8	q6, q12
 6776	veor.8	q6, q6, q13
 6777#endif /* !NO_AES_128 */
 6778L_aes_gcm_decrypt_arm32_crypto_done_enc:
 6779	vmov.i8	q13, #0x87
 6780	vshr.u64	q13, q13, #56
 6781	# gcm_h
 6782	ldr	r8, [sp, #124]
 6783	vld1.32	{q8}, [r8]
 6784	# reg
 6785	ldr	r9, [sp, #132]
 6786	vld1.32	{q7}, [r9]
 6787	# tmp
 6788	ldr	r9, [sp, #128]
 6789	lsr	lr, r6, #29
 6790	lsl	r6, r6, #3
 6791	rbit	lr, lr
 6792	rbit	r6, r6
 6793	vmov	s0, lr
 6794	vmov	s1, r6
 6795	lsr	lr, r2, #29
 6796	lsl	r2, r2, #3
 6797	rbit	lr, lr
 6798	rbit	r2, r2
 6799	vmov	s2, lr
 6800	vmov	s3, r2
 6801	veor.8	q7, q7, q0
 6802	vmull.p64	q2, d15, d16
 6803	vmull.p64	q3, d14, d17
 6804	vmull.p64	q0, d14, d16
 6805	vmull.p64	q1, d15, d17
 6806	veor.8	q2, q2, q3
 6807	#   Reduce
 6808	vmull.p64	q7, d3, d27
 6809	veor.8	d2, d2, d5
 6810	veor.8	d1, d1, d4
 6811	veor.8	d2, d2, d15
 6812	veor.8	d1, d1, d14
 6813	vmull.p64	q7, d2, d26
 6814	veor.8	q7, q7, q0
 6815	vmov.i8	q0, #0x55
 6816	vshl.u8	q1, q7, #1
 6817	vshr.u8	q7, q7, #1
 6818	vbif.8	q7, q1, q0
 6819	vmov.i8	q0, #51
 6820	vshl.u8	q1, q7, #2
 6821	vshr.u8	q7, q7, #2
 6822	vbit.8	q1, q7, q0
 6823	vshl.u8	q7, q1, #4
 6824	vsri.u8	q7, q1, #4
 6825	# DONE
 6826	veor.8	q7, q7, q6
 6827	# tag
 6828	ldr	lr, [sp, #104]
 6829	# tagSz
 6830	ldr	r4, [sp, #108]
 6831	cmp	r4, #16
 6832	blt	L_aes_gcm_decrypt_arm32_crypto_tag_part_tag
 6833	vld1.8	{q0}, [lr]
 6834	b	L_aes_gcm_decrypt_arm32_crypto_tag_tag_loaded
 6835L_aes_gcm_decrypt_arm32_crypto_tag_part_tag:
 6836	veor.8	q0, q0, q0
 6837	mov	r12, r4
 6838	vst1.32	{q0}, [r9]
 6839	cmp	r12, #4
 6840	blt	L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_sw
 6841L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_dw:
 6842	ldr	r8, [lr], #4
 6843	sub	r12, r12, #4
 6844	str	r8, [r9], #4
 6845	cmp	r12, #4
 6846	bge	L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_dw
 6847L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_sw:
 6848	cmp	r12, #2
 6849	blt	L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_byte
 6850	ldrh	r8, [lr], #2
 6851	sub	r12, r12, #2
 6852	strh	r8, [r9], #2
 6853L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_byte:
 6854	cmp	r12, #1
 6855	blt	L_aes_gcm_decrypt_arm32_crypto_tag_tag_end_bytes
 6856	ldrb	r8, [lr], #1
 6857	subs	r12, r12, #1
 6858	strb	r8, [r9], #1
 6859	bne	L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_byte
 6860L_aes_gcm_decrypt_arm32_crypto_tag_tag_end_bytes:
 6861	sub	r9, r9, r4
 6862	vld1.32	{q0}, [r9]
 6863	mov	r12, #16
 6864	vst1.32	{q7}, [r9]
 6865	sub	r12, r12, r4
 6866	eor	r8, r8, r8
 6867	add	r9, r9, r4
 6868L_aes_gcm_decrypt_arm32_crypto_tag_calc_tag_byte:
 6869	strb	r8, [r9], #1
 6870	subs	r12, r12, #1
 6871	bne	L_aes_gcm_decrypt_arm32_crypto_tag_calc_tag_byte
 6872	subs	r9, r9, #16
 6873	vld1.32	{q7}, [r9]
 6874L_aes_gcm_decrypt_arm32_crypto_tag_tag_loaded:
 6875	vceq.i32	q0, q0, q7
 6876	vmov	r5, s0
 6877	vmov	r8, s1
 6878	and	r12, r5, r8
 6879	vmov	r5, s2
 6880	vmov	r8, s3
 6881	and	r12, r12, r5
 6882	and	r12, r12, r8
 6883	mov	r5, #-180
 6884	mvn	r12, r12
 6885	and	r0, r5, r12
 6886	vpop	{d8-d15}
 6887	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
 6888	.size	AES_GCM_decrypt_AARCH32,.-AES_GCM_decrypt_AARCH32
 6889#endif /* HAVE_AES_DECRYPT */
 6890#endif /* HAVE_AESGCM */
 6891#ifdef WOLFSSL_AES_XTS
 6892	.text
 6893	.align	4
 6894	.globl	AES_XTS_encrypt_AARCH32
 6895	.type	AES_XTS_encrypt_AARCH32, %function
 6896AES_XTS_encrypt_AARCH32:
 6897	push	{r4, r5, r6, r7, r8, r9, lr}
 6898	vpush	{d8-d15}
 6899	ldr	r12, [sp, #92]
 6900	ldr	lr, [sp, #96]
 6901	ldr	r5, [sp, #104]
 6902	vldm.32	lr!, {q2-q9}
 6903	lsr	r4, r2, #4
 6904	and	r2, r2, #15
 6905	vld1.8	{q0}, [r3]
 6906	cmp	r5, #12
 6907	blt	L_aes_xts_encrypt_arm32_crypto_start_128
 6908	bgt	L_aes_xts_encrypt_arm32_crypto_start_256
 6909	# AES_XTS_192
 6910#ifndef NO_AES_192
 6911	vldm.32	lr!, {q10-q14}
 6912	aese.8	q0, q2
 6913	aesmc.8	q0, q0
 6914	aese.8	q0, q3
 6915	aesmc.8	q0, q0
 6916	aese.8	q0, q4
 6917	aesmc.8	q0, q0
 6918	aese.8	q0, q5
 6919	aesmc.8	q0, q0
 6920	aese.8	q0, q6
 6921	aesmc.8	q0, q0
 6922	aese.8	q0, q7
 6923	aesmc.8	q0, q0
 6924	aese.8	q0, q8
 6925	aesmc.8	q0, q0
 6926	aese.8	q0, q9
 6927	aesmc.8	q0, q0
 6928	aese.8	q0, q10
 6929	aesmc.8	q0, q0
 6930	aese.8	q0, q11
 6931	aesmc.8	q0, q0
 6932	aese.8	q0, q12
 6933	aesmc.8	q0, q0
 6934	aese.8	q0, q13
 6935	veor.32	q0, q0, q14
 6936	vmov	r6, r7, d0
 6937	vmov	r8, r9, d1
 6938	vldm.32	r12!, {q2-q9}
 6939	vldm.32	r12!, {q10-q14}
 6940	mov	lr, #0x87
 6941	cmp	r4, #1
 6942	blt	L_aes_xts_encrypt_arm32_crypto_192_done
 6943L_aes_xts_encrypt_arm32_crypto_192_start_1:
 6944	vld1.8	{q1}, [r0]!
 6945	veor.32	q1, q1, q0
 6946	aese.8	q1, q2
 6947	aesmc.8	q1, q1
 6948	and	r5, lr, r9, asr #31
 6949	aese.8	q1, q3
 6950	aesmc.8	q1, q1
 6951	lsl	r9, r9, #1
 6952	aese.8	q1, q4
 6953	aesmc.8	q1, q1
 6954	orr	r9, r9, r8, lsr #31
 6955	aese.8	q1, q5
 6956	aesmc.8	q1, q1
 6957	lsl	r8, r8, #1
 6958	aese.8	q1, q6
 6959	aesmc.8	q1, q1
 6960	orr	r8, r8, r7, lsr #31
 6961	aese.8	q1, q7
 6962	aesmc.8	q1, q1
 6963	lsl	r7, r7, #1
 6964	aese.8	q1, q8
 6965	aesmc.8	q1, q1
 6966	orr	r7, r7, r6, lsr #31
 6967	aese.8	q1, q9
 6968	aesmc.8	q1, q1
 6969	eor	r6, r5, r6, lsl #1
 6970	aese.8	q1, q10
 6971	aesmc.8	q1, q1
 6972	aese.8	q1, q11
 6973	aesmc.8	q1, q1
 6974	aese.8	q1, q12
 6975	aesmc.8	q1, q1
 6976	aese.8	q1, q13
 6977	veor.32	q1, q1, q14
 6978	veor.32	q1, q1, q0
 6979	vmov	d0, r6, r7
 6980	vmov	d1, r8, r9
 6981	subs	r4, r4, #1
 6982	vst1.8	{q1}, [r1]!
 6983	bne	L_aes_xts_encrypt_arm32_crypto_192_start_1
 6984L_aes_xts_encrypt_arm32_crypto_192_done:
 6985	cmp	r2, #0
 6986	beq	L_aes_xts_encrypt_arm32_crypto_192_partial_done
 6987	sub	r1, r1, #16
 6988	ldr	r4, [sp, #100]
 6989	vld1.8	{q1}, [r1]!
 6990	vst1.32	{q1}, [r4]
 6991	mov	r5, r2
 6992L_aes_xts_encrypt_arm32_crypto_192_start_byte:
 6993	ldrb	r8, [r4]
 6994	ldrb	r9, [r0], #1
 6995	strb	r8, [r1], #1
 6996	strb	r9, [r4], #1
 6997	subs	r5, r5, #1
 6998	bgt	L_aes_xts_encrypt_arm32_crypto_192_start_byte
 6999	sub	r1, r1, r2
 7000	sub	r4, r4, r2
 7001	sub	r1, r1, #16
 7002	vld1.32	{q1}, [r4]
 7003	veor.32	q1, q1, q0
 7004	aese.8	q1, q2
 7005	aesmc.8	q1, q1
 7006	aese.8	q1, q3
 7007	aesmc.8	q1, q1
 7008	aese.8	q1, q4
 7009	aesmc.8	q1, q1
 7010	aese.8	q1, q5
 7011	aesmc.8	q1, q1
 7012	aese.8	q1, q6
 7013	aesmc.8	q1, q1
 7014	aese.8	q1, q7
 7015	aesmc.8	q1, q1
 7016	aese.8	q1, q8
 7017	aesmc.8	q1, q1
 7018	aese.8	q1, q9
 7019	aesmc.8	q1, q1
 7020	aese.8	q1, q10
 7021	aesmc.8	q1, q1
 7022	aese.8	q1, q11
 7023	aesmc.8	q1, q1
 7024	aese.8	q1, q12
 7025	aesmc.8	q1, q1
 7026	aese.8	q1, q13
 7027	veor.32	q1, q1, q14
 7028	veor.32	q1, q1, q0
 7029	vst1.8	{q1}, [r1]
 7030L_aes_xts_encrypt_arm32_crypto_192_partial_done:
 7031#endif /* !NO_AES_192 */
 7032	b	L_aes_xts_encrypt_arm32_crypto_done
 7033	# AES_XTS_256
 7034L_aes_xts_encrypt_arm32_crypto_start_256:
 7035#ifndef NO_AES_256
 7036	vldm.32	lr!, {q10-q13}
 7037	aese.8	q0, q2
 7038	aesmc.8	q0, q0
 7039	aese.8	q0, q3
 7040	aesmc.8	q0, q0
 7041	aese.8	q0, q4
 7042	aesmc.8	q0, q0
 7043	aese.8	q0, q5
 7044	aesmc.8	q0, q0
 7045	aese.8	q0, q6
 7046	aesmc.8	q0, q0
 7047	aese.8	q0, q7
 7048	aesmc.8	q0, q0
 7049	aese.8	q0, q8
 7050	aesmc.8	q0, q0
 7051	aese.8	q0, q9
 7052	aesmc.8	q0, q0
 7053	aese.8	q0, q10
 7054	aesmc.8	q0, q0
 7055	aese.8	q0, q11
 7056	aesmc.8	q0, q0
 7057	aese.8	q0, q12
 7058	aesmc.8	q0, q0
 7059	vld1.32	{q14}, [lr]!
 7060	aese.8	q0, q13
 7061	aesmc.8	q0, q0
 7062	vld1.32	{q15}, [lr]!
 7063	aese.8	q0, q14
 7064	aesmc.8	q0, q0
 7065	vld1.32	{q14}, [lr]!
 7066	aese.8	q0, q15
 7067	veor.32	q0, q0, q14
 7068	vmov	r6, r7, d0
 7069	vmov	r8, r9, d1
 7070	vldm.32	r12!, {q2-q9}
 7071	vldm.32	r12!, {q10-q13}
 7072	mov	lr, #0x87
 7073	cmp	r4, #1
 7074	blt	L_aes_xts_encrypt_arm32_crypto_256_done
 7075L_aes_xts_encrypt_arm32_crypto_256_start_1:
 7076	vld1.8	{q1}, [r0]!
 7077	veor.32	q1, q1, q0
 7078	aese.8	q1, q2
 7079	aesmc.8	q1, q1
 7080	and	r5, lr, r9, asr #31
 7081	aese.8	q1, q3
 7082	aesmc.8	q1, q1
 7083	lsl	r9, r9, #1
 7084	aese.8	q1, q4
 7085	aesmc.8	q1, q1
 7086	orr	r9, r9, r8, lsr #31
 7087	aese.8	q1, q5
 7088	aesmc.8	q1, q1
 7089	lsl	r8, r8, #1
 7090	aese.8	q1, q6
 7091	aesmc.8	q1, q1
 7092	orr	r8, r8, r7, lsr #31
 7093	aese.8	q1, q7
 7094	aesmc.8	q1, q1
 7095	lsl	r7, r7, #1
 7096	aese.8	q1, q8
 7097	aesmc.8	q1, q1
 7098	orr	r7, r7, r6, lsr #31
 7099	aese.8	q1, q9
 7100	aesmc.8	q1, q1
 7101	eor	r6, r5, r6, lsl #1
 7102	aese.8	q1, q10
 7103	aesmc.8	q1, q1
 7104	aese.8	q1, q11
 7105	aesmc.8	q1, q1
 7106	aese.8	q1, q12
 7107	aesmc.8	q1, q1
 7108	vld1.32	{q14}, [r12]!
 7109	aese.8	q1, q13
 7110	aesmc.8	q1, q1
 7111	vld1.32	{q15}, [r12]!
 7112	aese.8	q1, q14
 7113	aesmc.8	q1, q1
 7114	vld1.32	{q14}, [r12]!
 7115	aese.8	q1, q15
 7116	veor.32	q1, q1, q14
 7117	sub	r12, r12, #48
 7118	veor.32	q1, q1, q0
 7119	vmov	d0, r6, r7
 7120	vmov	d1, r8, r9
 7121	subs	r4, r4, #1
 7122	vst1.8	{q1}, [r1]!
 7123	bne	L_aes_xts_encrypt_arm32_crypto_256_start_1
 7124L_aes_xts_encrypt_arm32_crypto_256_done:
 7125	cmp	r2, #0
 7126	beq	L_aes_xts_encrypt_arm32_crypto_256_partial_done
 7127	sub	r1, r1, #16
 7128	ldr	r4, [sp, #100]
 7129	vld1.8	{q1}, [r1]!
 7130	vst1.32	{q1}, [r4]
 7131	mov	r5, r2
 7132L_aes_xts_encrypt_arm32_crypto_256_start_byte:
 7133	ldrb	r8, [r4]
 7134	ldrb	r9, [r0], #1
 7135	strb	r8, [r1], #1
 7136	strb	r9, [r4], #1
 7137	subs	r5, r5, #1
 7138	bgt	L_aes_xts_encrypt_arm32_crypto_256_start_byte
 7139	sub	r1, r1, r2
 7140	sub	r4, r4, r2
 7141	sub	r1, r1, #16
 7142	vld1.32	{q1}, [r4]
 7143	veor.32	q1, q1, q0
 7144	aese.8	q1, q2
 7145	aesmc.8	q1, q1
 7146	aese.8	q1, q3
 7147	aesmc.8	q1, q1
 7148	aese.8	q1, q4
 7149	aesmc.8	q1, q1
 7150	aese.8	q1, q5
 7151	aesmc.8	q1, q1
 7152	aese.8	q1, q6
 7153	aesmc.8	q1, q1
 7154	aese.8	q1, q7
 7155	aesmc.8	q1, q1
 7156	aese.8	q1, q8
 7157	aesmc.8	q1, q1
 7158	aese.8	q1, q9
 7159	aesmc.8	q1, q1
 7160	aese.8	q1, q10
 7161	aesmc.8	q1, q1
 7162	aese.8	q1, q11
 7163	aesmc.8	q1, q1
 7164	aese.8	q1, q12
 7165	aesmc.8	q1, q1
 7166	vld1.32	{q14}, [r12]!
 7167	aese.8	q1, q13
 7168	aesmc.8	q1, q1
 7169	vld1.32	{q15}, [r12]!
 7170	aese.8	q1, q14
 7171	aesmc.8	q1, q1
 7172	vld1.32	{q14}, [r12]!
 7173	aese.8	q1, q15
 7174	veor.32	q1, q1, q14
 7175	veor.32	q1, q1, q0
 7176	vst1.8	{q1}, [r1]
 7177L_aes_xts_encrypt_arm32_crypto_256_partial_done:
 7178#endif /* !NO_AES_256 */
 7179	b	L_aes_xts_encrypt_arm32_crypto_done
 7180	# AES_XTS_128
 7181L_aes_xts_encrypt_arm32_crypto_start_128:
 7182#ifndef NO_AES_128
 7183	vldm.32	lr!, {q10-q12}
 7184	aese.8	q0, q2
 7185	aesmc.8	q0, q0
 7186	aese.8	q0, q3
 7187	aesmc.8	q0, q0
 7188	aese.8	q0, q4
 7189	aesmc.8	q0, q0
 7190	aese.8	q0, q5
 7191	aesmc.8	q0, q0
 7192	aese.8	q0, q6
 7193	aesmc.8	q0, q0
 7194	aese.8	q0, q7
 7195	aesmc.8	q0, q0
 7196	aese.8	q0, q8
 7197	aesmc.8	q0, q0
 7198	aese.8	q0, q9
 7199	aesmc.8	q0, q0
 7200	aese.8	q0, q10
 7201	aesmc.8	q0, q0
 7202	aese.8	q0, q11
 7203	veor.32	q0, q0, q12
 7204	vmov	r6, r7, d0
 7205	vmov	r8, r9, d1
 7206	vldm.32	r12!, {q2-q9}
 7207	vldm.32	r12!, {q10-q12}
 7208	mov	lr, #0x87
 7209	cmp	r4, #1
 7210	blt	L_aes_xts_encrypt_arm32_crypto_128_done
 7211L_aes_xts_encrypt_arm32_crypto_128_start_1:
 7212	vld1.8	{q1}, [r0]!
 7213	veor.32	q1, q1, q0
 7214	aese.8	q1, q2
 7215	aesmc.8	q1, q1
 7216	and	r5, lr, r9, asr #31
 7217	aese.8	q1, q3
 7218	aesmc.8	q1, q1
 7219	lsl	r9, r9, #1
 7220	aese.8	q1, q4
 7221	aesmc.8	q1, q1
 7222	orr	r9, r9, r8, lsr #31
 7223	aese.8	q1, q5
 7224	aesmc.8	q1, q1
 7225	lsl	r8, r8, #1
 7226	aese.8	q1, q6
 7227	aesmc.8	q1, q1
 7228	orr	r8, r8, r7, lsr #31
 7229	aese.8	q1, q7
 7230	aesmc.8	q1, q1
 7231	lsl	r7, r7, #1
 7232	aese.8	q1, q8
 7233	aesmc.8	q1, q1
 7234	orr	r7, r7, r6, lsr #31
 7235	aese.8	q1, q9
 7236	aesmc.8	q1, q1
 7237	eor	r6, r5, r6, lsl #1
 7238	aese.8	q1, q10
 7239	aesmc.8	q1, q1
 7240	aese.8	q1, q11
 7241	veor.32	q1, q1, q12
 7242	veor.32	q1, q1, q0
 7243	vmov	d0, r6, r7
 7244	vmov	d1, r8, r9
 7245	subs	r4, r4, #1
 7246	vst1.8	{q1}, [r1]!
 7247	bne	L_aes_xts_encrypt_arm32_crypto_128_start_1
 7248L_aes_xts_encrypt_arm32_crypto_128_done:
 7249	cmp	r2, #0
 7250	beq	L_aes_xts_encrypt_arm32_crypto_128_partial_done
 7251	sub	r1, r1, #16
 7252	ldr	r4, [sp, #100]
 7253	vld1.8	{q1}, [r1]!
 7254	vst1.32	{q1}, [r4]
 7255	mov	r5, r2
 7256L_aes_xts_encrypt_arm32_crypto_128_start_byte:
 7257	ldrb	r8, [r4]
 7258	ldrb	r9, [r0], #1
 7259	strb	r8, [r1], #1
 7260	strb	r9, [r4], #1
 7261	subs	r5, r5, #1
 7262	bgt	L_aes_xts_encrypt_arm32_crypto_128_start_byte
 7263	sub	r1, r1, r2
 7264	sub	r4, r4, r2
 7265	sub	r1, r1, #16
 7266	vld1.32	{q1}, [r4]
 7267	veor.32	q1, q1, q0
 7268	aese.8	q1, q2
 7269	aesmc.8	q1, q1
 7270	aese.8	q1, q3
 7271	aesmc.8	q1, q1
 7272	aese.8	q1, q4
 7273	aesmc.8	q1, q1
 7274	aese.8	q1, q5
 7275	aesmc.8	q1, q1
 7276	aese.8	q1, q6
 7277	aesmc.8	q1, q1
 7278	aese.8	q1, q7
 7279	aesmc.8	q1, q1
 7280	aese.8	q1, q8
 7281	aesmc.8	q1, q1
 7282	aese.8	q1, q9
 7283	aesmc.8	q1, q1
 7284	aese.8	q1, q10
 7285	aesmc.8	q1, q1
 7286	aese.8	q1, q11
 7287	veor.32	q1, q1, q12
 7288	veor.32	q1, q1, q0
 7289	vst1.8	{q1}, [r1]
 7290L_aes_xts_encrypt_arm32_crypto_128_partial_done:
 7291#endif /* !NO_AES_128 */
 7292L_aes_xts_encrypt_arm32_crypto_done:
 7293	vpop	{d8-d15}
 7294	pop	{r4, r5, r6, r7, r8, r9, pc}
 7295	.size	AES_XTS_encrypt_AARCH32,.-AES_XTS_encrypt_AARCH32
 7296#ifdef HAVE_AES_DECRYPT
 7297	.text
 7298	.align	4
 7299	.globl	AES_XTS_decrypt_AARCH32
 7300	.type	AES_XTS_decrypt_AARCH32, %function
 7301AES_XTS_decrypt_AARCH32:
 7302	push	{r4, r5, r6, r7, r8, r9, lr}
 7303	vpush	{d8-d15}
 7304	ldr	r12, [sp, #92]
 7305	ldr	lr, [sp, #96]
 7306	vldm.32	lr!, {q2-q9}
 7307	eor	r5, r5, r5
 7308	lsr	r4, r2, #4
 7309	ands	r2, r2, #15
 7310	sub	r5, r5, r2
 7311	sub	r4, r4, r5, lsr #31
 7312	vld1.8	{q1}, [r3]
 7313	ldr	r5, [sp, #104]
 7314	cmp	r5, #12
 7315	blt	L_aes_xts_decrypt_arm32_crypto_start_128
 7316	bgt	L_aes_xts_decrypt_arm32_crypto_start_256
 7317	# AES_XTS_192
 7318#ifndef NO_AES_192
 7319	vldm.32	lr!, {q10-q14}
 7320	aese.8	q1, q2
 7321	aesmc.8	q1, q1
 7322	aese.8	q1, q3
 7323	aesmc.8	q1, q1
 7324	aese.8	q1, q4
 7325	aesmc.8	q1, q1
 7326	aese.8	q1, q5
 7327	aesmc.8	q1, q1
 7328	aese.8	q1, q6
 7329	aesmc.8	q1, q1
 7330	aese.8	q1, q7
 7331	aesmc.8	q1, q1
 7332	aese.8	q1, q8
 7333	aesmc.8	q1, q1
 7334	aese.8	q1, q9
 7335	aesmc.8	q1, q1
 7336	aese.8	q1, q10
 7337	aesmc.8	q1, q1
 7338	aese.8	q1, q11
 7339	aesmc.8	q1, q1
 7340	aese.8	q1, q12
 7341	aesmc.8	q1, q1
 7342	aese.8	q1, q13
 7343	veor.32	q1, q1, q14
 7344	vmov	r6, r7, d2
 7345	vmov	r8, r9, d3
 7346	vldm.32	r12!, {q2-q9}
 7347	vldm.32	r12!, {q10-q14}
 7348	mov	lr, #0x87
 7349	cmp	r4, #1
 7350	blt	L_aes_xts_decrypt_arm32_crypto_192_done
 7351L_aes_xts_decrypt_arm32_crypto_192_start_1:
 7352	vld1.8	{q0}, [r0]!
 7353	veor.32	q0, q0, q1
 7354	aesd.8	q0, q2
 7355	aesimc.8	q0, q0
 7356	and	r5, lr, r9, asr #31
 7357	aesd.8	q0, q3
 7358	aesimc.8	q0, q0
 7359	lsl	r9, r9, #1
 7360	aesd.8	q0, q4
 7361	aesimc.8	q0, q0
 7362	orr	r9, r9, r8, lsr #31
 7363	aesd.8	q0, q5
 7364	aesimc.8	q0, q0
 7365	lsl	r8, r8, #1
 7366	aesd.8	q0, q6
 7367	aesimc.8	q0, q0
 7368	orr	r8, r8, r7, lsr #31
 7369	aesd.8	q0, q7
 7370	aesimc.8	q0, q0
 7371	lsl	r7, r7, #1
 7372	aesd.8	q0, q8
 7373	aesimc.8	q0, q0
 7374	orr	r7, r7, r6, lsr #31
 7375	aesd.8	q0, q9
 7376	aesimc.8	q0, q0
 7377	eor	r6, r5, r6, lsl #1
 7378	aesd.8	q0, q10
 7379	aesimc.8	q0, q0
 7380	aesd.8	q0, q11
 7381	aesimc.8	q0, q0
 7382	aesd.8	q0, q12
 7383	aesimc.8	q0, q0
 7384	aesd.8	q0, q13
 7385	veor.32	q0, q0, q14
 7386	veor.32	q0, q0, q1
 7387	vmov	d2, r6, r7
 7388	vmov	d3, r8, r9
 7389	subs	r4, r4, #1
 7390	vst1.8	{q0}, [r1]!
 7391	bne	L_aes_xts_decrypt_arm32_crypto_192_start_1
 7392L_aes_xts_decrypt_arm32_crypto_192_done:
 7393	cmp	r2, #0
 7394	beq	L_aes_xts_decrypt_arm32_crypto_192_partial_done
 7395	and	r5, lr, r9, asr #31
 7396	lsl	r9, r9, #1
 7397	orr	r9, r9, r8, lsr #31
 7398	lsl	r8, r8, #1
 7399	orr	r8, r8, r7, lsr #31
 7400	lsl	r7, r7, #1
 7401	orr	r7, r7, r6, lsr #31
 7402	eor	r6, r5, r6, lsl #1
 7403	vmov	d30, r6, r7
 7404	vmov	d31, r8, r9
 7405	vld1.8	{q0}, [r0]!
 7406	ldr	r4, [sp, #100]
 7407	veor.32	q0, q0, q15
 7408	aesd.8	q0, q2
 7409	aesimc.8	q0, q0
 7410	aesd.8	q0, q3
 7411	aesimc.8	q0, q0
 7412	aesd.8	q0, q4
 7413	aesimc.8	q0, q0
 7414	aesd.8	q0, q5
 7415	aesimc.8	q0, q0
 7416	aesd.8	q0, q6
 7417	aesimc.8	q0, q0
 7418	aesd.8	q0, q7
 7419	aesimc.8	q0, q0
 7420	aesd.8	q0, q8
 7421	aesimc.8	q0, q0
 7422	aesd.8	q0, q9
 7423	aesimc.8	q0, q0
 7424	aesd.8	q0, q10
 7425	aesimc.8	q0, q0
 7426	aesd.8	q0, q11
 7427	aesimc.8	q0, q0
 7428	aesd.8	q0, q12
 7429	aesimc.8	q0, q0
 7430	aesd.8	q0, q13
 7431	veor.32	q0, q0, q14
 7432	veor.32	q0, q0, q15
 7433	vst1.32	{q0}, [r4]
 7434	add	r1, r1, #16
 7435	mov	r5, r2
 7436L_aes_xts_decrypt_arm32_crypto_192_start_byte:
 7437	ldrb	r8, [r4]
 7438	ldrb	r9, [r0], #1
 7439	strb	r8, [r1], #1
 7440	strb	r9, [r4], #1
 7441	subs	r5, r5, #1
 7442	bgt	L_aes_xts_decrypt_arm32_crypto_192_start_byte
 7443	sub	r1, r1, r2
 7444	sub	r4, r4, r2
 7445	sub	r1, r1, #16
 7446	vld1.32	{q0}, [r4]
 7447	veor.32	q0, q0, q1
 7448	aesd.8	q0, q2
 7449	aesimc.8	q0, q0
 7450	aesd.8	q0, q3
 7451	aesimc.8	q0, q0
 7452	aesd.8	q0, q4
 7453	aesimc.8	q0, q0
 7454	aesd.8	q0, q5
 7455	aesimc.8	q0, q0
 7456	aesd.8	q0, q6
 7457	aesimc.8	q0, q0
 7458	aesd.8	q0, q7
 7459	aesimc.8	q0, q0
 7460	aesd.8	q0, q8
 7461	aesimc.8	q0, q0
 7462	aesd.8	q0, q9
 7463	aesimc.8	q0, q0
 7464	aesd.8	q0, q10
 7465	aesimc.8	q0, q0
 7466	aesd.8	q0, q11
 7467	aesimc.8	q0, q0
 7468	aesd.8	q0, q12
 7469	aesimc.8	q0, q0
 7470	aesd.8	q0, q13
 7471	veor.32	q0, q0, q14
 7472	veor.32	q0, q0, q1
 7473	vst1.8	{q0}, [r1]
 7474L_aes_xts_decrypt_arm32_crypto_192_partial_done:
 7475#endif /* !NO_AES_192 */
 7476	b	L_aes_xts_decrypt_arm32_crypto_done
 7477	# AES_XTS_256
 7478L_aes_xts_decrypt_arm32_crypto_start_256:
 7479#ifndef NO_AES_256
 7480	vldm.32	lr!, {q10-q13}
 7481	aese.8	q1, q2
 7482	aesmc.8	q1, q1
 7483	aese.8	q1, q3
 7484	aesmc.8	q1, q1
 7485	aese.8	q1, q4
 7486	aesmc.8	q1, q1
 7487	aese.8	q1, q5
 7488	aesmc.8	q1, q1
 7489	aese.8	q1, q6
 7490	aesmc.8	q1, q1
 7491	aese.8	q1, q7
 7492	aesmc.8	q1, q1
 7493	aese.8	q1, q8
 7494	aesmc.8	q1, q1
 7495	aese.8	q1, q9
 7496	aesmc.8	q1, q1
 7497	aese.8	q1, q10
 7498	aesmc.8	q1, q1
 7499	aese.8	q1, q11
 7500	aesmc.8	q1, q1
 7501	aese.8	q1, q12
 7502	aesmc.8	q1, q1
 7503	vld1.32	{q14}, [lr]!
 7504	aese.8	q1, q13
 7505	aesmc.8	q1, q1
 7506	vld1.32	{q15}, [lr]!
 7507	aese.8	q1, q14
 7508	aesmc.8	q1, q1
 7509	vld1.32	{q14}, [lr]!
 7510	aese.8	q1, q15
 7511	veor.32	q1, q1, q14
 7512	vmov	r6, r7, d2
 7513	vmov	r8, r9, d3
 7514	vldm.32	r12!, {q2-q9}
 7515	vldm.32	r12!, {q10-q12}
 7516	mov	lr, #0x87
 7517	cmp	r4, #1
 7518	blt	L_aes_xts_decrypt_arm32_crypto_256_done
 7519L_aes_xts_decrypt_arm32_crypto_256_start_1:
 7520	vld1.8	{q0}, [r0]!
 7521	veor.32	q0, q0, q1
 7522	aesd.8	q0, q2
 7523	aesimc.8	q0, q0
 7524	and	r5, lr, r9, asr #31
 7525	aesd.8	q0, q3
 7526	aesimc.8	q0, q0
 7527	lsl	r9, r9, #1
 7528	aesd.8	q0, q4
 7529	aesimc.8	q0, q0
 7530	orr	r9, r9, r8, lsr #31
 7531	aesd.8	q0, q5
 7532	aesimc.8	q0, q0
 7533	lsl	r8, r8, #1
 7534	aesd.8	q0, q6
 7535	aesimc.8	q0, q0
 7536	orr	r8, r8, r7, lsr #31
 7537	aesd.8	q0, q7
 7538	aesimc.8	q0, q0
 7539	lsl	r7, r7, #1
 7540	aesd.8	q0, q8
 7541	aesimc.8	q0, q0
 7542	orr	r7, r7, r6, lsr #31
 7543	aesd.8	q0, q9
 7544	aesimc.8	q0, q0
 7545	eor	r6, r5, r6, lsl #1
 7546	aesd.8	q0, q10
 7547	aesimc.8	q0, q0
 7548	aesd.8	q0, q11
 7549	aesimc.8	q0, q0
 7550	vld1.32	{q13}, [r12]!
 7551	aesd.8	q0, q12
 7552	aesimc.8	q0, q0
 7553	vld1.32	{q14}, [r12]!
 7554	aesd.8	q0, q13
 7555	aesimc.8	q0, q0
 7556	vld1.32	{q13}, [r12]!
 7557	aesd.8	q0, q14
 7558	aesimc.8	q0, q0
 7559	vld1.32	{q14}, [r12]
 7560	aesd.8	q0, q13
 7561	veor.32	q0, q0, q14
 7562	sub	r12, r12, #48
 7563	veor.32	q0, q0, q1
 7564	vmov	d2, r6, r7
 7565	vmov	d3, r8, r9
 7566	subs	r4, r4, #1
 7567	vst1.8	{q0}, [r1]!
 7568	bne	L_aes_xts_decrypt_arm32_crypto_256_start_1
 7569L_aes_xts_decrypt_arm32_crypto_256_done:
 7570	cmp	r2, #0
 7571	beq	L_aes_xts_decrypt_arm32_crypto_256_partial_done
 7572	and	r5, lr, r9, asr #31
 7573	lsl	r9, r9, #1
 7574	orr	r9, r9, r8, lsr #31
 7575	lsl	r8, r8, #1
 7576	orr	r8, r8, r7, lsr #31
 7577	lsl	r7, r7, #1
 7578	orr	r7, r7, r6, lsr #31
 7579	eor	r6, r5, r6, lsl #1
 7580	vmov	d30, r6, r7
 7581	vmov	d31, r8, r9
 7582	vld1.8	{q0}, [r0]!
 7583	ldr	r4, [sp, #100]
 7584	veor.32	q0, q0, q15
 7585	aesd.8	q0, q2
 7586	aesimc.8	q0, q0
 7587	aesd.8	q0, q3
 7588	aesimc.8	q0, q0
 7589	aesd.8	q0, q4
 7590	aesimc.8	q0, q0
 7591	aesd.8	q0, q5
 7592	aesimc.8	q0, q0
 7593	aesd.8	q0, q6
 7594	aesimc.8	q0, q0
 7595	aesd.8	q0, q7
 7596	aesimc.8	q0, q0
 7597	aesd.8	q0, q8
 7598	aesimc.8	q0, q0
 7599	aesd.8	q0, q9
 7600	aesimc.8	q0, q0
 7601	aesd.8	q0, q10
 7602	aesimc.8	q0, q0
 7603	aesd.8	q0, q11
 7604	aesimc.8	q0, q0
 7605	vld1.32	{q13}, [r12]!
 7606	aesd.8	q0, q12
 7607	aesimc.8	q0, q0
 7608	vld1.32	{q14}, [r12]!
 7609	aesd.8	q0, q13
 7610	aesimc.8	q0, q0
 7611	vld1.32	{q13}, [r12]!
 7612	aesd.8	q0, q14
 7613	aesimc.8	q0, q0
 7614	vld1.32	{q14}, [r12]
 7615	aesd.8	q0, q13
 7616	veor.32	q0, q0, q14
 7617	sub	r12, r12, #48
 7618	veor.32	q0, q0, q15
 7619	vst1.32	{q0}, [r4]
 7620	add	r1, r1, #16
 7621	mov	r5, r2
 7622L_aes_xts_decrypt_arm32_crypto_256_start_byte:
 7623	ldrb	r8, [r4]
 7624	ldrb	r9, [r0], #1
 7625	strb	r8, [r1], #1
 7626	strb	r9, [r4], #1
 7627	subs	r5, r5, #1
 7628	bgt	L_aes_xts_decrypt_arm32_crypto_256_start_byte
 7629	sub	r1, r1, r2
 7630	sub	r4, r4, r2
 7631	sub	r1, r1, #16
 7632	vld1.32	{q0}, [r4]
 7633	veor.32	q0, q0, q1
 7634	aesd.8	q0, q2
 7635	aesimc.8	q0, q0
 7636	aesd.8	q0, q3
 7637	aesimc.8	q0, q0
 7638	aesd.8	q0, q4
 7639	aesimc.8	q0, q0
 7640	aesd.8	q0, q5
 7641	aesimc.8	q0, q0
 7642	aesd.8	q0, q6
 7643	aesimc.8	q0, q0
 7644	aesd.8	q0, q7
 7645	aesimc.8	q0, q0
 7646	aesd.8	q0, q8
 7647	aesimc.8	q0, q0
 7648	aesd.8	q0, q9
 7649	aesimc.8	q0, q0
 7650	aesd.8	q0, q10
 7651	aesimc.8	q0, q0
 7652	aesd.8	q0, q11
 7653	aesimc.8	q0, q0
 7654	vld1.32	{q13}, [r12]!
 7655	aesd.8	q0, q12
 7656	aesimc.8	q0, q0
 7657	vld1.32	{q14}, [r12]!
 7658	aesd.8	q0, q13
 7659	aesimc.8	q0, q0
 7660	vld1.32	{q13}, [r12]!
 7661	aesd.8	q0, q14
 7662	aesimc.8	q0, q0
 7663	vld1.32	{q14}, [r12]
 7664	aesd.8	q0, q13
 7665	veor.32	q0, q0, q14
 7666	veor.32	q0, q0, q1
 7667	vst1.8	{q0}, [r1]
 7668L_aes_xts_decrypt_arm32_crypto_256_partial_done:
 7669#endif /* !NO_AES_256 */
 7670	b	L_aes_xts_decrypt_arm32_crypto_done
 7671	# AES_XTS_128
 7672L_aes_xts_decrypt_arm32_crypto_start_128:
 7673#ifndef NO_AES_128
 7674	vldm.32	lr!, {q10-q12}
 7675	aese.8	q1, q2
 7676	aesmc.8	q1, q1
 7677	aese.8	q1, q3
 7678	aesmc.8	q1, q1
 7679	aese.8	q1, q4
 7680	aesmc.8	q1, q1
 7681	aese.8	q1, q5
 7682	aesmc.8	q1, q1
 7683	aese.8	q1, q6
 7684	aesmc.8	q1, q1
 7685	aese.8	q1, q7
 7686	aesmc.8	q1, q1
 7687	aese.8	q1, q8
 7688	aesmc.8	q1, q1
 7689	aese.8	q1, q9
 7690	aesmc.8	q1, q1
 7691	aese.8	q1, q10
 7692	aesmc.8	q1, q1
 7693	aese.8	q1, q11
 7694	veor.32	q1, q1, q12
 7695	vmov	r6, r7, d2
 7696	vmov	r8, r9, d3
 7697	vldm.32	r12!, {q2-q9}
 7698	vldm.32	r12!, {q10-q12}
 7699	mov	lr, #0x87
 7700	cmp	r4, #1
 7701	blt	L_aes_xts_decrypt_arm32_crypto_128_done
 7702L_aes_xts_decrypt_arm32_crypto_128_start_1:
 7703	vld1.8	{q0}, [r0]!
 7704	veor.32	q0, q0, q1
 7705	aesd.8	q0, q2
 7706	aesimc.8	q0, q0
 7707	and	r5, lr, r9, asr #31
 7708	aesd.8	q0, q3
 7709	aesimc.8	q0, q0
 7710	lsl	r9, r9, #1
 7711	aesd.8	q0, q4
 7712	aesimc.8	q0, q0
 7713	orr	r9, r9, r8, lsr #31
 7714	aesd.8	q0, q5
 7715	aesimc.8	q0, q0
 7716	lsl	r8, r8, #1
 7717	aesd.8	q0, q6
 7718	aesimc.8	q0, q0
 7719	orr	r8, r8, r7, lsr #31
 7720	aesd.8	q0, q7
 7721	aesimc.8	q0, q0
 7722	lsl	r7, r7, #1
 7723	aesd.8	q0, q8
 7724	aesimc.8	q0, q0
 7725	orr	r7, r7, r6, lsr #31
 7726	aesd.8	q0, q9
 7727	aesimc.8	q0, q0
 7728	eor	r6, r5, r6, lsl #1
 7729	aesd.8	q0, q10
 7730	aesimc.8	q0, q0
 7731	aesd.8	q0, q11
 7732	veor.32	q0, q0, q12
 7733	veor.32	q0, q0, q1
 7734	vmov	d2, r6, r7
 7735	vmov	d3, r8, r9
 7736	subs	r4, r4, #1
 7737	vst1.8	{q0}, [r1]!
 7738	bne	L_aes_xts_decrypt_arm32_crypto_128_start_1
 7739L_aes_xts_decrypt_arm32_crypto_128_done:
 7740	cmp	r2, #0
 7741	beq	L_aes_xts_decrypt_arm32_crypto_128_partial_done
 7742	and	r5, lr, r9, asr #31
 7743	lsl	r9, r9, #1
 7744	orr	r9, r9, r8, lsr #31
 7745	lsl	r8, r8, #1
 7746	orr	r8, r8, r7, lsr #31
 7747	lsl	r7, r7, #1
 7748	orr	r7, r7, r6, lsr #31
 7749	eor	r6, r5, r6, lsl #1
 7750	vmov	d30, r6, r7
 7751	vmov	d31, r8, r9
 7752	vld1.8	{q0}, [r0]!
 7753	ldr	r4, [sp, #100]
 7754	veor.32	q0, q0, q15
 7755	aesd.8	q0, q2
 7756	aesimc.8	q0, q0
 7757	aesd.8	q0, q3
 7758	aesimc.8	q0, q0
 7759	aesd.8	q0, q4
 7760	aesimc.8	q0, q0
 7761	aesd.8	q0, q5
 7762	aesimc.8	q0, q0
 7763	aesd.8	q0, q6
 7764	aesimc.8	q0, q0
 7765	aesd.8	q0, q7
 7766	aesimc.8	q0, q0
 7767	aesd.8	q0, q8
 7768	aesimc.8	q0, q0
 7769	aesd.8	q0, q9
 7770	aesimc.8	q0, q0
 7771	aesd.8	q0, q10
 7772	aesimc.8	q0, q0
 7773	aesd.8	q0, q11
 7774	veor.32	q0, q0, q12
 7775	veor.32	q0, q0, q15
 7776	vst1.32	{q0}, [r4]
 7777	add	r1, r1, #16
 7778	mov	r5, r2
 7779L_aes_xts_decrypt_arm32_crypto_128_start_byte:
 7780	ldrb	r8, [r4]
 7781	ldrb	r9, [r0], #1
 7782	strb	r8, [r1], #1
 7783	strb	r9, [r4], #1
 7784	subs	r5, r5, #1
 7785	bgt	L_aes_xts_decrypt_arm32_crypto_128_start_byte
 7786	sub	r1, r1, r2
 7787	sub	r4, r4, r2
 7788	sub	r1, r1, #16
 7789	vld1.32	{q0}, [r4]
 7790	veor.32	q0, q0, q1
 7791	aesd.8	q0, q2
 7792	aesimc.8	q0, q0
 7793	aesd.8	q0, q3
 7794	aesimc.8	q0, q0
 7795	aesd.8	q0, q4
 7796	aesimc.8	q0, q0
 7797	aesd.8	q0, q5
 7798	aesimc.8	q0, q0
 7799	aesd.8	q0, q6
 7800	aesimc.8	q0, q0
 7801	aesd.8	q0, q7
 7802	aesimc.8	q0, q0
 7803	aesd.8	q0, q8
 7804	aesimc.8	q0, q0
 7805	aesd.8	q0, q9
 7806	aesimc.8	q0, q0
 7807	aesd.8	q0, q10
 7808	aesimc.8	q0, q0
 7809	aesd.8	q0, q11
 7810	veor.32	q0, q0, q12
 7811	veor.32	q0, q0, q1
 7812	vst1.8	{q0}, [r1]
 7813L_aes_xts_decrypt_arm32_crypto_128_partial_done:
 7814#endif /* !NO_AES_128 */
 7815L_aes_xts_decrypt_arm32_crypto_done:
 7816	vpop	{d8-d15}
 7817	pop	{r4, r5, r6, r7, r8, r9, pc}
 7818	.size	AES_XTS_decrypt_AARCH32,.-AES_XTS_decrypt_AARCH32
 7819#endif /* HAVE_AES_DECRYPT */
 7820#endif /* WOLFSSL_AES_XTS */
 7821#else
 7822#ifdef HAVE_AES_DECRYPT
 7823#ifndef __APPLE__
 7824	.text
 7825	.type	L_AES_ARM32_td_data, %object
 7826	.size	L_AES_ARM32_td_data, 1024
 7827#else
 7828	.section	__DATA,__data
 7829#endif /* __APPLE__ */
 7830	# 8-byte aligned, 64-bit aligned
 7831#ifndef __APPLE__
 7832	.align	3
 7833#else
 7834	.p2align	3
 7835#endif /* __APPLE__ */
 7836L_AES_ARM32_td_data:
 7837	.long	0x5051f4a7,0x537e4165,0xc31a17a4,0x963a275e
 7838	.long	0xcb3bab6b,0xf11f9d45,0xabacfa58,0x934be303
 7839	.long	0x552030fa,0xf6ad766d,0x9188cc76,0x25f5024c
 7840	.long	0xfc4fe5d7,0xd7c52acb,0x80263544,0x8fb562a3
 7841	.long	0x49deb15a,0x6725ba1b,0x9845ea0e,0xe15dfec0
 7842	.long	0x02c32f75,0x12814cf0,0xa38d4697,0xc66bd3f9
 7843	.long	0xe7038f5f,0x9515929c,0xebbf6d7a,0xda955259
 7844	.long	0x2dd4be83,0xd3587421,0x2949e069,0x448ec9c8
 7845	.long	0x6a75c289,0x78f48e79,0x6b99583e,0xdd27b971
 7846	.long	0xb6bee14f,0x17f088ad,0x66c920ac,0xb47dce3a
 7847	.long	0x1863df4a,0x82e51a31,0x60975133,0x4562537f
 7848	.long	0xe0b16477,0x84bb6bae,0x1cfe81a0,0x94f9082b
 7849	.long	0x58704868,0x198f45fd,0x8794de6c,0xb7527bf8
 7850	.long	0x23ab73d3,0xe2724b02,0x57e31f8f,0x2a6655ab
 7851	.long	0x07b2eb28,0x032fb5c2,0x9a86c57b,0xa5d33708
 7852	.long	0xf2302887,0xb223bfa5,0xba02036a,0x5ced1682
 7853	.long	0x2b8acf1c,0x92a779b4,0xf0f307f2,0xa14e69e2
 7854	.long	0xcd65daf4,0xd50605be,0x1fd13462,0x8ac4a6fe
 7855	.long	0x9d342e53,0xa0a2f355,0x32058ae1,0x75a4f6eb
 7856	.long	0x390b83ec,0xaa4060ef,0x065e719f,0x51bd6e10
 7857	.long	0xf93e218a,0x3d96dd06,0xaedd3e05,0x464de6bd
 7858	.long	0xb591548d,0x0571c45d,0x6f0406d4,0xff605015
 7859	.long	0x241998fb,0x97d6bde9,0xcc894043,0x7767d99e
 7860	.long	0xbdb0e842,0x8807898b,0x38e7195b,0xdb79c8ee
 7861	.long	0x47a17c0a,0xe97c420f,0xc9f8841e,0x00000000
 7862	.long	0x83098086,0x48322bed,0xac1e1170,0x4e6c5a72
 7863	.long	0xfbfd0eff,0x560f8538,0x1e3daed5,0x27362d39
 7864	.long	0x640a0fd9,0x21685ca6,0xd19b5b54,0x3a24362e
 7865	.long	0xb10c0a67,0x0f9357e7,0xd2b4ee96,0x9e1b9b91
 7866	.long	0x4f80c0c5,0xa261dc20,0x695a774b,0x161c121a
 7867	.long	0x0ae293ba,0xe5c0a02a,0x433c22e0,0x1d121b17
 7868	.long	0x0b0e090d,0xadf28bc7,0xb92db6a8,0xc8141ea9
 7869	.long	0x8557f119,0x4caf7507,0xbbee99dd,0xfda37f60
 7870	.long	0x9ff70126,0xbc5c72f5,0xc544663b,0x345bfb7e
 7871	.long	0x768b4329,0xdccb23c6,0x68b6edfc,0x63b8e4f1
 7872	.long	0xcad731dc,0x10426385,0x40139722,0x2084c611
 7873	.long	0x7d854a24,0xf8d2bb3d,0x11aef932,0x6dc729a1
 7874	.long	0x4b1d9e2f,0xf3dcb230,0xec0d8652,0xd077c1e3
 7875	.long	0x6c2bb316,0x99a970b9,0xfa119448,0x2247e964
 7876	.long	0xc4a8fc8c,0x1aa0f03f,0xd8567d2c,0xef223390
 7877	.long	0xc787494e,0xc1d938d1,0xfe8ccaa2,0x3698d40b
 7878	.long	0xcfa6f581,0x28a57ade,0x26dab78e,0xa43fadbf
 7879	.long	0xe42c3a9d,0x0d507892,0x9b6a5fcc,0x62547e46
 7880	.long	0xc2f68d13,0xe890d8b8,0x5e2e39f7,0xf582c3af
 7881	.long	0xbe9f5d80,0x7c69d093,0xa96fd52d,0xb3cf2512
 7882	.long	0x3bc8ac99,0xa710187d,0x6ee89c63,0x7bdb3bbb
 7883	.long	0x09cd2678,0xf46e5918,0x01ec9ab7,0xa8834f9a
 7884	.long	0x65e6956e,0x7eaaffe6,0x0821bccf,0xe6ef15e8
 7885	.long	0xd9bae79b,0xce4a6f36,0xd4ea9f09,0xd629b07c
 7886	.long	0xaf31a4b2,0x312a3f23,0x30c6a594,0xc035a266
 7887	.long	0x37744ebc,0xa6fc82ca,0xb0e090d0,0x1533a7d8
 7888	.long	0x4af10498,0xf741ecda,0x0e7fcd50,0x2f1791f6
 7889	.long	0x8d764dd6,0x4d43efb0,0x54ccaa4d,0xdfe49604
 7890	.long	0xe39ed1b5,0x1b4c6a88,0xb8c12c1f,0x7f466551
 7891	.long	0x049d5eea,0x5d018c35,0x73fa8774,0x2efb0b41
 7892	.long	0x5ab3671d,0x5292dbd2,0x33e91056,0x136dd647
 7893	.long	0x8c9ad761,0x7a37a10c,0x8e59f814,0x89eb133c
 7894	.long	0xeecea927,0x35b761c9,0xede11ce5,0x3c7a47b1
 7895	.long	0x599cd2df,0x3f55f273,0x791814ce,0xbf73c737
 7896	.long	0xea53f7cd,0x5b5ffdaa,0x14df3d6f,0x867844db
 7897	.long	0x81caaff3,0x3eb968c4,0x2c382434,0x5fc2a340
 7898	.long	0x72161dc3,0x0cbce225,0x8b283c49,0x41ff0d95
 7899	.long	0x7139a801,0xde080cb3,0x9cd8b4e4,0x906456c1
 7900	.long	0x617bcb84,0x70d532b6,0x74486c5c,0x42d0b857
 7901#endif /* HAVE_AES_DECRYPT */
 7902#if defined(HAVE_AES_DECRYPT) || defined(HAVE_AES_CBC) || \
 7903    defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \
 7904    defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER)
 7905#ifndef __APPLE__
 7906	.text
 7907	.type	L_AES_ARM32_te_data, %object
 7908	.size	L_AES_ARM32_te_data, 1024
 7909#else
 7910	.section	__DATA,__data
 7911#endif /* __APPLE__ */
 7912	# 8-byte aligned, 64-bit aligned
 7913#ifndef __APPLE__
 7914	.align	3
 7915#else
 7916	.p2align	3
 7917#endif /* __APPLE__ */
 7918L_AES_ARM32_te_data:
 7919	.long	0xa5c66363,0x84f87c7c,0x99ee7777,0x8df67b7b
 7920	.long	0x0dfff2f2,0xbdd66b6b,0xb1de6f6f,0x5491c5c5
 7921	.long	0x50603030,0x03020101,0xa9ce6767,0x7d562b2b
 7922	.long	0x19e7fefe,0x62b5d7d7,0xe64dabab,0x9aec7676
 7923	.long	0x458fcaca,0x9d1f8282,0x4089c9c9,0x87fa7d7d
 7924	.long	0x15effafa,0xebb25959,0xc98e4747,0x0bfbf0f0
 7925	.long	0xec41adad,0x67b3d4d4,0xfd5fa2a2,0xea45afaf
 7926	.long	0xbf239c9c,0xf753a4a4,0x96e47272,0x5b9bc0c0
 7927	.long	0xc275b7b7,0x1ce1fdfd,0xae3d9393,0x6a4c2626
 7928	.long	0x5a6c3636,0x417e3f3f,0x02f5f7f7,0x4f83cccc
 7929	.long	0x5c683434,0xf451a5a5,0x34d1e5e5,0x08f9f1f1
 7930	.long	0x93e27171,0x73abd8d8,0x53623131,0x3f2a1515
 7931	.long	0x0c080404,0x5295c7c7,0x65462323,0x5e9dc3c3
 7932	.long	0x28301818,0xa1379696,0x0f0a0505,0xb52f9a9a
 7933	.long	0x090e0707,0x36241212,0x9b1b8080,0x3ddfe2e2
 7934	.long	0x26cdebeb,0x694e2727,0xcd7fb2b2,0x9fea7575
 7935	.long	0x1b120909,0x9e1d8383,0x74582c2c,0x2e341a1a
 7936	.long	0x2d361b1b,0xb2dc6e6e,0xeeb45a5a,0xfb5ba0a0
 7937	.long	0xf6a45252,0x4d763b3b,0x61b7d6d6,0xce7db3b3
 7938	.long	0x7b522929,0x3edde3e3,0x715e2f2f,0x97138484
 7939	.long	0xf5a65353,0x68b9d1d1,0x00000000,0x2cc1eded
 7940	.long	0x60402020,0x1fe3fcfc,0xc879b1b1,0xedb65b5b
 7941	.long	0xbed46a6a,0x468dcbcb,0xd967bebe,0x4b723939
 7942	.long	0xde944a4a,0xd4984c4c,0xe8b05858,0x4a85cfcf
 7943	.long	0x6bbbd0d0,0x2ac5efef,0xe54faaaa,0x16edfbfb
 7944	.long	0xc5864343,0xd79a4d4d,0x55663333,0x94118585
 7945	.long	0xcf8a4545,0x10e9f9f9,0x06040202,0x81fe7f7f
 7946	.long	0xf0a05050,0x44783c3c,0xba259f9f,0xe34ba8a8
 7947	.long	0xf3a25151,0xfe5da3a3,0xc0804040,0x8a058f8f
 7948	.long	0xad3f9292,0xbc219d9d,0x48703838,0x04f1f5f5
 7949	.long	0xdf63bcbc,0xc177b6b6,0x75afdada,0x63422121
 7950	.long	0x30201010,0x1ae5ffff,0x0efdf3f3,0x6dbfd2d2
 7951	.long	0x4c81cdcd,0x14180c0c,0x35261313,0x2fc3ecec
 7952	.long	0xe1be5f5f,0xa2359797,0xcc884444,0x392e1717
 7953	.long	0x5793c4c4,0xf255a7a7,0x82fc7e7e,0x477a3d3d
 7954	.long	0xacc86464,0xe7ba5d5d,0x2b321919,0x95e67373
 7955	.long	0xa0c06060,0x98198181,0xd19e4f4f,0x7fa3dcdc
 7956	.long	0x66442222,0x7e542a2a,0xab3b9090,0x830b8888
 7957	.long	0xca8c4646,0x29c7eeee,0xd36bb8b8,0x3c281414
 7958	.long	0x79a7dede,0xe2bc5e5e,0x1d160b0b,0x76addbdb
 7959	.long	0x3bdbe0e0,0x56643232,0x4e743a3a,0x1e140a0a
 7960	.long	0xdb924949,0x0a0c0606,0x6c482424,0xe4b85c5c
 7961	.long	0x5d9fc2c2,0x6ebdd3d3,0xef43acac,0xa6c46262
 7962	.long	0xa8399191,0xa4319595,0x37d3e4e4,0x8bf27979
 7963	.long	0x32d5e7e7,0x438bc8c8,0x596e3737,0xb7da6d6d
 7964	.long	0x8c018d8d,0x64b1d5d5,0xd29c4e4e,0xe049a9a9
 7965	.long	0xb4d86c6c,0xfaac5656,0x07f3f4f4,0x25cfeaea
 7966	.long	0xafca6565,0x8ef47a7a,0xe947aeae,0x18100808
 7967	.long	0xd56fbaba,0x88f07878,0x6f4a2525,0x725c2e2e
 7968	.long	0x24381c1c,0xf157a6a6,0xc773b4b4,0x5197c6c6
 7969	.long	0x23cbe8e8,0x7ca1dddd,0x9ce87474,0x213e1f1f
 7970	.long	0xdd964b4b,0xdc61bdbd,0x860d8b8b,0x850f8a8a
 7971	.long	0x90e07070,0x427c3e3e,0xc471b5b5,0xaacc6666
 7972	.long	0xd8904848,0x05060303,0x01f7f6f6,0x121c0e0e
 7973	.long	0xa3c26161,0x5f6a3535,0xf9ae5757,0xd069b9b9
 7974	.long	0x91178686,0x5899c1c1,0x273a1d1d,0xb9279e9e
 7975	.long	0x38d9e1e1,0x13ebf8f8,0xb32b9898,0x33221111
 7976	.long	0xbbd26969,0x70a9d9d9,0x89078e8e,0xa7339494
 7977	.long	0xb62d9b9b,0x223c1e1e,0x92158787,0x20c9e9e9
 7978	.long	0x4987cece,0xffaa5555,0x78502828,0x7aa5dfdf
 7979	.long	0x8f038c8c,0xf859a1a1,0x80098989,0x171a0d0d
 7980	.long	0xda65bfbf,0x31d7e6e6,0xc6844242,0xb8d06868
 7981	.long	0xc3824141,0xb0299999,0x775a2d2d,0x111e0f0f
 7982	.long	0xcb7bb0b0,0xfca85454,0xd66dbbbb,0x3a2c1616
 7983#endif /* HAVE_AES_DECRYPT || HAVE_AES_CBC || HAVE_AESCCM || HAVE_AESGCM ||
 7984        * WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */
 7985#ifdef HAVE_AES_DECRYPT
 7986#ifndef __APPLE__
 7987	.text
 7988	.type	L_AES_ARM32_td, %object
 7989	.size	L_AES_ARM32_td, 12
 7990#else
 7991	.section	__DATA,__data
 7992#endif /* __APPLE__ */
 7993	# 8-byte aligned, 64-bit aligned
 7994#ifndef __APPLE__
 7995	.align	3
 7996#else
 7997	.p2align	3
 7998#endif /* __APPLE__ */
 7999L_AES_ARM32_td:
 8000	.long	L_AES_ARM32_td_data
 8001#endif /* HAVE_AES_DECRYPT */
 8002#if defined(HAVE_AES_DECRYPT) || defined(HAVE_AES_CBC) || \
 8003    defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \
 8004    defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER)
 8005#ifndef __APPLE__
 8006	.text
 8007	.type	L_AES_ARM32_te, %object
 8008	.size	L_AES_ARM32_te, 12
 8009#else
 8010	.section	__DATA,__data
 8011#endif /* __APPLE__ */
 8012	# 8-byte aligned, 64-bit aligned
 8013#ifndef __APPLE__
 8014	.align	3
 8015#else
 8016	.p2align	3
 8017#endif /* __APPLE__ */
 8018L_AES_ARM32_te:
 8019	.long	L_AES_ARM32_te_data
 8020#endif /* HAVE_AES_DECRYPT || HAVE_AES_CBC || HAVE_AESCCM || HAVE_AESGCM ||
 8021        * WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */
 8022#ifdef HAVE_AES_DECRYPT
 8023	.text
 8024	.align	4
 8025	.globl	AES_invert_key
 8026	.type	AES_invert_key, %function
 8027AES_invert_key:
 8028	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
 8029	adr	r12, L_AES_ARM32_te
 8030	ldr	r12, [r12]
 8031	adr	lr, L_AES_ARM32_td
 8032	ldr	lr, [lr]
 8033	add	r10, r0, r1, lsl #4
 8034	mov	r11, r1
 8035L_AES_invert_key_loop:
 8036	ldm	r0, {r2, r3, r4, r5}
 8037	ldm	r10, {r6, r7, r8, r9}
 8038	stm	r10, {r2, r3, r4, r5}
 8039	stm	r0!, {r6, r7, r8, r9}
 8040	subs	r11, r11, #2
 8041	sub	r10, r10, #16
 8042	bne	L_AES_invert_key_loop
 8043	sub	r0, r0, r1, lsl #3
 8044	add	r0, r0, #16
 8045	sub	r11, r1, #1
 8046L_AES_invert_key_mix_loop:
 8047	ldm	r0, {r2, r3, r4, r5}
 8048#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8049#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8050	lsl	r6, r2, #24
 8051	lsr	r6, r6, #24
 8052#else
 8053	uxtb	r6, r2
 8054#endif
 8055#else
 8056	ubfx	r6, r2, #0, #8
 8057#endif
 8058#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8059#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8060	lsl	r7, r2, #16
 8061	lsr	r7, r7, #24
 8062#else
 8063	uxtb	r7, r2, ror #8
 8064#endif
 8065#else
 8066	ubfx	r7, r2, #8, #8
 8067#endif
 8068#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8069#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8070	lsl	r8, r2, #8
 8071	lsr	r8, r8, #24
 8072#else
 8073	uxtb	r8, r2, ror #16
 8074#endif
 8075#else
 8076	ubfx	r8, r2, #16, #8
 8077#endif
 8078	lsr	r9, r2, #24
 8079	ldrb	r6, [r12, r6, lsl #2]
 8080	ldrb	r7, [r12, r7, lsl #2]
 8081	ldrb	r8, [r12, r8, lsl #2]
 8082	ldrb	r9, [r12, r9, lsl #2]
 8083	ldr	r6, [lr, r6, lsl #2]
 8084	ldr	r7, [lr, r7, lsl #2]
 8085	ldr	r8, [lr, r8, lsl #2]
 8086	ldr	r9, [lr, r9, lsl #2]
 8087	eor	r8, r8, r6, ror #16
 8088	eor	r8, r8, r7, ror #8
 8089	eor	r8, r8, r9, ror #24
 8090	str	r8, [r0], #4
 8091#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8092#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8093	lsl	r6, r3, #24
 8094	lsr	r6, r6, #24
 8095#else
 8096	uxtb	r6, r3
 8097#endif
 8098#else
 8099	ubfx	r6, r3, #0, #8
 8100#endif
 8101#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8102#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8103	lsl	r7, r3, #16
 8104	lsr	r7, r7, #24
 8105#else
 8106	uxtb	r7, r3, ror #8
 8107#endif
 8108#else
 8109	ubfx	r7, r3, #8, #8
 8110#endif
 8111#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8112#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8113	lsl	r8, r3, #8
 8114	lsr	r8, r8, #24
 8115#else
 8116	uxtb	r8, r3, ror #16
 8117#endif
 8118#else
 8119	ubfx	r8, r3, #16, #8
 8120#endif
 8121	lsr	r9, r3, #24
 8122	ldrb	r6, [r12, r6, lsl #2]
 8123	ldrb	r7, [r12, r7, lsl #2]
 8124	ldrb	r8, [r12, r8, lsl #2]
 8125	ldrb	r9, [r12, r9, lsl #2]
 8126	ldr	r6, [lr, r6, lsl #2]
 8127	ldr	r7, [lr, r7, lsl #2]
 8128	ldr	r8, [lr, r8, lsl #2]
 8129	ldr	r9, [lr, r9, lsl #2]
 8130	eor	r8, r8, r6, ror #16
 8131	eor	r8, r8, r7, ror #8
 8132	eor	r8, r8, r9, ror #24
 8133	str	r8, [r0], #4
 8134#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8135#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8136	lsl	r6, r4, #24
 8137	lsr	r6, r6, #24
 8138#else
 8139	uxtb	r6, r4
 8140#endif
 8141#else
 8142	ubfx	r6, r4, #0, #8
 8143#endif
 8144#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8145#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8146	lsl	r7, r4, #16
 8147	lsr	r7, r7, #24
 8148#else
 8149	uxtb	r7, r4, ror #8
 8150#endif
 8151#else
 8152	ubfx	r7, r4, #8, #8
 8153#endif
 8154#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8155#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8156	lsl	r8, r4, #8
 8157	lsr	r8, r8, #24
 8158#else
 8159	uxtb	r8, r4, ror #16
 8160#endif
 8161#else
 8162	ubfx	r8, r4, #16, #8
 8163#endif
 8164	lsr	r9, r4, #24
 8165	ldrb	r6, [r12, r6, lsl #2]
 8166	ldrb	r7, [r12, r7, lsl #2]
 8167	ldrb	r8, [r12, r8, lsl #2]
 8168	ldrb	r9, [r12, r9, lsl #2]
 8169	ldr	r6, [lr, r6, lsl #2]
 8170	ldr	r7, [lr, r7, lsl #2]
 8171	ldr	r8, [lr, r8, lsl #2]
 8172	ldr	r9, [lr, r9, lsl #2]
 8173	eor	r8, r8, r6, ror #16
 8174	eor	r8, r8, r7, ror #8
 8175	eor	r8, r8, r9, ror #24
 8176	str	r8, [r0], #4
 8177#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8178#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8179	lsl	r6, r5, #24
 8180	lsr	r6, r6, #24
 8181#else
 8182	uxtb	r6, r5
 8183#endif
 8184#else
 8185	ubfx	r6, r5, #0, #8
 8186#endif
 8187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8188#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8189	lsl	r7, r5, #16
 8190	lsr	r7, r7, #24
 8191#else
 8192	uxtb	r7, r5, ror #8
 8193#endif
 8194#else
 8195	ubfx	r7, r5, #8, #8
 8196#endif
 8197#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8198#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8199	lsl	r8, r5, #8
 8200	lsr	r8, r8, #24
 8201#else
 8202	uxtb	r8, r5, ror #16
 8203#endif
 8204#else
 8205	ubfx	r8, r5, #16, #8
 8206#endif
 8207	lsr	r9, r5, #24
 8208	ldrb	r6, [r12, r6, lsl #2]
 8209	ldrb	r7, [r12, r7, lsl #2]
 8210	ldrb	r8, [r12, r8, lsl #2]
 8211	ldrb	r9, [r12, r9, lsl #2]
 8212	ldr	r6, [lr, r6, lsl #2]
 8213	ldr	r7, [lr, r7, lsl #2]
 8214	ldr	r8, [lr, r8, lsl #2]
 8215	ldr	r9, [lr, r9, lsl #2]
 8216	eor	r8, r8, r6, ror #16
 8217	eor	r8, r8, r7, ror #8
 8218	eor	r8, r8, r9, ror #24
 8219	str	r8, [r0], #4
 8220	subs	r11, r11, #1
 8221	bne	L_AES_invert_key_mix_loop
 8222	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
 8223	.size	AES_invert_key,.-AES_invert_key
 8224#endif /* HAVE_AES_DECRYPT */
 8225#ifndef __APPLE__
 8226	.text
 8227	.type	L_AES_ARM32_rcon, %object
 8228	.size	L_AES_ARM32_rcon, 40
 8229#else
 8230	.section	__DATA,__data
 8231#endif /* __APPLE__ */
 8232	# 8-byte aligned, 64-bit aligned
 8233#ifndef __APPLE__
 8234	.align	3
 8235#else
 8236	.p2align	3
 8237#endif /* __APPLE__ */
 8238L_AES_ARM32_rcon:
 8239	.long	0x01000000,0x02000000,0x04000000,0x08000000
 8240	.long	0x10000000,0x20000000,0x40000000,0x80000000
 8241	.long	0x1b000000,0x36000000
 8242	.text
 8243	.align	4
 8244	.globl	AES_set_encrypt_key
 8245	.type	AES_set_encrypt_key, %function
 8246AES_set_encrypt_key:
 8247	push	{r4, r5, r6, r7, r8, lr}
 8248	adr	r8, L_AES_ARM32_te
 8249	ldr	r8, [r8]
 8250	adr	lr, L_AES_ARM32_rcon
 8251	cmp	r1, #0x80
 8252	beq	L_AES_set_encrypt_key_start_128
 8253	cmp	r1, #0xc0
 8254	beq	L_AES_set_encrypt_key_start_192
 8255	ldr	r4, [r0]
 8256	ldr	r5, [r0, #4]
 8257	ldr	r6, [r0, #8]
 8258	ldr	r7, [r0, #12]
 8259#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8260	# REV r4, r4
 8261	eor	r3, r4, r4, ror #16
 8262	bic	r3, r3, #0xff0000
 8263	ror	r4, r4, #8
 8264	eor	r4, r4, r3, lsr #8
 8265	# REV r5, r5
 8266	eor	r3, r5, r5, ror #16
 8267	bic	r3, r3, #0xff0000
 8268	ror	r5, r5, #8
 8269	eor	r5, r5, r3, lsr #8
 8270	# REV r6, r6
 8271	eor	r3, r6, r6, ror #16
 8272	bic	r3, r3, #0xff0000
 8273	ror	r6, r6, #8
 8274	eor	r6, r6, r3, lsr #8
 8275	# REV r7, r7
 8276	eor	r3, r7, r7, ror #16
 8277	bic	r3, r3, #0xff0000
 8278	ror	r7, r7, #8
 8279	eor	r7, r7, r3, lsr #8
 8280#else
 8281	rev	r4, r4
 8282	rev	r5, r5
 8283	rev	r6, r6
 8284	rev	r7, r7
 8285#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
 8286	stm	r2!, {r4, r5, r6, r7}
 8287	ldr	r4, [r0, #16]
 8288	ldr	r5, [r0, #20]
 8289	ldr	r6, [r0, #24]
 8290	ldr	r7, [r0, #28]
 8291#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8292	# REV r4, r4
 8293	eor	r3, r4, r4, ror #16
 8294	bic	r3, r3, #0xff0000
 8295	ror	r4, r4, #8
 8296	eor	r4, r4, r3, lsr #8
 8297	# REV r5, r5
 8298	eor	r3, r5, r5, ror #16
 8299	bic	r3, r3, #0xff0000
 8300	ror	r5, r5, #8
 8301	eor	r5, r5, r3, lsr #8
 8302	# REV r6, r6
 8303	eor	r3, r6, r6, ror #16
 8304	bic	r3, r3, #0xff0000
 8305	ror	r6, r6, #8
 8306	eor	r6, r6, r3, lsr #8
 8307	# REV r7, r7
 8308	eor	r3, r7, r7, ror #16
 8309	bic	r3, r3, #0xff0000
 8310	ror	r7, r7, #8
 8311	eor	r7, r7, r3, lsr #8
 8312#else
 8313	rev	r4, r4
 8314	rev	r5, r5
 8315	rev	r6, r6
 8316	rev	r7, r7
 8317#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
 8318	stm	r2, {r4, r5, r6, r7}
 8319	sub	r2, r2, #16
 8320	mov	r12, #6
 8321L_AES_set_encrypt_key_loop_256:
 8322#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8323#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8324	lsl	r4, r7, #24
 8325	lsr	r4, r4, #24
 8326#else
 8327	uxtb	r4, r7
 8328#endif
 8329#else
 8330	ubfx	r4, r7, #0, #8
 8331#endif
 8332#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8333#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8334	lsl	r5, r7, #16
 8335	lsr	r5, r5, #24
 8336#else
 8337	uxtb	r5, r7, ror #8
 8338#endif
 8339#else
 8340	ubfx	r5, r7, #8, #8
 8341#endif
 8342#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8343#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8344	lsl	r6, r7, #8
 8345	lsr	r6, r6, #24
 8346#else
 8347	uxtb	r6, r7, ror #16
 8348#endif
 8349#else
 8350	ubfx	r6, r7, #16, #8
 8351#endif
 8352	lsr	r7, r7, #24
 8353	ldrb	r4, [r8, r4, lsl #2]
 8354	ldrb	r5, [r8, r5, lsl #2]
 8355	ldrb	r6, [r8, r6, lsl #2]
 8356	ldrb	r7, [r8, r7, lsl #2]
 8357	eor	r3, r7, r4, lsl #8
 8358	eor	r3, r3, r5, lsl #16
 8359	eor	r3, r3, r6, lsl #24
 8360	ldm	r2!, {r4, r5, r6, r7}
 8361	eor	r4, r4, r3
 8362	ldm	lr!, {r3}
 8363	eor	r4, r4, r3
 8364	eor	r5, r5, r4
 8365	eor	r6, r6, r5
 8366	eor	r7, r7, r6
 8367	add	r2, r2, #16
 8368	stm	r2, {r4, r5, r6, r7}
 8369	sub	r2, r2, #16
 8370	mov	r3, r7
 8371#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8372#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8373	lsl	r4, r3, #16
 8374	lsr	r4, r4, #24
 8375#else
 8376	uxtb	r4, r3, ror #8
 8377#endif
 8378#else
 8379	ubfx	r4, r3, #8, #8
 8380#endif
 8381#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8382#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8383	lsl	r5, r3, #8
 8384	lsr	r5, r5, #24
 8385#else
 8386	uxtb	r5, r3, ror #16
 8387#endif
 8388#else
 8389	ubfx	r5, r3, #16, #8
 8390#endif
 8391	lsr	r6, r3, #24
 8392#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8393#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8394	lsl	r3, r3, #24
 8395	lsr	r3, r3, #24
 8396#else
 8397	uxtb	r3, r3
 8398#endif
 8399#else
 8400	ubfx	r3, r3, #0, #8
 8401#endif
 8402	ldrb	r4, [r8, r4, lsl #2]
 8403	ldrb	r6, [r8, r6, lsl #2]
 8404	ldrb	r5, [r8, r5, lsl #2]
 8405	ldrb	r3, [r8, r3, lsl #2]
 8406	eor	r3, r3, r4, lsl #8
 8407	eor	r3, r3, r5, lsl #16
 8408	eor	r3, r3, r6, lsl #24
 8409	ldm	r2!, {r4, r5, r6, r7}
 8410	eor	r4, r4, r3
 8411	eor	r5, r5, r4
 8412	eor	r6, r6, r5
 8413	eor	r7, r7, r6
 8414	add	r2, r2, #16
 8415	stm	r2, {r4, r5, r6, r7}
 8416	sub	r2, r2, #16
 8417	subs	r12, r12, #1
 8418	bne	L_AES_set_encrypt_key_loop_256
 8419#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8420#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8421	lsl	r4, r7, #24
 8422	lsr	r4, r4, #24
 8423#else
 8424	uxtb	r4, r7
 8425#endif
 8426#else
 8427	ubfx	r4, r7, #0, #8
 8428#endif
 8429#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8430#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8431	lsl	r5, r7, #16
 8432	lsr	r5, r5, #24
 8433#else
 8434	uxtb	r5, r7, ror #8
 8435#endif
 8436#else
 8437	ubfx	r5, r7, #8, #8
 8438#endif
 8439#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8440#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8441	lsl	r6, r7, #8
 8442	lsr	r6, r6, #24
 8443#else
 8444	uxtb	r6, r7, ror #16
 8445#endif
 8446#else
 8447	ubfx	r6, r7, #16, #8
 8448#endif
 8449	lsr	r7, r7, #24
 8450	ldrb	r4, [r8, r4, lsl #2]
 8451	ldrb	r5, [r8, r5, lsl #2]
 8452	ldrb	r6, [r8, r6, lsl #2]
 8453	ldrb	r7, [r8, r7, lsl #2]
 8454	eor	r3, r7, r4, lsl #8
 8455	eor	r3, r3, r5, lsl #16
 8456	eor	r3, r3, r6, lsl #24
 8457	ldm	r2!, {r4, r5, r6, r7}
 8458	eor	r4, r4, r3
 8459	ldm	lr!, {r3}
 8460	eor	r4, r4, r3
 8461	eor	r5, r5, r4
 8462	eor	r6, r6, r5
 8463	eor	r7, r7, r6
 8464	add	r2, r2, #16
 8465	stm	r2, {r4, r5, r6, r7}
 8466	sub	r2, r2, #16
 8467	b	L_AES_set_encrypt_key_end
 8468L_AES_set_encrypt_key_start_192:
 8469	ldr	r4, [r0]
 8470	ldr	r5, [r0, #4]
 8471	ldr	r6, [r0, #8]
 8472	ldr	r7, [r0, #12]
 8473	ldr	r1, [r0, #20]
 8474	ldr	r0, [r0, #16]
 8475#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8476	# REV r4, r4
 8477	eor	r3, r4, r4, ror #16
 8478	bic	r3, r3, #0xff0000
 8479	ror	r4, r4, #8
 8480	eor	r4, r4, r3, lsr #8
 8481	# REV r5, r5
 8482	eor	r3, r5, r5, ror #16
 8483	bic	r3, r3, #0xff0000
 8484	ror	r5, r5, #8
 8485	eor	r5, r5, r3, lsr #8
 8486	# REV r6, r6
 8487	eor	r3, r6, r6, ror #16
 8488	bic	r3, r3, #0xff0000
 8489	ror	r6, r6, #8
 8490	eor	r6, r6, r3, lsr #8
 8491	# REV r7, r7
 8492	eor	r3, r7, r7, ror #16
 8493	bic	r3, r3, #0xff0000
 8494	ror	r7, r7, #8
 8495	eor	r7, r7, r3, lsr #8
 8496	# REV r0, r0
 8497	eor	r3, r0, r0, ror #16
 8498	bic	r3, r3, #0xff0000
 8499	ror	r0, r0, #8
 8500	eor	r0, r0, r3, lsr #8
 8501	# REV r1, r1
 8502	eor	r3, r1, r1, ror #16
 8503	bic	r3, r3, #0xff0000
 8504	ror	r1, r1, #8
 8505	eor	r1, r1, r3, lsr #8
 8506#else
 8507	rev	r4, r4
 8508	rev	r5, r5
 8509	rev	r6, r6
 8510	rev	r7, r7
 8511	rev	r0, r0
 8512	rev	r1, r1
 8513#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
 8514	stm	r2, {r4, r5, r6, r7}
 8515#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8516	str	r0, [r2, #16]
 8517	str	r1, [r2, #20]
 8518#else
 8519	strd	r0, r1, [r2, #16]
 8520#endif
 8521	mov	r7, r1
 8522	mov	r12, #7
 8523L_AES_set_encrypt_key_loop_192:
 8524#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8525#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8526	lsl	r0, r7, #24
 8527	lsr	r0, r0, #24
 8528#else
 8529	uxtb	r0, r7
 8530#endif
 8531#else
 8532	ubfx	r0, r7, #0, #8
 8533#endif
 8534#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8535#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8536	lsl	r1, r7, #16
 8537	lsr	r1, r1, #24
 8538#else
 8539	uxtb	r1, r7, ror #8
 8540#endif
 8541#else
 8542	ubfx	r1, r7, #8, #8
 8543#endif
 8544#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8545#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8546	lsl	r4, r7, #8
 8547	lsr	r4, r4, #24
 8548#else
 8549	uxtb	r4, r7, ror #16
 8550#endif
 8551#else
 8552	ubfx	r4, r7, #16, #8
 8553#endif
 8554	lsr	r7, r7, #24
 8555	ldrb	r0, [r8, r0, lsl #2]
 8556	ldrb	r1, [r8, r1, lsl #2]
 8557	ldrb	r4, [r8, r4, lsl #2]
 8558	ldrb	r7, [r8, r7, lsl #2]
 8559	eor	r3, r7, r0, lsl #8
 8560	eor	r3, r3, r1, lsl #16
 8561	eor	r3, r3, r4, lsl #24
 8562	ldm	r2!, {r0, r1, r4, r5, r6, r7}
 8563	eor	r0, r0, r3
 8564	ldm	lr!, {r3}
 8565	eor	r0, r0, r3
 8566	eor	r1, r1, r0
 8567	eor	r4, r4, r1
 8568	eor	r5, r5, r4
 8569	eor	r6, r6, r5
 8570	eor	r7, r7, r6
 8571	stm	r2, {r0, r1, r4, r5, r6, r7}
 8572	subs	r12, r12, #1
 8573	bne	L_AES_set_encrypt_key_loop_192
 8574#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8575#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8576	lsl	r0, r7, #24
 8577	lsr	r0, r0, #24
 8578#else
 8579	uxtb	r0, r7
 8580#endif
 8581#else
 8582	ubfx	r0, r7, #0, #8
 8583#endif
 8584#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8585#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8586	lsl	r1, r7, #16
 8587	lsr	r1, r1, #24
 8588#else
 8589	uxtb	r1, r7, ror #8
 8590#endif
 8591#else
 8592	ubfx	r1, r7, #8, #8
 8593#endif
 8594#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8595#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8596	lsl	r4, r7, #8
 8597	lsr	r4, r4, #24
 8598#else
 8599	uxtb	r4, r7, ror #16
 8600#endif
 8601#else
 8602	ubfx	r4, r7, #16, #8
 8603#endif
 8604	lsr	r7, r7, #24
 8605	ldrb	r0, [r8, r0, lsl #2]
 8606	ldrb	r1, [r8, r1, lsl #2]
 8607	ldrb	r4, [r8, r4, lsl #2]
 8608	ldrb	r7, [r8, r7, lsl #2]
 8609	eor	r3, r7, r0, lsl #8
 8610	eor	r3, r3, r1, lsl #16
 8611	eor	r3, r3, r4, lsl #24
 8612	ldm	r2!, {r0, r1, r4, r5, r6, r7}
 8613	eor	r0, r0, r3
 8614	ldm	lr!, {r3}
 8615	eor	r0, r0, r3
 8616	eor	r1, r1, r0
 8617	eor	r4, r4, r1
 8618	eor	r5, r5, r4
 8619	stm	r2, {r0, r1, r4, r5}
 8620	b	L_AES_set_encrypt_key_end
 8621L_AES_set_encrypt_key_start_128:
 8622	ldr	r4, [r0]
 8623	ldr	r5, [r0, #4]
 8624	ldr	r6, [r0, #8]
 8625	ldr	r7, [r0, #12]
 8626#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8627	# REV r4, r4
 8628	eor	r3, r4, r4, ror #16
 8629	bic	r3, r3, #0xff0000
 8630	ror	r4, r4, #8
 8631	eor	r4, r4, r3, lsr #8
 8632	# REV r5, r5
 8633	eor	r3, r5, r5, ror #16
 8634	bic	r3, r3, #0xff0000
 8635	ror	r5, r5, #8
 8636	eor	r5, r5, r3, lsr #8
 8637	# REV r6, r6
 8638	eor	r3, r6, r6, ror #16
 8639	bic	r3, r3, #0xff0000
 8640	ror	r6, r6, #8
 8641	eor	r6, r6, r3, lsr #8
 8642	# REV r7, r7
 8643	eor	r3, r7, r7, ror #16
 8644	bic	r3, r3, #0xff0000
 8645	ror	r7, r7, #8
 8646	eor	r7, r7, r3, lsr #8
 8647#else
 8648	rev	r4, r4
 8649	rev	r5, r5
 8650	rev	r6, r6
 8651	rev	r7, r7
 8652#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
 8653	stm	r2, {r4, r5, r6, r7}
 8654	mov	r12, #10
 8655L_AES_set_encrypt_key_loop_128:
 8656#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8657#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8658	lsl	r4, r7, #24
 8659	lsr	r4, r4, #24
 8660#else
 8661	uxtb	r4, r7
 8662#endif
 8663#else
 8664	ubfx	r4, r7, #0, #8
 8665#endif
 8666#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8667#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8668	lsl	r5, r7, #16
 8669	lsr	r5, r5, #24
 8670#else
 8671	uxtb	r5, r7, ror #8
 8672#endif
 8673#else
 8674	ubfx	r5, r7, #8, #8
 8675#endif
 8676#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8677#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8678	lsl	r6, r7, #8
 8679	lsr	r6, r6, #24
 8680#else
 8681	uxtb	r6, r7, ror #16
 8682#endif
 8683#else
 8684	ubfx	r6, r7, #16, #8
 8685#endif
 8686	lsr	r7, r7, #24
 8687	ldrb	r4, [r8, r4, lsl #2]
 8688	ldrb	r5, [r8, r5, lsl #2]
 8689	ldrb	r6, [r8, r6, lsl #2]
 8690	ldrb	r7, [r8, r7, lsl #2]
 8691	eor	r3, r7, r4, lsl #8
 8692	eor	r3, r3, r5, lsl #16
 8693	eor	r3, r3, r6, lsl #24
 8694	ldm	r2!, {r4, r5, r6, r7}
 8695	eor	r4, r4, r3
 8696	ldm	lr!, {r3}
 8697	eor	r4, r4, r3
 8698	eor	r5, r5, r4
 8699	eor	r6, r6, r5
 8700	eor	r7, r7, r6
 8701	stm	r2, {r4, r5, r6, r7}
 8702	subs	r12, r12, #1
 8703	bne	L_AES_set_encrypt_key_loop_128
 8704L_AES_set_encrypt_key_end:
 8705	pop	{r4, r5, r6, r7, r8, pc}
 8706	.size	AES_set_encrypt_key,.-AES_set_encrypt_key
 8707#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
 8708	.text
 8709	.align	4
 8710	.globl	AES_encrypt_block
 8711	.type	AES_encrypt_block, %function
 8712AES_encrypt_block:
 8713	push	{lr}
 8714L_AES_encrypt_block_nr:
 8715#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8716#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8717	lsl	r8, r5, #8
 8718	lsr	r8, r8, #24
 8719#else
 8720	uxtb	r8, r5, ror #16
 8721#endif
 8722#else
 8723	ubfx	r8, r5, #16, #8
 8724#endif
 8725	lsr	r11, r4, #24
 8726#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8727#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8728	lsl	lr, r6, #16
 8729	lsr	lr, lr, #24
 8730#else
 8731	uxtb	lr, r6, ror #8
 8732#endif
 8733#else
 8734	ubfx	lr, r6, #8, #8
 8735#endif
 8736#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8737#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8738	lsl	r2, r7, #24
 8739	lsr	r2, r2, #24
 8740#else
 8741	uxtb	r2, r7
 8742#endif
 8743#else
 8744	ubfx	r2, r7, #0, #8
 8745#endif
 8746	ldr	r8, [r0, r8, lsl #2]
 8747	ldr	r11, [r0, r11, lsl #2]
 8748	ldr	lr, [r0, lr, lsl #2]
 8749	ldr	r2, [r0, r2, lsl #2]
 8750#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8751#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8752	lsl	r9, r6, #8
 8753	lsr	r9, r9, #24
 8754#else
 8755	uxtb	r9, r6, ror #16
 8756#endif
 8757#else
 8758	ubfx	r9, r6, #16, #8
 8759#endif
 8760	eor	r8, r8, r11, ror #24
 8761	lsr	r11, r5, #24
 8762	eor	r8, r8, lr, ror #8
 8763#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8764#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8765	lsl	lr, r7, #16
 8766	lsr	lr, lr, #24
 8767#else
 8768	uxtb	lr, r7, ror #8
 8769#endif
 8770#else
 8771	ubfx	lr, r7, #8, #8
 8772#endif
 8773	eor	r8, r8, r2, ror #16
 8774#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8775#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8776	lsl	r2, r4, #24
 8777	lsr	r2, r2, #24
 8778#else
 8779	uxtb	r2, r4
 8780#endif
 8781#else
 8782	ubfx	r2, r4, #0, #8
 8783#endif
 8784	ldr	r9, [r0, r9, lsl #2]
 8785	ldr	r11, [r0, r11, lsl #2]
 8786	ldr	lr, [r0, lr, lsl #2]
 8787	ldr	r2, [r0, r2, lsl #2]
 8788#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8789#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8790	lsl	r10, r7, #8
 8791	lsr	r10, r10, #24
 8792#else
 8793	uxtb	r10, r7, ror #16
 8794#endif
 8795#else
 8796	ubfx	r10, r7, #16, #8
 8797#endif
 8798	eor	r9, r9, r11, ror #24
 8799	lsr	r11, r6, #24
 8800	eor	r9, r9, lr, ror #8
 8801#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8802#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8803	lsl	lr, r4, #16
 8804	lsr	lr, lr, #24
 8805#else
 8806	uxtb	lr, r4, ror #8
 8807#endif
 8808#else
 8809	ubfx	lr, r4, #8, #8
 8810#endif
 8811	eor	r9, r9, r2, ror #16
 8812#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8813#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8814	lsl	r2, r5, #24
 8815	lsr	r2, r2, #24
 8816#else
 8817	uxtb	r2, r5
 8818#endif
 8819#else
 8820	ubfx	r2, r5, #0, #8
 8821#endif
 8822	ldr	r10, [r0, r10, lsl #2]
 8823	ldr	r11, [r0, r11, lsl #2]
 8824	ldr	lr, [r0, lr, lsl #2]
 8825	ldr	r2, [r0, r2, lsl #2]
 8826#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8827#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8828	lsl	r6, r6, #24
 8829	lsr	r6, r6, #24
 8830#else
 8831	uxtb	r6, r6
 8832#endif
 8833#else
 8834	ubfx	r6, r6, #0, #8
 8835#endif
 8836	eor	r10, r10, r11, ror #24
 8837#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8838#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8839	lsl	r11, r4, #8
 8840	lsr	r11, r11, #24
 8841#else
 8842	uxtb	r11, r4, ror #16
 8843#endif
 8844#else
 8845	ubfx	r11, r4, #16, #8
 8846#endif
 8847	eor	r10, r10, lr, ror #8
 8848	lsr	lr, r7, #24
 8849	eor	r10, r10, r2, ror #16
 8850#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8851#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8852	lsl	r2, r5, #16
 8853	lsr	r2, r2, #24
 8854#else
 8855	uxtb	r2, r5, ror #8
 8856#endif
 8857#else
 8858	ubfx	r2, r5, #8, #8
 8859#endif
 8860	ldr	r6, [r0, r6, lsl #2]
 8861	ldr	lr, [r0, lr, lsl #2]
 8862	ldr	r11, [r0, r11, lsl #2]
 8863	ldr	r2, [r0, r2, lsl #2]
 8864	eor	lr, lr, r6, ror #24
 8865	ldm	r3!, {r4, r5, r6, r7}
 8866	eor	r11, r11, lr, ror #24
 8867	eor	r11, r11, r2, ror #8
 8868	#   XOR in Key Schedule
 8869	eor	r8, r8, r4
 8870	eor	r9, r9, r5
 8871	eor	r10, r10, r6
 8872	eor	r11, r11, r7
 8873#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8874#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8875	lsl	r4, r9, #8
 8876	lsr	r4, r4, #24
 8877#else
 8878	uxtb	r4, r9, ror #16
 8879#endif
 8880#else
 8881	ubfx	r4, r9, #16, #8
 8882#endif
 8883	lsr	r7, r8, #24
 8884#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8885#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8886	lsl	lr, r10, #16
 8887	lsr	lr, lr, #24
 8888#else
 8889	uxtb	lr, r10, ror #8
 8890#endif
 8891#else
 8892	ubfx	lr, r10, #8, #8
 8893#endif
 8894#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8895#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8896	lsl	r2, r11, #24
 8897	lsr	r2, r2, #24
 8898#else
 8899	uxtb	r2, r11
 8900#endif
 8901#else
 8902	ubfx	r2, r11, #0, #8
 8903#endif
 8904	ldr	r4, [r0, r4, lsl #2]
 8905	ldr	r7, [r0, r7, lsl #2]
 8906	ldr	lr, [r0, lr, lsl #2]
 8907	ldr	r2, [r0, r2, lsl #2]
 8908#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8909#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8910	lsl	r5, r10, #8
 8911	lsr	r5, r5, #24
 8912#else
 8913	uxtb	r5, r10, ror #16
 8914#endif
 8915#else
 8916	ubfx	r5, r10, #16, #8
 8917#endif
 8918	eor	r4, r4, r7, ror #24
 8919	lsr	r7, r9, #24
 8920	eor	r4, r4, lr, ror #8
 8921#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8922#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8923	lsl	lr, r11, #16
 8924	lsr	lr, lr, #24
 8925#else
 8926	uxtb	lr, r11, ror #8
 8927#endif
 8928#else
 8929	ubfx	lr, r11, #8, #8
 8930#endif
 8931	eor	r4, r4, r2, ror #16
 8932#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8933#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8934	lsl	r2, r8, #24
 8935	lsr	r2, r2, #24
 8936#else
 8937	uxtb	r2, r8
 8938#endif
 8939#else
 8940	ubfx	r2, r8, #0, #8
 8941#endif
 8942	ldr	r5, [r0, r5, lsl #2]
 8943	ldr	r7, [r0, r7, lsl #2]
 8944	ldr	lr, [r0, lr, lsl #2]
 8945	ldr	r2, [r0, r2, lsl #2]
 8946#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8947#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8948	lsl	r6, r11, #8
 8949	lsr	r6, r6, #24
 8950#else
 8951	uxtb	r6, r11, ror #16
 8952#endif
 8953#else
 8954	ubfx	r6, r11, #16, #8
 8955#endif
 8956	eor	r5, r5, r7, ror #24
 8957	lsr	r7, r10, #24
 8958	eor	r5, r5, lr, ror #8
 8959#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8960#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8961	lsl	lr, r8, #16
 8962	lsr	lr, lr, #24
 8963#else
 8964	uxtb	lr, r8, ror #8
 8965#endif
 8966#else
 8967	ubfx	lr, r8, #8, #8
 8968#endif
 8969	eor	r5, r5, r2, ror #16
 8970#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8971#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8972	lsl	r2, r9, #24
 8973	lsr	r2, r2, #24
 8974#else
 8975	uxtb	r2, r9
 8976#endif
 8977#else
 8978	ubfx	r2, r9, #0, #8
 8979#endif
 8980	ldr	r6, [r0, r6, lsl #2]
 8981	ldr	r7, [r0, r7, lsl #2]
 8982	ldr	lr, [r0, lr, lsl #2]
 8983	ldr	r2, [r0, r2, lsl #2]
 8984#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8985#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8986	lsl	r10, r10, #24
 8987	lsr	r10, r10, #24
 8988#else
 8989	uxtb	r10, r10
 8990#endif
 8991#else
 8992	ubfx	r10, r10, #0, #8
 8993#endif
 8994	eor	r6, r6, r7, ror #24
 8995#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 8996#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 8997	lsl	r7, r8, #8
 8998	lsr	r7, r7, #24
 8999#else
 9000	uxtb	r7, r8, ror #16
 9001#endif
 9002#else
 9003	ubfx	r7, r8, #16, #8
 9004#endif
 9005	eor	r6, r6, lr, ror #8
 9006	lsr	lr, r11, #24
 9007	eor	r6, r6, r2, ror #16
 9008#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9009#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9010	lsl	r2, r9, #16
 9011	lsr	r2, r2, #24
 9012#else
 9013	uxtb	r2, r9, ror #8
 9014#endif
 9015#else
 9016	ubfx	r2, r9, #8, #8
 9017#endif
 9018	ldr	r10, [r0, r10, lsl #2]
 9019	ldr	lr, [r0, lr, lsl #2]
 9020	ldr	r7, [r0, r7, lsl #2]
 9021	ldr	r2, [r0, r2, lsl #2]
 9022	eor	lr, lr, r10, ror #24
 9023	ldm	r3!, {r8, r9, r10, r11}
 9024	eor	r7, r7, lr, ror #24
 9025	eor	r7, r7, r2, ror #8
 9026	#   XOR in Key Schedule
 9027	eor	r4, r4, r8
 9028	eor	r5, r5, r9
 9029	eor	r6, r6, r10
 9030	eor	r7, r7, r11
 9031	subs	r1, r1, #1
 9032	bne	L_AES_encrypt_block_nr
 9033#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9034#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9035	lsl	r8, r5, #8
 9036	lsr	r8, r8, #24
 9037#else
 9038	uxtb	r8, r5, ror #16
 9039#endif
 9040#else
 9041	ubfx	r8, r5, #16, #8
 9042#endif
 9043	lsr	r11, r4, #24
 9044#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9045#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9046	lsl	lr, r6, #16
 9047	lsr	lr, lr, #24
 9048#else
 9049	uxtb	lr, r6, ror #8
 9050#endif
 9051#else
 9052	ubfx	lr, r6, #8, #8
 9053#endif
 9054#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9055#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9056	lsl	r2, r7, #24
 9057	lsr	r2, r2, #24
 9058#else
 9059	uxtb	r2, r7
 9060#endif
 9061#else
 9062	ubfx	r2, r7, #0, #8
 9063#endif
 9064	ldr	r8, [r0, r8, lsl #2]
 9065	ldr	r11, [r0, r11, lsl #2]
 9066	ldr	lr, [r0, lr, lsl #2]
 9067	ldr	r2, [r0, r2, lsl #2]
 9068#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9069#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9070	lsl	r9, r6, #8
 9071	lsr	r9, r9, #24
 9072#else
 9073	uxtb	r9, r6, ror #16
 9074#endif
 9075#else
 9076	ubfx	r9, r6, #16, #8
 9077#endif
 9078	eor	r8, r8, r11, ror #24
 9079	lsr	r11, r5, #24
 9080	eor	r8, r8, lr, ror #8
 9081#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9082#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9083	lsl	lr, r7, #16
 9084	lsr	lr, lr, #24
 9085#else
 9086	uxtb	lr, r7, ror #8
 9087#endif
 9088#else
 9089	ubfx	lr, r7, #8, #8
 9090#endif
 9091	eor	r8, r8, r2, ror #16
 9092#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9093#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9094	lsl	r2, r4, #24
 9095	lsr	r2, r2, #24
 9096#else
 9097	uxtb	r2, r4
 9098#endif
 9099#else
 9100	ubfx	r2, r4, #0, #8
 9101#endif
 9102	ldr	r9, [r0, r9, lsl #2]
 9103	ldr	r11, [r0, r11, lsl #2]
 9104	ldr	lr, [r0, lr, lsl #2]
 9105	ldr	r2, [r0, r2, lsl #2]
 9106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9107#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9108	lsl	r10, r7, #8
 9109	lsr	r10, r10, #24
 9110#else
 9111	uxtb	r10, r7, ror #16
 9112#endif
 9113#else
 9114	ubfx	r10, r7, #16, #8
 9115#endif
 9116	eor	r9, r9, r11, ror #24
 9117	lsr	r11, r6, #24
 9118	eor	r9, r9, lr, ror #8
 9119#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9120#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9121	lsl	lr, r4, #16
 9122	lsr	lr, lr, #24
 9123#else
 9124	uxtb	lr, r4, ror #8
 9125#endif
 9126#else
 9127	ubfx	lr, r4, #8, #8
 9128#endif
 9129	eor	r9, r9, r2, ror #16
 9130#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9131#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9132	lsl	r2, r5, #24
 9133	lsr	r2, r2, #24
 9134#else
 9135	uxtb	r2, r5
 9136#endif
 9137#else
 9138	ubfx	r2, r5, #0, #8
 9139#endif
 9140	ldr	r10, [r0, r10, lsl #2]
 9141	ldr	r11, [r0, r11, lsl #2]
 9142	ldr	lr, [r0, lr, lsl #2]
 9143	ldr	r2, [r0, r2, lsl #2]
 9144#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9145#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9146	lsl	r6, r6, #24
 9147	lsr	r6, r6, #24
 9148#else
 9149	uxtb	r6, r6
 9150#endif
 9151#else
 9152	ubfx	r6, r6, #0, #8
 9153#endif
 9154	eor	r10, r10, r11, ror #24
 9155#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9156#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9157	lsl	r11, r4, #8
 9158	lsr	r11, r11, #24
 9159#else
 9160	uxtb	r11, r4, ror #16
 9161#endif
 9162#else
 9163	ubfx	r11, r4, #16, #8
 9164#endif
 9165	eor	r10, r10, lr, ror #8
 9166	lsr	lr, r7, #24
 9167	eor	r10, r10, r2, ror #16
 9168#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9169#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9170	lsl	r2, r5, #16
 9171	lsr	r2, r2, #24
 9172#else
 9173	uxtb	r2, r5, ror #8
 9174#endif
 9175#else
 9176	ubfx	r2, r5, #8, #8
 9177#endif
 9178	ldr	r6, [r0, r6, lsl #2]
 9179	ldr	lr, [r0, lr, lsl #2]
 9180	ldr	r11, [r0, r11, lsl #2]
 9181	ldr	r2, [r0, r2, lsl #2]
 9182	eor	lr, lr, r6, ror #24
 9183	ldm	r3!, {r4, r5, r6, r7}
 9184	eor	r11, r11, lr, ror #24
 9185	eor	r11, r11, r2, ror #8
 9186	#   XOR in Key Schedule
 9187	eor	r8, r8, r4
 9188	eor	r9, r9, r5
 9189	eor	r10, r10, r6
 9190	eor	r11, r11, r7
 9191#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9192#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9193	lsl	r4, r11, #24
 9194	lsr	r4, r4, #24
 9195#else
 9196	uxtb	r4, r11
 9197#endif
 9198#else
 9199	ubfx	r4, r11, #0, #8
 9200#endif
 9201#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9202#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9203	lsl	r7, r10, #16
 9204	lsr	r7, r7, #24
 9205#else
 9206	uxtb	r7, r10, ror #8
 9207#endif
 9208#else
 9209	ubfx	r7, r10, #8, #8
 9210#endif
 9211#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9213	lsl	lr, r9, #8
 9214	lsr	lr, lr, #24
 9215#else
 9216	uxtb	lr, r9, ror #16
 9217#endif
 9218#else
 9219	ubfx	lr, r9, #16, #8
 9220#endif
 9221	lsr	r2, r8, #24
 9222	ldrb	r4, [r0, r4, lsl #2]
 9223	ldrb	r7, [r0, r7, lsl #2]
 9224	ldrb	lr, [r0, lr, lsl #2]
 9225	ldrb	r2, [r0, r2, lsl #2]
 9226#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9227#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9228	lsl	r5, r8, #24
 9229	lsr	r5, r5, #24
 9230#else
 9231	uxtb	r5, r8
 9232#endif
 9233#else
 9234	ubfx	r5, r8, #0, #8
 9235#endif
 9236	eor	r4, r4, r7, lsl #8
 9237#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9238#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9239	lsl	r7, r11, #16
 9240	lsr	r7, r7, #24
 9241#else
 9242	uxtb	r7, r11, ror #8
 9243#endif
 9244#else
 9245	ubfx	r7, r11, #8, #8
 9246#endif
 9247	eor	r4, r4, lr, lsl #16
 9248#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9249#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9250	lsl	lr, r10, #8
 9251	lsr	lr, lr, #24
 9252#else
 9253	uxtb	lr, r10, ror #16
 9254#endif
 9255#else
 9256	ubfx	lr, r10, #16, #8
 9257#endif
 9258	eor	r4, r4, r2, lsl #24
 9259	lsr	r2, r9, #24
 9260	ldrb	r5, [r0, r5, lsl #2]
 9261	ldrb	r7, [r0, r7, lsl #2]
 9262	ldrb	lr, [r0, lr, lsl #2]
 9263	ldrb	r2, [r0, r2, lsl #2]
 9264#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9265#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9266	lsl	r6, r9, #24
 9267	lsr	r6, r6, #24
 9268#else
 9269	uxtb	r6, r9
 9270#endif
 9271#else
 9272	ubfx	r6, r9, #0, #8
 9273#endif
 9274	eor	r5, r5, r7, lsl #8
 9275#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9276#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9277	lsl	r7, r8, #16
 9278	lsr	r7, r7, #24
 9279#else
 9280	uxtb	r7, r8, ror #8
 9281#endif
 9282#else
 9283	ubfx	r7, r8, #8, #8
 9284#endif
 9285	eor	r5, r5, lr, lsl #16
 9286#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9287#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9288	lsl	lr, r11, #8
 9289	lsr	lr, lr, #24
 9290#else
 9291	uxtb	lr, r11, ror #16
 9292#endif
 9293#else
 9294	ubfx	lr, r11, #16, #8
 9295#endif
 9296	eor	r5, r5, r2, lsl #24
 9297	lsr	r2, r10, #24
 9298	ldrb	r6, [r0, r6, lsl #2]
 9299	ldrb	r7, [r0, r7, lsl #2]
 9300	ldrb	lr, [r0, lr, lsl #2]
 9301	ldrb	r2, [r0, r2, lsl #2]
 9302	lsr	r11, r11, #24
 9303	eor	r6, r6, r7, lsl #8
 9304#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9305#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9306	lsl	r7, r10, #24
 9307	lsr	r7, r7, #24
 9308#else
 9309	uxtb	r7, r10
 9310#endif
 9311#else
 9312	ubfx	r7, r10, #0, #8
 9313#endif
 9314	eor	r6, r6, lr, lsl #16
 9315#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9316#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9317	lsl	lr, r9, #16
 9318	lsr	lr, lr, #24
 9319#else
 9320	uxtb	lr, r9, ror #8
 9321#endif
 9322#else
 9323	ubfx	lr, r9, #8, #8
 9324#endif
 9325	eor	r6, r6, r2, lsl #24
 9326#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9327#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9328	lsl	r2, r8, #8
 9329	lsr	r2, r2, #24
 9330#else
 9331	uxtb	r2, r8, ror #16
 9332#endif
 9333#else
 9334	ubfx	r2, r8, #16, #8
 9335#endif
 9336	ldrb	r11, [r0, r11, lsl #2]
 9337	ldrb	r7, [r0, r7, lsl #2]
 9338	ldrb	lr, [r0, lr, lsl #2]
 9339	ldrb	r2, [r0, r2, lsl #2]
 9340	eor	lr, lr, r11, lsl #16
 9341	ldm	r3, {r8, r9, r10, r11}
 9342	eor	r7, r7, lr, lsl #8
 9343	eor	r7, r7, r2, lsl #16
 9344	#   XOR in Key Schedule
 9345	eor	r4, r4, r8
 9346	eor	r5, r5, r9
 9347	eor	r6, r6, r10
 9348	eor	r7, r7, r11
 9349	pop	{pc}
 9350	.size	AES_encrypt_block,.-AES_encrypt_block
 9351#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
 9352#if defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \
 9353    defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
 9354    defined(HAVE_AES_ECB)
 9355#ifndef __APPLE__
 9356	.text
 9357	.type	L_AES_ARM32_te_ecb, %object
 9358	.size	L_AES_ARM32_te_ecb, 12
 9359#else
 9360	.section	__DATA,__data
 9361#endif /* __APPLE__ */
 9362	# 8-byte aligned, 64-bit aligned
 9363#ifndef __APPLE__
 9364	.align	3
 9365#else
 9366	.p2align	3
 9367#endif /* __APPLE__ */
 9368L_AES_ARM32_te_ecb:
 9369	.long	L_AES_ARM32_te_data
 9370	.text
 9371	.align	4
 9372	.globl	AES_ECB_encrypt
 9373	.type	AES_ECB_encrypt, %function
 9374AES_ECB_encrypt:
 9375	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
 9376	mov	lr, r0
 9377	adr	r0, L_AES_ARM32_te_ecb
 9378	ldr	r0, [r0]
 9379	ldr	r12, [sp, #36]
 9380	push	{r3}
 9381	cmp	r12, #10
 9382	beq	L_AES_ECB_encrypt_start_block_128
 9383	cmp	r12, #12
 9384	beq	L_AES_ECB_encrypt_start_block_192
 9385L_AES_ECB_encrypt_loop_block_256:
 9386	ldr	r4, [lr]
 9387	ldr	r5, [lr, #4]
 9388	ldr	r6, [lr, #8]
 9389	ldr	r7, [lr, #12]
 9390#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9391	eor	r8, r4, r4, ror #16
 9392	eor	r9, r5, r5, ror #16
 9393	eor	r10, r6, r6, ror #16
 9394	eor	r11, r7, r7, ror #16
 9395	bic	r8, r8, #0xff0000
 9396	bic	r9, r9, #0xff0000
 9397	bic	r10, r10, #0xff0000
 9398	bic	r11, r11, #0xff0000
 9399	ror	r4, r4, #8
 9400	ror	r5, r5, #8
 9401	ror	r6, r6, #8
 9402	ror	r7, r7, #8
 9403	eor	r4, r4, r8, lsr #8
 9404	eor	r5, r5, r9, lsr #8
 9405	eor	r6, r6, r10, lsr #8
 9406	eor	r7, r7, r11, lsr #8
 9407#else
 9408	rev	r4, r4
 9409	rev	r5, r5
 9410	rev	r6, r6
 9411	rev	r7, r7
 9412#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
 9413	push	{r1, r2, lr}
 9414	ldm	r3!, {r8, r9, r10, r11}
 9415	# Round: 0 - XOR in key schedule
 9416	eor	r4, r4, r8
 9417	eor	r5, r5, r9
 9418	eor	r6, r6, r10
 9419	eor	r7, r7, r11
 9420	mov	r1, #6
 9421#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
 9422	bl	AES_encrypt_block
 9423#else
 9424L_AES_ECB_encrypt_block_nr_256:
 9425#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9426#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9427	lsl	r8, r5, #8
 9428	lsr	r8, r8, #24
 9429#else
 9430	uxtb	r8, r5, ror #16
 9431#endif
 9432#else
 9433	ubfx	r8, r5, #16, #8
 9434#endif
 9435	lsr	r11, r4, #24
 9436#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9437#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9438	lsl	lr, r6, #16
 9439	lsr	lr, lr, #24
 9440#else
 9441	uxtb	lr, r6, ror #8
 9442#endif
 9443#else
 9444	ubfx	lr, r6, #8, #8
 9445#endif
 9446#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9447#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9448	lsl	r2, r7, #24
 9449	lsr	r2, r2, #24
 9450#else
 9451	uxtb	r2, r7
 9452#endif
 9453#else
 9454	ubfx	r2, r7, #0, #8
 9455#endif
 9456	ldr	r8, [r0, r8, lsl #2]
 9457	ldr	r11, [r0, r11, lsl #2]
 9458	ldr	lr, [r0, lr, lsl #2]
 9459	ldr	r2, [r0, r2, lsl #2]
 9460#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9461#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9462	lsl	r9, r6, #8
 9463	lsr	r9, r9, #24
 9464#else
 9465	uxtb	r9, r6, ror #16
 9466#endif
 9467#else
 9468	ubfx	r9, r6, #16, #8
 9469#endif
 9470	eor	r8, r8, r11, ror #24
 9471	lsr	r11, r5, #24
 9472	eor	r8, r8, lr, ror #8
 9473#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9474#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9475	lsl	lr, r7, #16
 9476	lsr	lr, lr, #24
 9477#else
 9478	uxtb	lr, r7, ror #8
 9479#endif
 9480#else
 9481	ubfx	lr, r7, #8, #8
 9482#endif
 9483	eor	r8, r8, r2, ror #16
 9484#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9485#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9486	lsl	r2, r4, #24
 9487	lsr	r2, r2, #24
 9488#else
 9489	uxtb	r2, r4
 9490#endif
 9491#else
 9492	ubfx	r2, r4, #0, #8
 9493#endif
 9494	ldr	r9, [r0, r9, lsl #2]
 9495	ldr	r11, [r0, r11, lsl #2]
 9496	ldr	lr, [r0, lr, lsl #2]
 9497	ldr	r2, [r0, r2, lsl #2]
 9498#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9499#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9500	lsl	r10, r7, #8
 9501	lsr	r10, r10, #24
 9502#else
 9503	uxtb	r10, r7, ror #16
 9504#endif
 9505#else
 9506	ubfx	r10, r7, #16, #8
 9507#endif
 9508	eor	r9, r9, r11, ror #24
 9509	lsr	r11, r6, #24
 9510	eor	r9, r9, lr, ror #8
 9511#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9512#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9513	lsl	lr, r4, #16
 9514	lsr	lr, lr, #24
 9515#else
 9516	uxtb	lr, r4, ror #8
 9517#endif
 9518#else
 9519	ubfx	lr, r4, #8, #8
 9520#endif
 9521	eor	r9, r9, r2, ror #16
 9522#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9523#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9524	lsl	r2, r5, #24
 9525	lsr	r2, r2, #24
 9526#else
 9527	uxtb	r2, r5
 9528#endif
 9529#else
 9530	ubfx	r2, r5, #0, #8
 9531#endif
 9532	ldr	r10, [r0, r10, lsl #2]
 9533	ldr	r11, [r0, r11, lsl #2]
 9534	ldr	lr, [r0, lr, lsl #2]
 9535	ldr	r2, [r0, r2, lsl #2]
 9536#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9537#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9538	lsl	r6, r6, #24
 9539	lsr	r6, r6, #24
 9540#else
 9541	uxtb	r6, r6
 9542#endif
 9543#else
 9544	ubfx	r6, r6, #0, #8
 9545#endif
 9546	eor	r10, r10, r11, ror #24
 9547#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9548#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9549	lsl	r11, r4, #8
 9550	lsr	r11, r11, #24
 9551#else
 9552	uxtb	r11, r4, ror #16
 9553#endif
 9554#else
 9555	ubfx	r11, r4, #16, #8
 9556#endif
 9557	eor	r10, r10, lr, ror #8
 9558	lsr	lr, r7, #24
 9559	eor	r10, r10, r2, ror #16
 9560#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9561#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9562	lsl	r2, r5, #16
 9563	lsr	r2, r2, #24
 9564#else
 9565	uxtb	r2, r5, ror #8
 9566#endif
 9567#else
 9568	ubfx	r2, r5, #8, #8
 9569#endif
 9570	ldr	r6, [r0, r6, lsl #2]
 9571	ldr	lr, [r0, lr, lsl #2]
 9572	ldr	r11, [r0, r11, lsl #2]
 9573	ldr	r2, [r0, r2, lsl #2]
 9574	eor	lr, lr, r6, ror #24
 9575	ldm	r3!, {r4, r5, r6, r7}
 9576	eor	r11, r11, lr, ror #24
 9577	eor	r11, r11, r2, ror #8
 9578	#   XOR in Key Schedule
 9579	eor	r8, r8, r4
 9580	eor	r9, r9, r5
 9581	eor	r10, r10, r6
 9582	eor	r11, r11, r7
 9583#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9584#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9585	lsl	r4, r9, #8
 9586	lsr	r4, r4, #24
 9587#else
 9588	uxtb	r4, r9, ror #16
 9589#endif
 9590#else
 9591	ubfx	r4, r9, #16, #8
 9592#endif
 9593	lsr	r7, r8, #24
 9594#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9595#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9596	lsl	lr, r10, #16
 9597	lsr	lr, lr, #24
 9598#else
 9599	uxtb	lr, r10, ror #8
 9600#endif
 9601#else
 9602	ubfx	lr, r10, #8, #8
 9603#endif
 9604#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9605#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9606	lsl	r2, r11, #24
 9607	lsr	r2, r2, #24
 9608#else
 9609	uxtb	r2, r11
 9610#endif
 9611#else
 9612	ubfx	r2, r11, #0, #8
 9613#endif
 9614	ldr	r4, [r0, r4, lsl #2]
 9615	ldr	r7, [r0, r7, lsl #2]
 9616	ldr	lr, [r0, lr, lsl #2]
 9617	ldr	r2, [r0, r2, lsl #2]
 9618#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9619#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9620	lsl	r5, r10, #8
 9621	lsr	r5, r5, #24
 9622#else
 9623	uxtb	r5, r10, ror #16
 9624#endif
 9625#else
 9626	ubfx	r5, r10, #16, #8
 9627#endif
 9628	eor	r4, r4, r7, ror #24
 9629	lsr	r7, r9, #24
 9630	eor	r4, r4, lr, ror #8
 9631#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9632#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9633	lsl	lr, r11, #16
 9634	lsr	lr, lr, #24
 9635#else
 9636	uxtb	lr, r11, ror #8
 9637#endif
 9638#else
 9639	ubfx	lr, r11, #8, #8
 9640#endif
 9641	eor	r4, r4, r2, ror #16
 9642#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9643#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9644	lsl	r2, r8, #24
 9645	lsr	r2, r2, #24
 9646#else
 9647	uxtb	r2, r8
 9648#endif
 9649#else
 9650	ubfx	r2, r8, #0, #8
 9651#endif
 9652	ldr	r5, [r0, r5, lsl #2]
 9653	ldr	r7, [r0, r7, lsl #2]
 9654	ldr	lr, [r0, lr, lsl #2]
 9655	ldr	r2, [r0, r2, lsl #2]
 9656#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9657#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9658	lsl	r6, r11, #8
 9659	lsr	r6, r6, #24
 9660#else
 9661	uxtb	r6, r11, ror #16
 9662#endif
 9663#else
 9664	ubfx	r6, r11, #16, #8
 9665#endif
 9666	eor	r5, r5, r7, ror #24
 9667	lsr	r7, r10, #24
 9668	eor	r5, r5, lr, ror #8
 9669#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9670#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9671	lsl	lr, r8, #16
 9672	lsr	lr, lr, #24
 9673#else
 9674	uxtb	lr, r8, ror #8
 9675#endif
 9676#else
 9677	ubfx	lr, r8, #8, #8
 9678#endif
 9679	eor	r5, r5, r2, ror #16
 9680#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9681#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9682	lsl	r2, r9, #24
 9683	lsr	r2, r2, #24
 9684#else
 9685	uxtb	r2, r9
 9686#endif
 9687#else
 9688	ubfx	r2, r9, #0, #8
 9689#endif
 9690	ldr	r6, [r0, r6, lsl #2]
 9691	ldr	r7, [r0, r7, lsl #2]
 9692	ldr	lr, [r0, lr, lsl #2]
 9693	ldr	r2, [r0, r2, lsl #2]
 9694#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9695#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9696	lsl	r10, r10, #24
 9697	lsr	r10, r10, #24
 9698#else
 9699	uxtb	r10, r10
 9700#endif
 9701#else
 9702	ubfx	r10, r10, #0, #8
 9703#endif
 9704	eor	r6, r6, r7, ror #24
 9705#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9706#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9707	lsl	r7, r8, #8
 9708	lsr	r7, r7, #24
 9709#else
 9710	uxtb	r7, r8, ror #16
 9711#endif
 9712#else
 9713	ubfx	r7, r8, #16, #8
 9714#endif
 9715	eor	r6, r6, lr, ror #8
 9716	lsr	lr, r11, #24
 9717	eor	r6, r6, r2, ror #16
 9718#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9719#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9720	lsl	r2, r9, #16
 9721	lsr	r2, r2, #24
 9722#else
 9723	uxtb	r2, r9, ror #8
 9724#endif
 9725#else
 9726	ubfx	r2, r9, #8, #8
 9727#endif
 9728	ldr	r10, [r0, r10, lsl #2]
 9729	ldr	lr, [r0, lr, lsl #2]
 9730	ldr	r7, [r0, r7, lsl #2]
 9731	ldr	r2, [r0, r2, lsl #2]
 9732	eor	lr, lr, r10, ror #24
 9733	ldm	r3!, {r8, r9, r10, r11}
 9734	eor	r7, r7, lr, ror #24
 9735	eor	r7, r7, r2, ror #8
 9736	#   XOR in Key Schedule
 9737	eor	r4, r4, r8
 9738	eor	r5, r5, r9
 9739	eor	r6, r6, r10
 9740	eor	r7, r7, r11
 9741	subs	r1, r1, #1
 9742	bne	L_AES_ECB_encrypt_block_nr_256
 9743#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9744#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9745	lsl	r8, r5, #8
 9746	lsr	r8, r8, #24
 9747#else
 9748	uxtb	r8, r5, ror #16
 9749#endif
 9750#else
 9751	ubfx	r8, r5, #16, #8
 9752#endif
 9753	lsr	r11, r4, #24
 9754#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9755#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9756	lsl	lr, r6, #16
 9757	lsr	lr, lr, #24
 9758#else
 9759	uxtb	lr, r6, ror #8
 9760#endif
 9761#else
 9762	ubfx	lr, r6, #8, #8
 9763#endif
 9764#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9765#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9766	lsl	r2, r7, #24
 9767	lsr	r2, r2, #24
 9768#else
 9769	uxtb	r2, r7
 9770#endif
 9771#else
 9772	ubfx	r2, r7, #0, #8
 9773#endif
 9774	ldr	r8, [r0, r8, lsl #2]
 9775	ldr	r11, [r0, r11, lsl #2]
 9776	ldr	lr, [r0, lr, lsl #2]
 9777	ldr	r2, [r0, r2, lsl #2]
 9778#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9779#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9780	lsl	r9, r6, #8
 9781	lsr	r9, r9, #24
 9782#else
 9783	uxtb	r9, r6, ror #16
 9784#endif
 9785#else
 9786	ubfx	r9, r6, #16, #8
 9787#endif
 9788	eor	r8, r8, r11, ror #24
 9789	lsr	r11, r5, #24
 9790	eor	r8, r8, lr, ror #8
 9791#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9792#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9793	lsl	lr, r7, #16
 9794	lsr	lr, lr, #24
 9795#else
 9796	uxtb	lr, r7, ror #8
 9797#endif
 9798#else
 9799	ubfx	lr, r7, #8, #8
 9800#endif
 9801	eor	r8, r8, r2, ror #16
 9802#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9803#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9804	lsl	r2, r4, #24
 9805	lsr	r2, r2, #24
 9806#else
 9807	uxtb	r2, r4
 9808#endif
 9809#else
 9810	ubfx	r2, r4, #0, #8
 9811#endif
 9812	ldr	r9, [r0, r9, lsl #2]
 9813	ldr	r11, [r0, r11, lsl #2]
 9814	ldr	lr, [r0, lr, lsl #2]
 9815	ldr	r2, [r0, r2, lsl #2]
 9816#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9817#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9818	lsl	r10, r7, #8
 9819	lsr	r10, r10, #24
 9820#else
 9821	uxtb	r10, r7, ror #16
 9822#endif
 9823#else
 9824	ubfx	r10, r7, #16, #8
 9825#endif
 9826	eor	r9, r9, r11, ror #24
 9827	lsr	r11, r6, #24
 9828	eor	r9, r9, lr, ror #8
 9829#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9830#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9831	lsl	lr, r4, #16
 9832	lsr	lr, lr, #24
 9833#else
 9834	uxtb	lr, r4, ror #8
 9835#endif
 9836#else
 9837	ubfx	lr, r4, #8, #8
 9838#endif
 9839	eor	r9, r9, r2, ror #16
 9840#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9841#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9842	lsl	r2, r5, #24
 9843	lsr	r2, r2, #24
 9844#else
 9845	uxtb	r2, r5
 9846#endif
 9847#else
 9848	ubfx	r2, r5, #0, #8
 9849#endif
 9850	ldr	r10, [r0, r10, lsl #2]
 9851	ldr	r11, [r0, r11, lsl #2]
 9852	ldr	lr, [r0, lr, lsl #2]
 9853	ldr	r2, [r0, r2, lsl #2]
 9854#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9855#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9856	lsl	r6, r6, #24
 9857	lsr	r6, r6, #24
 9858#else
 9859	uxtb	r6, r6
 9860#endif
 9861#else
 9862	ubfx	r6, r6, #0, #8
 9863#endif
 9864	eor	r10, r10, r11, ror #24
 9865#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9866#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9867	lsl	r11, r4, #8
 9868	lsr	r11, r11, #24
 9869#else
 9870	uxtb	r11, r4, ror #16
 9871#endif
 9872#else
 9873	ubfx	r11, r4, #16, #8
 9874#endif
 9875	eor	r10, r10, lr, ror #8
 9876	lsr	lr, r7, #24
 9877	eor	r10, r10, r2, ror #16
 9878#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9879#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9880	lsl	r2, r5, #16
 9881	lsr	r2, r2, #24
 9882#else
 9883	uxtb	r2, r5, ror #8
 9884#endif
 9885#else
 9886	ubfx	r2, r5, #8, #8
 9887#endif
 9888	ldr	r6, [r0, r6, lsl #2]
 9889	ldr	lr, [r0, lr, lsl #2]
 9890	ldr	r11, [r0, r11, lsl #2]
 9891	ldr	r2, [r0, r2, lsl #2]
 9892	eor	lr, lr, r6, ror #24
 9893	ldm	r3!, {r4, r5, r6, r7}
 9894	eor	r11, r11, lr, ror #24
 9895	eor	r11, r11, r2, ror #8
 9896	#   XOR in Key Schedule
 9897	eor	r8, r8, r4
 9898	eor	r9, r9, r5
 9899	eor	r10, r10, r6
 9900	eor	r11, r11, r7
 9901#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9902#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9903	lsl	r4, r11, #24
 9904	lsr	r4, r4, #24
 9905#else
 9906	uxtb	r4, r11
 9907#endif
 9908#else
 9909	ubfx	r4, r11, #0, #8
 9910#endif
 9911#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9912#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9913	lsl	r7, r10, #16
 9914	lsr	r7, r7, #24
 9915#else
 9916	uxtb	r7, r10, ror #8
 9917#endif
 9918#else
 9919	ubfx	r7, r10, #8, #8
 9920#endif
 9921#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9922#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9923	lsl	lr, r9, #8
 9924	lsr	lr, lr, #24
 9925#else
 9926	uxtb	lr, r9, ror #16
 9927#endif
 9928#else
 9929	ubfx	lr, r9, #16, #8
 9930#endif
 9931	lsr	r2, r8, #24
 9932	ldrb	r4, [r0, r4, lsl #2]
 9933	ldrb	r7, [r0, r7, lsl #2]
 9934	ldrb	lr, [r0, lr, lsl #2]
 9935	ldrb	r2, [r0, r2, lsl #2]
 9936#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9937#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9938	lsl	r5, r8, #24
 9939	lsr	r5, r5, #24
 9940#else
 9941	uxtb	r5, r8
 9942#endif
 9943#else
 9944	ubfx	r5, r8, #0, #8
 9945#endif
 9946	eor	r4, r4, r7, lsl #8
 9947#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9948#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9949	lsl	r7, r11, #16
 9950	lsr	r7, r7, #24
 9951#else
 9952	uxtb	r7, r11, ror #8
 9953#endif
 9954#else
 9955	ubfx	r7, r11, #8, #8
 9956#endif
 9957	eor	r4, r4, lr, lsl #16
 9958#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9959#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9960	lsl	lr, r10, #8
 9961	lsr	lr, lr, #24
 9962#else
 9963	uxtb	lr, r10, ror #16
 9964#endif
 9965#else
 9966	ubfx	lr, r10, #16, #8
 9967#endif
 9968	eor	r4, r4, r2, lsl #24
 9969	lsr	r2, r9, #24
 9970	ldrb	r5, [r0, r5, lsl #2]
 9971	ldrb	r7, [r0, r7, lsl #2]
 9972	ldrb	lr, [r0, lr, lsl #2]
 9973	ldrb	r2, [r0, r2, lsl #2]
 9974#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9975#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9976	lsl	r6, r9, #24
 9977	lsr	r6, r6, #24
 9978#else
 9979	uxtb	r6, r9
 9980#endif
 9981#else
 9982	ubfx	r6, r9, #0, #8
 9983#endif
 9984	eor	r5, r5, r7, lsl #8
 9985#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9986#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9987	lsl	r7, r8, #16
 9988	lsr	r7, r7, #24
 9989#else
 9990	uxtb	r7, r8, ror #8
 9991#endif
 9992#else
 9993	ubfx	r7, r8, #8, #8
 9994#endif
 9995	eor	r5, r5, lr, lsl #16
 9996#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 9997#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 9998	lsl	lr, r11, #8
 9999	lsr	lr, lr, #24
10000#else
10001	uxtb	lr, r11, ror #16
10002#endif
10003#else
10004	ubfx	lr, r11, #16, #8
10005#endif
10006	eor	r5, r5, r2, lsl #24
10007	lsr	r2, r10, #24
10008	ldrb	r6, [r0, r6, lsl #2]
10009	ldrb	r7, [r0, r7, lsl #2]
10010	ldrb	lr, [r0, lr, lsl #2]
10011	ldrb	r2, [r0, r2, lsl #2]
10012	lsr	r11, r11, #24
10013	eor	r6, r6, r7, lsl #8
10014#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10015#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10016	lsl	r7, r10, #24
10017	lsr	r7, r7, #24
10018#else
10019	uxtb	r7, r10
10020#endif
10021#else
10022	ubfx	r7, r10, #0, #8
10023#endif
10024	eor	r6, r6, lr, lsl #16
10025#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10026#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10027	lsl	lr, r9, #16
10028	lsr	lr, lr, #24
10029#else
10030	uxtb	lr, r9, ror #8
10031#endif
10032#else
10033	ubfx	lr, r9, #8, #8
10034#endif
10035	eor	r6, r6, r2, lsl #24
10036#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10037#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10038	lsl	r2, r8, #8
10039	lsr	r2, r2, #24
10040#else
10041	uxtb	r2, r8, ror #16
10042#endif
10043#else
10044	ubfx	r2, r8, #16, #8
10045#endif
10046	ldrb	r11, [r0, r11, lsl #2]
10047	ldrb	r7, [r0, r7, lsl #2]
10048	ldrb	lr, [r0, lr, lsl #2]
10049	ldrb	r2, [r0, r2, lsl #2]
10050	eor	lr, lr, r11, lsl #16
10051	ldm	r3, {r8, r9, r10, r11}
10052	eor	r7, r7, lr, lsl #8
10053	eor	r7, r7, r2, lsl #16
10054	#   XOR in Key Schedule
10055	eor	r4, r4, r8
10056	eor	r5, r5, r9
10057	eor	r6, r6, r10
10058	eor	r7, r7, r11
10059#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
10060	pop	{r1, r2, lr}
10061	ldr	r3, [sp]
10062#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10063	eor	r8, r4, r4, ror #16
10064	eor	r9, r5, r5, ror #16
10065	eor	r10, r6, r6, ror #16
10066	eor	r11, r7, r7, ror #16
10067	bic	r8, r8, #0xff0000
10068	bic	r9, r9, #0xff0000
10069	bic	r10, r10, #0xff0000
10070	bic	r11, r11, #0xff0000
10071	ror	r4, r4, #8
10072	ror	r5, r5, #8
10073	ror	r6, r6, #8
10074	ror	r7, r7, #8
10075	eor	r4, r4, r8, lsr #8
10076	eor	r5, r5, r9, lsr #8
10077	eor	r6, r6, r10, lsr #8
10078	eor	r7, r7, r11, lsr #8
10079#else
10080	rev	r4, r4
10081	rev	r5, r5
10082	rev	r6, r6
10083	rev	r7, r7
10084#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
10085	str	r4, [r1]
10086	str	r5, [r1, #4]
10087	str	r6, [r1, #8]
10088	str	r7, [r1, #12]
10089	subs	r2, r2, #16
10090	add	lr, lr, #16
10091	add	r1, r1, #16
10092	bne	L_AES_ECB_encrypt_loop_block_256
10093	b	L_AES_ECB_encrypt_end
10094L_AES_ECB_encrypt_start_block_192:
10095L_AES_ECB_encrypt_loop_block_192:
10096	ldr	r4, [lr]
10097	ldr	r5, [lr, #4]
10098	ldr	r6, [lr, #8]
10099	ldr	r7, [lr, #12]
10100#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10101	eor	r8, r4, r4, ror #16
10102	eor	r9, r5, r5, ror #16
10103	eor	r10, r6, r6, ror #16
10104	eor	r11, r7, r7, ror #16
10105	bic	r8, r8, #0xff0000
10106	bic	r9, r9, #0xff0000
10107	bic	r10, r10, #0xff0000
10108	bic	r11, r11, #0xff0000
10109	ror	r4, r4, #8
10110	ror	r5, r5, #8
10111	ror	r6, r6, #8
10112	ror	r7, r7, #8
10113	eor	r4, r4, r8, lsr #8
10114	eor	r5, r5, r9, lsr #8
10115	eor	r6, r6, r10, lsr #8
10116	eor	r7, r7, r11, lsr #8
10117#else
10118	rev	r4, r4
10119	rev	r5, r5
10120	rev	r6, r6
10121	rev	r7, r7
10122#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
10123	push	{r1, r2, lr}
10124	ldm	r3!, {r8, r9, r10, r11}
10125	# Round: 0 - XOR in key schedule
10126	eor	r4, r4, r8
10127	eor	r5, r5, r9
10128	eor	r6, r6, r10
10129	eor	r7, r7, r11
10130	mov	r1, #5
10131#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
10132	bl	AES_encrypt_block
10133#else
10134L_AES_ECB_encrypt_block_nr_192:
10135#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10136#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10137	lsl	r8, r5, #8
10138	lsr	r8, r8, #24
10139#else
10140	uxtb	r8, r5, ror #16
10141#endif
10142#else
10143	ubfx	r8, r5, #16, #8
10144#endif
10145	lsr	r11, r4, #24
10146#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10147#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10148	lsl	lr, r6, #16
10149	lsr	lr, lr, #24
10150#else
10151	uxtb	lr, r6, ror #8
10152#endif
10153#else
10154	ubfx	lr, r6, #8, #8
10155#endif
10156#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10157#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10158	lsl	r2, r7, #24
10159	lsr	r2, r2, #24
10160#else
10161	uxtb	r2, r7
10162#endif
10163#else
10164	ubfx	r2, r7, #0, #8
10165#endif
10166	ldr	r8, [r0, r8, lsl #2]
10167	ldr	r11, [r0, r11, lsl #2]
10168	ldr	lr, [r0, lr, lsl #2]
10169	ldr	r2, [r0, r2, lsl #2]
10170#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10171#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10172	lsl	r9, r6, #8
10173	lsr	r9, r9, #24
10174#else
10175	uxtb	r9, r6, ror #16
10176#endif
10177#else
10178	ubfx	r9, r6, #16, #8
10179#endif
10180	eor	r8, r8, r11, ror #24
10181	lsr	r11, r5, #24
10182	eor	r8, r8, lr, ror #8
10183#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10184#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10185	lsl	lr, r7, #16
10186	lsr	lr, lr, #24
10187#else
10188	uxtb	lr, r7, ror #8
10189#endif
10190#else
10191	ubfx	lr, r7, #8, #8
10192#endif
10193	eor	r8, r8, r2, ror #16
10194#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10195#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10196	lsl	r2, r4, #24
10197	lsr	r2, r2, #24
10198#else
10199	uxtb	r2, r4
10200#endif
10201#else
10202	ubfx	r2, r4, #0, #8
10203#endif
10204	ldr	r9, [r0, r9, lsl #2]
10205	ldr	r11, [r0, r11, lsl #2]
10206	ldr	lr, [r0, lr, lsl #2]
10207	ldr	r2, [r0, r2, lsl #2]
10208#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10209#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10210	lsl	r10, r7, #8
10211	lsr	r10, r10, #24
10212#else
10213	uxtb	r10, r7, ror #16
10214#endif
10215#else
10216	ubfx	r10, r7, #16, #8
10217#endif
10218	eor	r9, r9, r11, ror #24
10219	lsr	r11, r6, #24
10220	eor	r9, r9, lr, ror #8
10221#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10223	lsl	lr, r4, #16
10224	lsr	lr, lr, #24
10225#else
10226	uxtb	lr, r4, ror #8
10227#endif
10228#else
10229	ubfx	lr, r4, #8, #8
10230#endif
10231	eor	r9, r9, r2, ror #16
10232#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10233#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10234	lsl	r2, r5, #24
10235	lsr	r2, r2, #24
10236#else
10237	uxtb	r2, r5
10238#endif
10239#else
10240	ubfx	r2, r5, #0, #8
10241#endif
10242	ldr	r10, [r0, r10, lsl #2]
10243	ldr	r11, [r0, r11, lsl #2]
10244	ldr	lr, [r0, lr, lsl #2]
10245	ldr	r2, [r0, r2, lsl #2]
10246#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10247#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10248	lsl	r6, r6, #24
10249	lsr	r6, r6, #24
10250#else
10251	uxtb	r6, r6
10252#endif
10253#else
10254	ubfx	r6, r6, #0, #8
10255#endif
10256	eor	r10, r10, r11, ror #24
10257#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10258#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10259	lsl	r11, r4, #8
10260	lsr	r11, r11, #24
10261#else
10262	uxtb	r11, r4, ror #16
10263#endif
10264#else
10265	ubfx	r11, r4, #16, #8
10266#endif
10267	eor	r10, r10, lr, ror #8
10268	lsr	lr, r7, #24
10269	eor	r10, r10, r2, ror #16
10270#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10271#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10272	lsl	r2, r5, #16
10273	lsr	r2, r2, #24
10274#else
10275	uxtb	r2, r5, ror #8
10276#endif
10277#else
10278	ubfx	r2, r5, #8, #8
10279#endif
10280	ldr	r6, [r0, r6, lsl #2]
10281	ldr	lr, [r0, lr, lsl #2]
10282	ldr	r11, [r0, r11, lsl #2]
10283	ldr	r2, [r0, r2, lsl #2]
10284	eor	lr, lr, r6, ror #24
10285	ldm	r3!, {r4, r5, r6, r7}
10286	eor	r11, r11, lr, ror #24
10287	eor	r11, r11, r2, ror #8
10288	#   XOR in Key Schedule
10289	eor	r8, r8, r4
10290	eor	r9, r9, r5
10291	eor	r10, r10, r6
10292	eor	r11, r11, r7
10293#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10294#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10295	lsl	r4, r9, #8
10296	lsr	r4, r4, #24
10297#else
10298	uxtb	r4, r9, ror #16
10299#endif
10300#else
10301	ubfx	r4, r9, #16, #8
10302#endif
10303	lsr	r7, r8, #24
10304#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10305#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10306	lsl	lr, r10, #16
10307	lsr	lr, lr, #24
10308#else
10309	uxtb	lr, r10, ror #8
10310#endif
10311#else
10312	ubfx	lr, r10, #8, #8
10313#endif
10314#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10315#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10316	lsl	r2, r11, #24
10317	lsr	r2, r2, #24
10318#else
10319	uxtb	r2, r11
10320#endif
10321#else
10322	ubfx	r2, r11, #0, #8
10323#endif
10324	ldr	r4, [r0, r4, lsl #2]
10325	ldr	r7, [r0, r7, lsl #2]
10326	ldr	lr, [r0, lr, lsl #2]
10327	ldr	r2, [r0, r2, lsl #2]
10328#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10329#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10330	lsl	r5, r10, #8
10331	lsr	r5, r5, #24
10332#else
10333	uxtb	r5, r10, ror #16
10334#endif
10335#else
10336	ubfx	r5, r10, #16, #8
10337#endif
10338	eor	r4, r4, r7, ror #24
10339	lsr	r7, r9, #24
10340	eor	r4, r4, lr, ror #8
10341#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10342#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10343	lsl	lr, r11, #16
10344	lsr	lr, lr, #24
10345#else
10346	uxtb	lr, r11, ror #8
10347#endif
10348#else
10349	ubfx	lr, r11, #8, #8
10350#endif
10351	eor	r4, r4, r2, ror #16
10352#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10353#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10354	lsl	r2, r8, #24
10355	lsr	r2, r2, #24
10356#else
10357	uxtb	r2, r8
10358#endif
10359#else
10360	ubfx	r2, r8, #0, #8
10361#endif
10362	ldr	r5, [r0, r5, lsl #2]
10363	ldr	r7, [r0, r7, lsl #2]
10364	ldr	lr, [r0, lr, lsl #2]
10365	ldr	r2, [r0, r2, lsl #2]
10366#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10367#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10368	lsl	r6, r11, #8
10369	lsr	r6, r6, #24
10370#else
10371	uxtb	r6, r11, ror #16
10372#endif
10373#else
10374	ubfx	r6, r11, #16, #8
10375#endif
10376	eor	r5, r5, r7, ror #24
10377	lsr	r7, r10, #24
10378	eor	r5, r5, lr, ror #8
10379#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10380#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10381	lsl	lr, r8, #16
10382	lsr	lr, lr, #24
10383#else
10384	uxtb	lr, r8, ror #8
10385#endif
10386#else
10387	ubfx	lr, r8, #8, #8
10388#endif
10389	eor	r5, r5, r2, ror #16
10390#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10391#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10392	lsl	r2, r9, #24
10393	lsr	r2, r2, #24
10394#else
10395	uxtb	r2, r9
10396#endif
10397#else
10398	ubfx	r2, r9, #0, #8
10399#endif
10400	ldr	r6, [r0, r6, lsl #2]
10401	ldr	r7, [r0, r7, lsl #2]
10402	ldr	lr, [r0, lr, lsl #2]
10403	ldr	r2, [r0, r2, lsl #2]
10404#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10405#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10406	lsl	r10, r10, #24
10407	lsr	r10, r10, #24
10408#else
10409	uxtb	r10, r10
10410#endif
10411#else
10412	ubfx	r10, r10, #0, #8
10413#endif
10414	eor	r6, r6, r7, ror #24
10415#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10416#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10417	lsl	r7, r8, #8
10418	lsr	r7, r7, #24
10419#else
10420	uxtb	r7, r8, ror #16
10421#endif
10422#else
10423	ubfx	r7, r8, #16, #8
10424#endif
10425	eor	r6, r6, lr, ror #8
10426	lsr	lr, r11, #24
10427	eor	r6, r6, r2, ror #16
10428#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10429#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10430	lsl	r2, r9, #16
10431	lsr	r2, r2, #24
10432#else
10433	uxtb	r2, r9, ror #8
10434#endif
10435#else
10436	ubfx	r2, r9, #8, #8
10437#endif
10438	ldr	r10, [r0, r10, lsl #2]
10439	ldr	lr, [r0, lr, lsl #2]
10440	ldr	r7, [r0, r7, lsl #2]
10441	ldr	r2, [r0, r2, lsl #2]
10442	eor	lr, lr, r10, ror #24
10443	ldm	r3!, {r8, r9, r10, r11}
10444	eor	r7, r7, lr, ror #24
10445	eor	r7, r7, r2, ror #8
10446	#   XOR in Key Schedule
10447	eor	r4, r4, r8
10448	eor	r5, r5, r9
10449	eor	r6, r6, r10
10450	eor	r7, r7, r11
10451	subs	r1, r1, #1
10452	bne	L_AES_ECB_encrypt_block_nr_192
10453#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10454#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10455	lsl	r8, r5, #8
10456	lsr	r8, r8, #24
10457#else
10458	uxtb	r8, r5, ror #16
10459#endif
10460#else
10461	ubfx	r8, r5, #16, #8
10462#endif
10463	lsr	r11, r4, #24
10464#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10465#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10466	lsl	lr, r6, #16
10467	lsr	lr, lr, #24
10468#else
10469	uxtb	lr, r6, ror #8
10470#endif
10471#else
10472	ubfx	lr, r6, #8, #8
10473#endif
10474#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10475#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10476	lsl	r2, r7, #24
10477	lsr	r2, r2, #24
10478#else
10479	uxtb	r2, r7
10480#endif
10481#else
10482	ubfx	r2, r7, #0, #8
10483#endif
10484	ldr	r8, [r0, r8, lsl #2]
10485	ldr	r11, [r0, r11, lsl #2]
10486	ldr	lr, [r0, lr, lsl #2]
10487	ldr	r2, [r0, r2, lsl #2]
10488#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10489#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10490	lsl	r9, r6, #8
10491	lsr	r9, r9, #24
10492#else
10493	uxtb	r9, r6, ror #16
10494#endif
10495#else
10496	ubfx	r9, r6, #16, #8
10497#endif
10498	eor	r8, r8, r11, ror #24
10499	lsr	r11, r5, #24
10500	eor	r8, r8, lr, ror #8
10501#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10502#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10503	lsl	lr, r7, #16
10504	lsr	lr, lr, #24
10505#else
10506	uxtb	lr, r7, ror #8
10507#endif
10508#else
10509	ubfx	lr, r7, #8, #8
10510#endif
10511	eor	r8, r8, r2, ror #16
10512#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10513#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10514	lsl	r2, r4, #24
10515	lsr	r2, r2, #24
10516#else
10517	uxtb	r2, r4
10518#endif
10519#else
10520	ubfx	r2, r4, #0, #8
10521#endif
10522	ldr	r9, [r0, r9, lsl #2]
10523	ldr	r11, [r0, r11, lsl #2]
10524	ldr	lr, [r0, lr, lsl #2]
10525	ldr	r2, [r0, r2, lsl #2]
10526#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10527#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10528	lsl	r10, r7, #8
10529	lsr	r10, r10, #24
10530#else
10531	uxtb	r10, r7, ror #16
10532#endif
10533#else
10534	ubfx	r10, r7, #16, #8
10535#endif
10536	eor	r9, r9, r11, ror #24
10537	lsr	r11, r6, #24
10538	eor	r9, r9, lr, ror #8
10539#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10540#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10541	lsl	lr, r4, #16
10542	lsr	lr, lr, #24
10543#else
10544	uxtb	lr, r4, ror #8
10545#endif
10546#else
10547	ubfx	lr, r4, #8, #8
10548#endif
10549	eor	r9, r9, r2, ror #16
10550#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10551#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10552	lsl	r2, r5, #24
10553	lsr	r2, r2, #24
10554#else
10555	uxtb	r2, r5
10556#endif
10557#else
10558	ubfx	r2, r5, #0, #8
10559#endif
10560	ldr	r10, [r0, r10, lsl #2]
10561	ldr	r11, [r0, r11, lsl #2]
10562	ldr	lr, [r0, lr, lsl #2]
10563	ldr	r2, [r0, r2, lsl #2]
10564#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10565#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10566	lsl	r6, r6, #24
10567	lsr	r6, r6, #24
10568#else
10569	uxtb	r6, r6
10570#endif
10571#else
10572	ubfx	r6, r6, #0, #8
10573#endif
10574	eor	r10, r10, r11, ror #24
10575#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10576#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10577	lsl	r11, r4, #8
10578	lsr	r11, r11, #24
10579#else
10580	uxtb	r11, r4, ror #16
10581#endif
10582#else
10583	ubfx	r11, r4, #16, #8
10584#endif
10585	eor	r10, r10, lr, ror #8
10586	lsr	lr, r7, #24
10587	eor	r10, r10, r2, ror #16
10588#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10589#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10590	lsl	r2, r5, #16
10591	lsr	r2, r2, #24
10592#else
10593	uxtb	r2, r5, ror #8
10594#endif
10595#else
10596	ubfx	r2, r5, #8, #8
10597#endif
10598	ldr	r6, [r0, r6, lsl #2]
10599	ldr	lr, [r0, lr, lsl #2]
10600	ldr	r11, [r0, r11, lsl #2]
10601	ldr	r2, [r0, r2, lsl #2]
10602	eor	lr, lr, r6, ror #24
10603	ldm	r3!, {r4, r5, r6, r7}
10604	eor	r11, r11, lr, ror #24
10605	eor	r11, r11, r2, ror #8
10606	#   XOR in Key Schedule
10607	eor	r8, r8, r4
10608	eor	r9, r9, r5
10609	eor	r10, r10, r6
10610	eor	r11, r11, r7
10611#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10612#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10613	lsl	r4, r11, #24
10614	lsr	r4, r4, #24
10615#else
10616	uxtb	r4, r11
10617#endif
10618#else
10619	ubfx	r4, r11, #0, #8
10620#endif
10621#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10622#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10623	lsl	r7, r10, #16
10624	lsr	r7, r7, #24
10625#else
10626	uxtb	r7, r10, ror #8
10627#endif
10628#else
10629	ubfx	r7, r10, #8, #8
10630#endif
10631#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10632#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10633	lsl	lr, r9, #8
10634	lsr	lr, lr, #24
10635#else
10636	uxtb	lr, r9, ror #16
10637#endif
10638#else
10639	ubfx	lr, r9, #16, #8
10640#endif
10641	lsr	r2, r8, #24
10642	ldrb	r4, [r0, r4, lsl #2]
10643	ldrb	r7, [r0, r7, lsl #2]
10644	ldrb	lr, [r0, lr, lsl #2]
10645	ldrb	r2, [r0, r2, lsl #2]
10646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10647#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10648	lsl	r5, r8, #24
10649	lsr	r5, r5, #24
10650#else
10651	uxtb	r5, r8
10652#endif
10653#else
10654	ubfx	r5, r8, #0, #8
10655#endif
10656	eor	r4, r4, r7, lsl #8
10657#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10658#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10659	lsl	r7, r11, #16
10660	lsr	r7, r7, #24
10661#else
10662	uxtb	r7, r11, ror #8
10663#endif
10664#else
10665	ubfx	r7, r11, #8, #8
10666#endif
10667	eor	r4, r4, lr, lsl #16
10668#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10669#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10670	lsl	lr, r10, #8
10671	lsr	lr, lr, #24
10672#else
10673	uxtb	lr, r10, ror #16
10674#endif
10675#else
10676	ubfx	lr, r10, #16, #8
10677#endif
10678	eor	r4, r4, r2, lsl #24
10679	lsr	r2, r9, #24
10680	ldrb	r5, [r0, r5, lsl #2]
10681	ldrb	r7, [r0, r7, lsl #2]
10682	ldrb	lr, [r0, lr, lsl #2]
10683	ldrb	r2, [r0, r2, lsl #2]
10684#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10685#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10686	lsl	r6, r9, #24
10687	lsr	r6, r6, #24
10688#else
10689	uxtb	r6, r9
10690#endif
10691#else
10692	ubfx	r6, r9, #0, #8
10693#endif
10694	eor	r5, r5, r7, lsl #8
10695#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10696#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10697	lsl	r7, r8, #16
10698	lsr	r7, r7, #24
10699#else
10700	uxtb	r7, r8, ror #8
10701#endif
10702#else
10703	ubfx	r7, r8, #8, #8
10704#endif
10705	eor	r5, r5, lr, lsl #16
10706#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10707#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10708	lsl	lr, r11, #8
10709	lsr	lr, lr, #24
10710#else
10711	uxtb	lr, r11, ror #16
10712#endif
10713#else
10714	ubfx	lr, r11, #16, #8
10715#endif
10716	eor	r5, r5, r2, lsl #24
10717	lsr	r2, r10, #24
10718	ldrb	r6, [r0, r6, lsl #2]
10719	ldrb	r7, [r0, r7, lsl #2]
10720	ldrb	lr, [r0, lr, lsl #2]
10721	ldrb	r2, [r0, r2, lsl #2]
10722	lsr	r11, r11, #24
10723	eor	r6, r6, r7, lsl #8
10724#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10725#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10726	lsl	r7, r10, #24
10727	lsr	r7, r7, #24
10728#else
10729	uxtb	r7, r10
10730#endif
10731#else
10732	ubfx	r7, r10, #0, #8
10733#endif
10734	eor	r6, r6, lr, lsl #16
10735#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10736#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10737	lsl	lr, r9, #16
10738	lsr	lr, lr, #24
10739#else
10740	uxtb	lr, r9, ror #8
10741#endif
10742#else
10743	ubfx	lr, r9, #8, #8
10744#endif
10745	eor	r6, r6, r2, lsl #24
10746#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10747#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10748	lsl	r2, r8, #8
10749	lsr	r2, r2, #24
10750#else
10751	uxtb	r2, r8, ror #16
10752#endif
10753#else
10754	ubfx	r2, r8, #16, #8
10755#endif
10756	ldrb	r11, [r0, r11, lsl #2]
10757	ldrb	r7, [r0, r7, lsl #2]
10758	ldrb	lr, [r0, lr, lsl #2]
10759	ldrb	r2, [r0, r2, lsl #2]
10760	eor	lr, lr, r11, lsl #16
10761	ldm	r3, {r8, r9, r10, r11}
10762	eor	r7, r7, lr, lsl #8
10763	eor	r7, r7, r2, lsl #16
10764	#   XOR in Key Schedule
10765	eor	r4, r4, r8
10766	eor	r5, r5, r9
10767	eor	r6, r6, r10
10768	eor	r7, r7, r11
10769#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
10770	pop	{r1, r2, lr}
10771	ldr	r3, [sp]
10772#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10773	eor	r8, r4, r4, ror #16
10774	eor	r9, r5, r5, ror #16
10775	eor	r10, r6, r6, ror #16
10776	eor	r11, r7, r7, ror #16
10777	bic	r8, r8, #0xff0000
10778	bic	r9, r9, #0xff0000
10779	bic	r10, r10, #0xff0000
10780	bic	r11, r11, #0xff0000
10781	ror	r4, r4, #8
10782	ror	r5, r5, #8
10783	ror	r6, r6, #8
10784	ror	r7, r7, #8
10785	eor	r4, r4, r8, lsr #8
10786	eor	r5, r5, r9, lsr #8
10787	eor	r6, r6, r10, lsr #8
10788	eor	r7, r7, r11, lsr #8
10789#else
10790	rev	r4, r4
10791	rev	r5, r5
10792	rev	r6, r6
10793	rev	r7, r7
10794#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
10795	str	r4, [r1]
10796	str	r5, [r1, #4]
10797	str	r6, [r1, #8]
10798	str	r7, [r1, #12]
10799	subs	r2, r2, #16
10800	add	lr, lr, #16
10801	add	r1, r1, #16
10802	bne	L_AES_ECB_encrypt_loop_block_192
10803	b	L_AES_ECB_encrypt_end
10804L_AES_ECB_encrypt_start_block_128:
10805L_AES_ECB_encrypt_loop_block_128:
10806	ldr	r4, [lr]
10807	ldr	r5, [lr, #4]
10808	ldr	r6, [lr, #8]
10809	ldr	r7, [lr, #12]
10810#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10811	eor	r8, r4, r4, ror #16
10812	eor	r9, r5, r5, ror #16
10813	eor	r10, r6, r6, ror #16
10814	eor	r11, r7, r7, ror #16
10815	bic	r8, r8, #0xff0000
10816	bic	r9, r9, #0xff0000
10817	bic	r10, r10, #0xff0000
10818	bic	r11, r11, #0xff0000
10819	ror	r4, r4, #8
10820	ror	r5, r5, #8
10821	ror	r6, r6, #8
10822	ror	r7, r7, #8
10823	eor	r4, r4, r8, lsr #8
10824	eor	r5, r5, r9, lsr #8
10825	eor	r6, r6, r10, lsr #8
10826	eor	r7, r7, r11, lsr #8
10827#else
10828	rev	r4, r4
10829	rev	r5, r5
10830	rev	r6, r6
10831	rev	r7, r7
10832#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
10833	push	{r1, r2, lr}
10834	ldm	r3!, {r8, r9, r10, r11}
10835	# Round: 0 - XOR in key schedule
10836	eor	r4, r4, r8
10837	eor	r5, r5, r9
10838	eor	r6, r6, r10
10839	eor	r7, r7, r11
10840	mov	r1, #4
10841#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
10842	bl	AES_encrypt_block
10843#else
10844L_AES_ECB_encrypt_block_nr_128:
10845#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10846#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10847	lsl	r8, r5, #8
10848	lsr	r8, r8, #24
10849#else
10850	uxtb	r8, r5, ror #16
10851#endif
10852#else
10853	ubfx	r8, r5, #16, #8
10854#endif
10855	lsr	r11, r4, #24
10856#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10857#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10858	lsl	lr, r6, #16
10859	lsr	lr, lr, #24
10860#else
10861	uxtb	lr, r6, ror #8
10862#endif
10863#else
10864	ubfx	lr, r6, #8, #8
10865#endif
10866#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10867#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10868	lsl	r2, r7, #24
10869	lsr	r2, r2, #24
10870#else
10871	uxtb	r2, r7
10872#endif
10873#else
10874	ubfx	r2, r7, #0, #8
10875#endif
10876	ldr	r8, [r0, r8, lsl #2]
10877	ldr	r11, [r0, r11, lsl #2]
10878	ldr	lr, [r0, lr, lsl #2]
10879	ldr	r2, [r0, r2, lsl #2]
10880#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10881#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10882	lsl	r9, r6, #8
10883	lsr	r9, r9, #24
10884#else
10885	uxtb	r9, r6, ror #16
10886#endif
10887#else
10888	ubfx	r9, r6, #16, #8
10889#endif
10890	eor	r8, r8, r11, ror #24
10891	lsr	r11, r5, #24
10892	eor	r8, r8, lr, ror #8
10893#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10894#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10895	lsl	lr, r7, #16
10896	lsr	lr, lr, #24
10897#else
10898	uxtb	lr, r7, ror #8
10899#endif
10900#else
10901	ubfx	lr, r7, #8, #8
10902#endif
10903	eor	r8, r8, r2, ror #16
10904#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10906	lsl	r2, r4, #24
10907	lsr	r2, r2, #24
10908#else
10909	uxtb	r2, r4
10910#endif
10911#else
10912	ubfx	r2, r4, #0, #8
10913#endif
10914	ldr	r9, [r0, r9, lsl #2]
10915	ldr	r11, [r0, r11, lsl #2]
10916	ldr	lr, [r0, lr, lsl #2]
10917	ldr	r2, [r0, r2, lsl #2]
10918#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10919#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10920	lsl	r10, r7, #8
10921	lsr	r10, r10, #24
10922#else
10923	uxtb	r10, r7, ror #16
10924#endif
10925#else
10926	ubfx	r10, r7, #16, #8
10927#endif
10928	eor	r9, r9, r11, ror #24
10929	lsr	r11, r6, #24
10930	eor	r9, r9, lr, ror #8
10931#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10932#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10933	lsl	lr, r4, #16
10934	lsr	lr, lr, #24
10935#else
10936	uxtb	lr, r4, ror #8
10937#endif
10938#else
10939	ubfx	lr, r4, #8, #8
10940#endif
10941	eor	r9, r9, r2, ror #16
10942#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10943#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10944	lsl	r2, r5, #24
10945	lsr	r2, r2, #24
10946#else
10947	uxtb	r2, r5
10948#endif
10949#else
10950	ubfx	r2, r5, #0, #8
10951#endif
10952	ldr	r10, [r0, r10, lsl #2]
10953	ldr	r11, [r0, r11, lsl #2]
10954	ldr	lr, [r0, lr, lsl #2]
10955	ldr	r2, [r0, r2, lsl #2]
10956#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10957#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10958	lsl	r6, r6, #24
10959	lsr	r6, r6, #24
10960#else
10961	uxtb	r6, r6
10962#endif
10963#else
10964	ubfx	r6, r6, #0, #8
10965#endif
10966	eor	r10, r10, r11, ror #24
10967#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10968#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10969	lsl	r11, r4, #8
10970	lsr	r11, r11, #24
10971#else
10972	uxtb	r11, r4, ror #16
10973#endif
10974#else
10975	ubfx	r11, r4, #16, #8
10976#endif
10977	eor	r10, r10, lr, ror #8
10978	lsr	lr, r7, #24
10979	eor	r10, r10, r2, ror #16
10980#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10981#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10982	lsl	r2, r5, #16
10983	lsr	r2, r2, #24
10984#else
10985	uxtb	r2, r5, ror #8
10986#endif
10987#else
10988	ubfx	r2, r5, #8, #8
10989#endif
10990	ldr	r6, [r0, r6, lsl #2]
10991	ldr	lr, [r0, lr, lsl #2]
10992	ldr	r11, [r0, r11, lsl #2]
10993	ldr	r2, [r0, r2, lsl #2]
10994	eor	lr, lr, r6, ror #24
10995	ldm	r3!, {r4, r5, r6, r7}
10996	eor	r11, r11, lr, ror #24
10997	eor	r11, r11, r2, ror #8
10998	#   XOR in Key Schedule
10999	eor	r8, r8, r4
11000	eor	r9, r9, r5
11001	eor	r10, r10, r6
11002	eor	r11, r11, r7
11003#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11004#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11005	lsl	r4, r9, #8
11006	lsr	r4, r4, #24
11007#else
11008	uxtb	r4, r9, ror #16
11009#endif
11010#else
11011	ubfx	r4, r9, #16, #8
11012#endif
11013	lsr	r7, r8, #24
11014#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11015#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11016	lsl	lr, r10, #16
11017	lsr	lr, lr, #24
11018#else
11019	uxtb	lr, r10, ror #8
11020#endif
11021#else
11022	ubfx	lr, r10, #8, #8
11023#endif
11024#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11025#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11026	lsl	r2, r11, #24
11027	lsr	r2, r2, #24
11028#else
11029	uxtb	r2, r11
11030#endif
11031#else
11032	ubfx	r2, r11, #0, #8
11033#endif
11034	ldr	r4, [r0, r4, lsl #2]
11035	ldr	r7, [r0, r7, lsl #2]
11036	ldr	lr, [r0, lr, lsl #2]
11037	ldr	r2, [r0, r2, lsl #2]
11038#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11039#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11040	lsl	r5, r10, #8
11041	lsr	r5, r5, #24
11042#else
11043	uxtb	r5, r10, ror #16
11044#endif
11045#else
11046	ubfx	r5, r10, #16, #8
11047#endif
11048	eor	r4, r4, r7, ror #24
11049	lsr	r7, r9, #24
11050	eor	r4, r4, lr, ror #8
11051#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11052#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11053	lsl	lr, r11, #16
11054	lsr	lr, lr, #24
11055#else
11056	uxtb	lr, r11, ror #8
11057#endif
11058#else
11059	ubfx	lr, r11, #8, #8
11060#endif
11061	eor	r4, r4, r2, ror #16
11062#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11063#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11064	lsl	r2, r8, #24
11065	lsr	r2, r2, #24
11066#else
11067	uxtb	r2, r8
11068#endif
11069#else
11070	ubfx	r2, r8, #0, #8
11071#endif
11072	ldr	r5, [r0, r5, lsl #2]
11073	ldr	r7, [r0, r7, lsl #2]
11074	ldr	lr, [r0, lr, lsl #2]
11075	ldr	r2, [r0, r2, lsl #2]
11076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11077#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11078	lsl	r6, r11, #8
11079	lsr	r6, r6, #24
11080#else
11081	uxtb	r6, r11, ror #16
11082#endif
11083#else
11084	ubfx	r6, r11, #16, #8
11085#endif
11086	eor	r5, r5, r7, ror #24
11087	lsr	r7, r10, #24
11088	eor	r5, r5, lr, ror #8
11089#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11090#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11091	lsl	lr, r8, #16
11092	lsr	lr, lr, #24
11093#else
11094	uxtb	lr, r8, ror #8
11095#endif
11096#else
11097	ubfx	lr, r8, #8, #8
11098#endif
11099	eor	r5, r5, r2, ror #16
11100#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11101#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11102	lsl	r2, r9, #24
11103	lsr	r2, r2, #24
11104#else
11105	uxtb	r2, r9
11106#endif
11107#else
11108	ubfx	r2, r9, #0, #8
11109#endif
11110	ldr	r6, [r0, r6, lsl #2]
11111	ldr	r7, [r0, r7, lsl #2]
11112	ldr	lr, [r0, lr, lsl #2]
11113	ldr	r2, [r0, r2, lsl #2]
11114#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11115#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11116	lsl	r10, r10, #24
11117	lsr	r10, r10, #24
11118#else
11119	uxtb	r10, r10
11120#endif
11121#else
11122	ubfx	r10, r10, #0, #8
11123#endif
11124	eor	r6, r6, r7, ror #24
11125#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11126#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11127	lsl	r7, r8, #8
11128	lsr	r7, r7, #24
11129#else
11130	uxtb	r7, r8, ror #16
11131#endif
11132#else
11133	ubfx	r7, r8, #16, #8
11134#endif
11135	eor	r6, r6, lr, ror #8
11136	lsr	lr, r11, #24
11137	eor	r6, r6, r2, ror #16
11138#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11139#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11140	lsl	r2, r9, #16
11141	lsr	r2, r2, #24
11142#else
11143	uxtb	r2, r9, ror #8
11144#endif
11145#else
11146	ubfx	r2, r9, #8, #8
11147#endif
11148	ldr	r10, [r0, r10, lsl #2]
11149	ldr	lr, [r0, lr, lsl #2]
11150	ldr	r7, [r0, r7, lsl #2]
11151	ldr	r2, [r0, r2, lsl #2]
11152	eor	lr, lr, r10, ror #24
11153	ldm	r3!, {r8, r9, r10, r11}
11154	eor	r7, r7, lr, ror #24
11155	eor	r7, r7, r2, ror #8
11156	#   XOR in Key Schedule
11157	eor	r4, r4, r8
11158	eor	r5, r5, r9
11159	eor	r6, r6, r10
11160	eor	r7, r7, r11
11161	subs	r1, r1, #1
11162	bne	L_AES_ECB_encrypt_block_nr_128
11163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11164#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11165	lsl	r8, r5, #8
11166	lsr	r8, r8, #24
11167#else
11168	uxtb	r8, r5, ror #16
11169#endif
11170#else
11171	ubfx	r8, r5, #16, #8
11172#endif
11173	lsr	r11, r4, #24
11174#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11175#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11176	lsl	lr, r6, #16
11177	lsr	lr, lr, #24
11178#else
11179	uxtb	lr, r6, ror #8
11180#endif
11181#else
11182	ubfx	lr, r6, #8, #8
11183#endif
11184#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11185#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11186	lsl	r2, r7, #24
11187	lsr	r2, r2, #24
11188#else
11189	uxtb	r2, r7
11190#endif
11191#else
11192	ubfx	r2, r7, #0, #8
11193#endif
11194	ldr	r8, [r0, r8, lsl #2]
11195	ldr	r11, [r0, r11, lsl #2]
11196	ldr	lr, [r0, lr, lsl #2]
11197	ldr	r2, [r0, r2, lsl #2]
11198#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11200	lsl	r9, r6, #8
11201	lsr	r9, r9, #24
11202#else
11203	uxtb	r9, r6, ror #16
11204#endif
11205#else
11206	ubfx	r9, r6, #16, #8
11207#endif
11208	eor	r8, r8, r11, ror #24
11209	lsr	r11, r5, #24
11210	eor	r8, r8, lr, ror #8
11211#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11213	lsl	lr, r7, #16
11214	lsr	lr, lr, #24
11215#else
11216	uxtb	lr, r7, ror #8
11217#endif
11218#else
11219	ubfx	lr, r7, #8, #8
11220#endif
11221	eor	r8, r8, r2, ror #16
11222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11223#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11224	lsl	r2, r4, #24
11225	lsr	r2, r2, #24
11226#else
11227	uxtb	r2, r4
11228#endif
11229#else
11230	ubfx	r2, r4, #0, #8
11231#endif
11232	ldr	r9, [r0, r9, lsl #2]
11233	ldr	r11, [r0, r11, lsl #2]
11234	ldr	lr, [r0, lr, lsl #2]
11235	ldr	r2, [r0, r2, lsl #2]
11236#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11237#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11238	lsl	r10, r7, #8
11239	lsr	r10, r10, #24
11240#else
11241	uxtb	r10, r7, ror #16
11242#endif
11243#else
11244	ubfx	r10, r7, #16, #8
11245#endif
11246	eor	r9, r9, r11, ror #24
11247	lsr	r11, r6, #24
11248	eor	r9, r9, lr, ror #8
11249#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11250#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11251	lsl	lr, r4, #16
11252	lsr	lr, lr, #24
11253#else
11254	uxtb	lr, r4, ror #8
11255#endif
11256#else
11257	ubfx	lr, r4, #8, #8
11258#endif
11259	eor	r9, r9, r2, ror #16
11260#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11261#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11262	lsl	r2, r5, #24
11263	lsr	r2, r2, #24
11264#else
11265	uxtb	r2, r5
11266#endif
11267#else
11268	ubfx	r2, r5, #0, #8
11269#endif
11270	ldr	r10, [r0, r10, lsl #2]
11271	ldr	r11, [r0, r11, lsl #2]
11272	ldr	lr, [r0, lr, lsl #2]
11273	ldr	r2, [r0, r2, lsl #2]
11274#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11275#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11276	lsl	r6, r6, #24
11277	lsr	r6, r6, #24
11278#else
11279	uxtb	r6, r6
11280#endif
11281#else
11282	ubfx	r6, r6, #0, #8
11283#endif
11284	eor	r10, r10, r11, ror #24
11285#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11286#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11287	lsl	r11, r4, #8
11288	lsr	r11, r11, #24
11289#else
11290	uxtb	r11, r4, ror #16
11291#endif
11292#else
11293	ubfx	r11, r4, #16, #8
11294#endif
11295	eor	r10, r10, lr, ror #8
11296	lsr	lr, r7, #24
11297	eor	r10, r10, r2, ror #16
11298#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11299#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11300	lsl	r2, r5, #16
11301	lsr	r2, r2, #24
11302#else
11303	uxtb	r2, r5, ror #8
11304#endif
11305#else
11306	ubfx	r2, r5, #8, #8
11307#endif
11308	ldr	r6, [r0, r6, lsl #2]
11309	ldr	lr, [r0, lr, lsl #2]
11310	ldr	r11, [r0, r11, lsl #2]
11311	ldr	r2, [r0, r2, lsl #2]
11312	eor	lr, lr, r6, ror #24
11313	ldm	r3!, {r4, r5, r6, r7}
11314	eor	r11, r11, lr, ror #24
11315	eor	r11, r11, r2, ror #8
11316	#   XOR in Key Schedule
11317	eor	r8, r8, r4
11318	eor	r9, r9, r5
11319	eor	r10, r10, r6
11320	eor	r11, r11, r7
11321#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11322#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11323	lsl	r4, r11, #24
11324	lsr	r4, r4, #24
11325#else
11326	uxtb	r4, r11
11327#endif
11328#else
11329	ubfx	r4, r11, #0, #8
11330#endif
11331#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11332#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11333	lsl	r7, r10, #16
11334	lsr	r7, r7, #24
11335#else
11336	uxtb	r7, r10, ror #8
11337#endif
11338#else
11339	ubfx	r7, r10, #8, #8
11340#endif
11341#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11342#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11343	lsl	lr, r9, #8
11344	lsr	lr, lr, #24
11345#else
11346	uxtb	lr, r9, ror #16
11347#endif
11348#else
11349	ubfx	lr, r9, #16, #8
11350#endif
11351	lsr	r2, r8, #24
11352	ldrb	r4, [r0, r4, lsl #2]
11353	ldrb	r7, [r0, r7, lsl #2]
11354	ldrb	lr, [r0, lr, lsl #2]
11355	ldrb	r2, [r0, r2, lsl #2]
11356#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11357#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11358	lsl	r5, r8, #24
11359	lsr	r5, r5, #24
11360#else
11361	uxtb	r5, r8
11362#endif
11363#else
11364	ubfx	r5, r8, #0, #8
11365#endif
11366	eor	r4, r4, r7, lsl #8
11367#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11368#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11369	lsl	r7, r11, #16
11370	lsr	r7, r7, #24
11371#else
11372	uxtb	r7, r11, ror #8
11373#endif
11374#else
11375	ubfx	r7, r11, #8, #8
11376#endif
11377	eor	r4, r4, lr, lsl #16
11378#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11379#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11380	lsl	lr, r10, #8
11381	lsr	lr, lr, #24
11382#else
11383	uxtb	lr, r10, ror #16
11384#endif
11385#else
11386	ubfx	lr, r10, #16, #8
11387#endif
11388	eor	r4, r4, r2, lsl #24
11389	lsr	r2, r9, #24
11390	ldrb	r5, [r0, r5, lsl #2]
11391	ldrb	r7, [r0, r7, lsl #2]
11392	ldrb	lr, [r0, lr, lsl #2]
11393	ldrb	r2, [r0, r2, lsl #2]
11394#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11395#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11396	lsl	r6, r9, #24
11397	lsr	r6, r6, #24
11398#else
11399	uxtb	r6, r9
11400#endif
11401#else
11402	ubfx	r6, r9, #0, #8
11403#endif
11404	eor	r5, r5, r7, lsl #8
11405#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11406#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11407	lsl	r7, r8, #16
11408	lsr	r7, r7, #24
11409#else
11410	uxtb	r7, r8, ror #8
11411#endif
11412#else
11413	ubfx	r7, r8, #8, #8
11414#endif
11415	eor	r5, r5, lr, lsl #16
11416#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11417#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11418	lsl	lr, r11, #8
11419	lsr	lr, lr, #24
11420#else
11421	uxtb	lr, r11, ror #16
11422#endif
11423#else
11424	ubfx	lr, r11, #16, #8
11425#endif
11426	eor	r5, r5, r2, lsl #24
11427	lsr	r2, r10, #24
11428	ldrb	r6, [r0, r6, lsl #2]
11429	ldrb	r7, [r0, r7, lsl #2]
11430	ldrb	lr, [r0, lr, lsl #2]
11431	ldrb	r2, [r0, r2, lsl #2]
11432	lsr	r11, r11, #24
11433	eor	r6, r6, r7, lsl #8
11434#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11435#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11436	lsl	r7, r10, #24
11437	lsr	r7, r7, #24
11438#else
11439	uxtb	r7, r10
11440#endif
11441#else
11442	ubfx	r7, r10, #0, #8
11443#endif
11444	eor	r6, r6, lr, lsl #16
11445#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11446#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11447	lsl	lr, r9, #16
11448	lsr	lr, lr, #24
11449#else
11450	uxtb	lr, r9, ror #8
11451#endif
11452#else
11453	ubfx	lr, r9, #8, #8
11454#endif
11455	eor	r6, r6, r2, lsl #24
11456#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11457#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11458	lsl	r2, r8, #8
11459	lsr	r2, r2, #24
11460#else
11461	uxtb	r2, r8, ror #16
11462#endif
11463#else
11464	ubfx	r2, r8, #16, #8
11465#endif
11466	ldrb	r11, [r0, r11, lsl #2]
11467	ldrb	r7, [r0, r7, lsl #2]
11468	ldrb	lr, [r0, lr, lsl #2]
11469	ldrb	r2, [r0, r2, lsl #2]
11470	eor	lr, lr, r11, lsl #16
11471	ldm	r3, {r8, r9, r10, r11}
11472	eor	r7, r7, lr, lsl #8
11473	eor	r7, r7, r2, lsl #16
11474	#   XOR in Key Schedule
11475	eor	r4, r4, r8
11476	eor	r5, r5, r9
11477	eor	r6, r6, r10
11478	eor	r7, r7, r11
11479#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
11480	pop	{r1, r2, lr}
11481	ldr	r3, [sp]
11482#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11483	eor	r8, r4, r4, ror #16
11484	eor	r9, r5, r5, ror #16
11485	eor	r10, r6, r6, ror #16
11486	eor	r11, r7, r7, ror #16
11487	bic	r8, r8, #0xff0000
11488	bic	r9, r9, #0xff0000
11489	bic	r10, r10, #0xff0000
11490	bic	r11, r11, #0xff0000
11491	ror	r4, r4, #8
11492	ror	r5, r5, #8
11493	ror	r6, r6, #8
11494	ror	r7, r7, #8
11495	eor	r4, r4, r8, lsr #8
11496	eor	r5, r5, r9, lsr #8
11497	eor	r6, r6, r10, lsr #8
11498	eor	r7, r7, r11, lsr #8
11499#else
11500	rev	r4, r4
11501	rev	r5, r5
11502	rev	r6, r6
11503	rev	r7, r7
11504#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
11505	str	r4, [r1]
11506	str	r5, [r1, #4]
11507	str	r6, [r1, #8]
11508	str	r7, [r1, #12]
11509	subs	r2, r2, #16
11510	add	lr, lr, #16
11511	add	r1, r1, #16
11512	bne	L_AES_ECB_encrypt_loop_block_128
11513L_AES_ECB_encrypt_end:
11514	pop	{r3}
11515	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
11516	.size	AES_ECB_encrypt,.-AES_ECB_encrypt
11517#endif /* HAVE_AESCCM || HAVE_AESGCM || WOLFSSL_AES_DIRECT ||
11518        * WOLFSSL_AES_COUNTER || HAVE_AES_ECB */
11519#ifdef HAVE_AES_CBC
11520#ifndef __APPLE__
11521	.text
11522	.type	L_AES_ARM32_te_cbc, %object
11523	.size	L_AES_ARM32_te_cbc, 12
11524#else
11525	.section	__DATA,__data
11526#endif /* __APPLE__ */
11527	# 8-byte aligned, 64-bit aligned
11528#ifndef __APPLE__
11529	.align	3
11530#else
11531	.p2align	3
11532#endif /* __APPLE__ */
11533L_AES_ARM32_te_cbc:
11534	.long	L_AES_ARM32_te_data
11535	.text
11536	.align	4
11537	.globl	AES_CBC_encrypt
11538	.type	AES_CBC_encrypt, %function
11539AES_CBC_encrypt:
11540	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
11541	ldr	r8, [sp, #36]
11542	ldr	r9, [sp, #40]
11543	mov	lr, r0
11544	adr	r0, L_AES_ARM32_te_cbc
11545	ldr	r0, [r0]
11546	ldm	r9, {r4, r5, r6, r7}
11547	push	{r3, r9}
11548	cmp	r8, #10
11549	beq	L_AES_CBC_encrypt_start_block_128
11550	cmp	r8, #12
11551	beq	L_AES_CBC_encrypt_start_block_192
11552L_AES_CBC_encrypt_loop_block_256:
11553	ldr	r8, [lr]
11554	ldr	r9, [lr, #4]
11555	ldr	r10, [lr, #8]
11556	ldr	r11, [lr, #12]
11557	eor	r4, r4, r8
11558	eor	r5, r5, r9
11559	eor	r6, r6, r10
11560	eor	r7, r7, r11
11561	push	{r1, r2, lr}
11562#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11563	eor	r8, r4, r4, ror #16
11564	eor	r9, r5, r5, ror #16
11565	eor	r10, r6, r6, ror #16
11566	eor	r11, r7, r7, ror #16
11567	bic	r8, r8, #0xff0000
11568	bic	r9, r9, #0xff0000
11569	bic	r10, r10, #0xff0000
11570	bic	r11, r11, #0xff0000
11571	ror	r4, r4, #8
11572	ror	r5, r5, #8
11573	ror	r6, r6, #8
11574	ror	r7, r7, #8
11575	eor	r4, r4, r8, lsr #8
11576	eor	r5, r5, r9, lsr #8
11577	eor	r6, r6, r10, lsr #8
11578	eor	r7, r7, r11, lsr #8
11579#else
11580	rev	r4, r4
11581	rev	r5, r5
11582	rev	r6, r6
11583	rev	r7, r7
11584#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
11585	ldm	r3!, {r8, r9, r10, r11}
11586	# Round: 0 - XOR in key schedule
11587	eor	r4, r4, r8
11588	eor	r5, r5, r9
11589	eor	r6, r6, r10
11590	eor	r7, r7, r11
11591	mov	r1, #6
11592#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
11593	bl	AES_encrypt_block
11594#else
11595L_AES_CBC_encrypt_block_nr_256:
11596#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11597#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11598	lsl	r8, r5, #8
11599	lsr	r8, r8, #24
11600#else
11601	uxtb	r8, r5, ror #16
11602#endif
11603#else
11604	ubfx	r8, r5, #16, #8
11605#endif
11606	lsr	r11, r4, #24
11607#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11608#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11609	lsl	lr, r6, #16
11610	lsr	lr, lr, #24
11611#else
11612	uxtb	lr, r6, ror #8
11613#endif
11614#else
11615	ubfx	lr, r6, #8, #8
11616#endif
11617#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11618#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11619	lsl	r2, r7, #24
11620	lsr	r2, r2, #24
11621#else
11622	uxtb	r2, r7
11623#endif
11624#else
11625	ubfx	r2, r7, #0, #8
11626#endif
11627	ldr	r8, [r0, r8, lsl #2]
11628	ldr	r11, [r0, r11, lsl #2]
11629	ldr	lr, [r0, lr, lsl #2]
11630	ldr	r2, [r0, r2, lsl #2]
11631#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11632#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11633	lsl	r9, r6, #8
11634	lsr	r9, r9, #24
11635#else
11636	uxtb	r9, r6, ror #16
11637#endif
11638#else
11639	ubfx	r9, r6, #16, #8
11640#endif
11641	eor	r8, r8, r11, ror #24
11642	lsr	r11, r5, #24
11643	eor	r8, r8, lr, ror #8
11644#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11645#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11646	lsl	lr, r7, #16
11647	lsr	lr, lr, #24
11648#else
11649	uxtb	lr, r7, ror #8
11650#endif
11651#else
11652	ubfx	lr, r7, #8, #8
11653#endif
11654	eor	r8, r8, r2, ror #16
11655#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11656#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11657	lsl	r2, r4, #24
11658	lsr	r2, r2, #24
11659#else
11660	uxtb	r2, r4
11661#endif
11662#else
11663	ubfx	r2, r4, #0, #8
11664#endif
11665	ldr	r9, [r0, r9, lsl #2]
11666	ldr	r11, [r0, r11, lsl #2]
11667	ldr	lr, [r0, lr, lsl #2]
11668	ldr	r2, [r0, r2, lsl #2]
11669#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11670#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11671	lsl	r10, r7, #8
11672	lsr	r10, r10, #24
11673#else
11674	uxtb	r10, r7, ror #16
11675#endif
11676#else
11677	ubfx	r10, r7, #16, #8
11678#endif
11679	eor	r9, r9, r11, ror #24
11680	lsr	r11, r6, #24
11681	eor	r9, r9, lr, ror #8
11682#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11683#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11684	lsl	lr, r4, #16
11685	lsr	lr, lr, #24
11686#else
11687	uxtb	lr, r4, ror #8
11688#endif
11689#else
11690	ubfx	lr, r4, #8, #8
11691#endif
11692	eor	r9, r9, r2, ror #16
11693#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11694#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11695	lsl	r2, r5, #24
11696	lsr	r2, r2, #24
11697#else
11698	uxtb	r2, r5
11699#endif
11700#else
11701	ubfx	r2, r5, #0, #8
11702#endif
11703	ldr	r10, [r0, r10, lsl #2]
11704	ldr	r11, [r0, r11, lsl #2]
11705	ldr	lr, [r0, lr, lsl #2]
11706	ldr	r2, [r0, r2, lsl #2]
11707#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11708#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11709	lsl	r6, r6, #24
11710	lsr	r6, r6, #24
11711#else
11712	uxtb	r6, r6
11713#endif
11714#else
11715	ubfx	r6, r6, #0, #8
11716#endif
11717	eor	r10, r10, r11, ror #24
11718#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11719#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11720	lsl	r11, r4, #8
11721	lsr	r11, r11, #24
11722#else
11723	uxtb	r11, r4, ror #16
11724#endif
11725#else
11726	ubfx	r11, r4, #16, #8
11727#endif
11728	eor	r10, r10, lr, ror #8
11729	lsr	lr, r7, #24
11730	eor	r10, r10, r2, ror #16
11731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11733	lsl	r2, r5, #16
11734	lsr	r2, r2, #24
11735#else
11736	uxtb	r2, r5, ror #8
11737#endif
11738#else
11739	ubfx	r2, r5, #8, #8
11740#endif
11741	ldr	r6, [r0, r6, lsl #2]
11742	ldr	lr, [r0, lr, lsl #2]
11743	ldr	r11, [r0, r11, lsl #2]
11744	ldr	r2, [r0, r2, lsl #2]
11745	eor	lr, lr, r6, ror #24
11746	ldm	r3!, {r4, r5, r6, r7}
11747	eor	r11, r11, lr, ror #24
11748	eor	r11, r11, r2, ror #8
11749	#   XOR in Key Schedule
11750	eor	r8, r8, r4
11751	eor	r9, r9, r5
11752	eor	r10, r10, r6
11753	eor	r11, r11, r7
11754#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11755#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11756	lsl	r4, r9, #8
11757	lsr	r4, r4, #24
11758#else
11759	uxtb	r4, r9, ror #16
11760#endif
11761#else
11762	ubfx	r4, r9, #16, #8
11763#endif
11764	lsr	r7, r8, #24
11765#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11766#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11767	lsl	lr, r10, #16
11768	lsr	lr, lr, #24
11769#else
11770	uxtb	lr, r10, ror #8
11771#endif
11772#else
11773	ubfx	lr, r10, #8, #8
11774#endif
11775#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11776#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11777	lsl	r2, r11, #24
11778	lsr	r2, r2, #24
11779#else
11780	uxtb	r2, r11
11781#endif
11782#else
11783	ubfx	r2, r11, #0, #8
11784#endif
11785	ldr	r4, [r0, r4, lsl #2]
11786	ldr	r7, [r0, r7, lsl #2]
11787	ldr	lr, [r0, lr, lsl #2]
11788	ldr	r2, [r0, r2, lsl #2]
11789#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11790#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11791	lsl	r5, r10, #8
11792	lsr	r5, r5, #24
11793#else
11794	uxtb	r5, r10, ror #16
11795#endif
11796#else
11797	ubfx	r5, r10, #16, #8
11798#endif
11799	eor	r4, r4, r7, ror #24
11800	lsr	r7, r9, #24
11801	eor	r4, r4, lr, ror #8
11802#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11803#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11804	lsl	lr, r11, #16
11805	lsr	lr, lr, #24
11806#else
11807	uxtb	lr, r11, ror #8
11808#endif
11809#else
11810	ubfx	lr, r11, #8, #8
11811#endif
11812	eor	r4, r4, r2, ror #16
11813#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11814#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11815	lsl	r2, r8, #24
11816	lsr	r2, r2, #24
11817#else
11818	uxtb	r2, r8
11819#endif
11820#else
11821	ubfx	r2, r8, #0, #8
11822#endif
11823	ldr	r5, [r0, r5, lsl #2]
11824	ldr	r7, [r0, r7, lsl #2]
11825	ldr	lr, [r0, lr, lsl #2]
11826	ldr	r2, [r0, r2, lsl #2]
11827#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11828#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11829	lsl	r6, r11, #8
11830	lsr	r6, r6, #24
11831#else
11832	uxtb	r6, r11, ror #16
11833#endif
11834#else
11835	ubfx	r6, r11, #16, #8
11836#endif
11837	eor	r5, r5, r7, ror #24
11838	lsr	r7, r10, #24
11839	eor	r5, r5, lr, ror #8
11840#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11841#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11842	lsl	lr, r8, #16
11843	lsr	lr, lr, #24
11844#else
11845	uxtb	lr, r8, ror #8
11846#endif
11847#else
11848	ubfx	lr, r8, #8, #8
11849#endif
11850	eor	r5, r5, r2, ror #16
11851#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11852#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11853	lsl	r2, r9, #24
11854	lsr	r2, r2, #24
11855#else
11856	uxtb	r2, r9
11857#endif
11858#else
11859	ubfx	r2, r9, #0, #8
11860#endif
11861	ldr	r6, [r0, r6, lsl #2]
11862	ldr	r7, [r0, r7, lsl #2]
11863	ldr	lr, [r0, lr, lsl #2]
11864	ldr	r2, [r0, r2, lsl #2]
11865#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11866#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11867	lsl	r10, r10, #24
11868	lsr	r10, r10, #24
11869#else
11870	uxtb	r10, r10
11871#endif
11872#else
11873	ubfx	r10, r10, #0, #8
11874#endif
11875	eor	r6, r6, r7, ror #24
11876#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11877#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11878	lsl	r7, r8, #8
11879	lsr	r7, r7, #24
11880#else
11881	uxtb	r7, r8, ror #16
11882#endif
11883#else
11884	ubfx	r7, r8, #16, #8
11885#endif
11886	eor	r6, r6, lr, ror #8
11887	lsr	lr, r11, #24
11888	eor	r6, r6, r2, ror #16
11889#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11890#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11891	lsl	r2, r9, #16
11892	lsr	r2, r2, #24
11893#else
11894	uxtb	r2, r9, ror #8
11895#endif
11896#else
11897	ubfx	r2, r9, #8, #8
11898#endif
11899	ldr	r10, [r0, r10, lsl #2]
11900	ldr	lr, [r0, lr, lsl #2]
11901	ldr	r7, [r0, r7, lsl #2]
11902	ldr	r2, [r0, r2, lsl #2]
11903	eor	lr, lr, r10, ror #24
11904	ldm	r3!, {r8, r9, r10, r11}
11905	eor	r7, r7, lr, ror #24
11906	eor	r7, r7, r2, ror #8
11907	#   XOR in Key Schedule
11908	eor	r4, r4, r8
11909	eor	r5, r5, r9
11910	eor	r6, r6, r10
11911	eor	r7, r7, r11
11912	subs	r1, r1, #1
11913	bne	L_AES_CBC_encrypt_block_nr_256
11914#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11915#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11916	lsl	r8, r5, #8
11917	lsr	r8, r8, #24
11918#else
11919	uxtb	r8, r5, ror #16
11920#endif
11921#else
11922	ubfx	r8, r5, #16, #8
11923#endif
11924	lsr	r11, r4, #24
11925#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11926#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11927	lsl	lr, r6, #16
11928	lsr	lr, lr, #24
11929#else
11930	uxtb	lr, r6, ror #8
11931#endif
11932#else
11933	ubfx	lr, r6, #8, #8
11934#endif
11935#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11936#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11937	lsl	r2, r7, #24
11938	lsr	r2, r2, #24
11939#else
11940	uxtb	r2, r7
11941#endif
11942#else
11943	ubfx	r2, r7, #0, #8
11944#endif
11945	ldr	r8, [r0, r8, lsl #2]
11946	ldr	r11, [r0, r11, lsl #2]
11947	ldr	lr, [r0, lr, lsl #2]
11948	ldr	r2, [r0, r2, lsl #2]
11949#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11950#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11951	lsl	r9, r6, #8
11952	lsr	r9, r9, #24
11953#else
11954	uxtb	r9, r6, ror #16
11955#endif
11956#else
11957	ubfx	r9, r6, #16, #8
11958#endif
11959	eor	r8, r8, r11, ror #24
11960	lsr	r11, r5, #24
11961	eor	r8, r8, lr, ror #8
11962#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11964	lsl	lr, r7, #16
11965	lsr	lr, lr, #24
11966#else
11967	uxtb	lr, r7, ror #8
11968#endif
11969#else
11970	ubfx	lr, r7, #8, #8
11971#endif
11972	eor	r8, r8, r2, ror #16
11973#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11974#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11975	lsl	r2, r4, #24
11976	lsr	r2, r2, #24
11977#else
11978	uxtb	r2, r4
11979#endif
11980#else
11981	ubfx	r2, r4, #0, #8
11982#endif
11983	ldr	r9, [r0, r9, lsl #2]
11984	ldr	r11, [r0, r11, lsl #2]
11985	ldr	lr, [r0, lr, lsl #2]
11986	ldr	r2, [r0, r2, lsl #2]
11987#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11988#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11989	lsl	r10, r7, #8
11990	lsr	r10, r10, #24
11991#else
11992	uxtb	r10, r7, ror #16
11993#endif
11994#else
11995	ubfx	r10, r7, #16, #8
11996#endif
11997	eor	r9, r9, r11, ror #24
11998	lsr	r11, r6, #24
11999	eor	r9, r9, lr, ror #8
12000#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12001#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12002	lsl	lr, r4, #16
12003	lsr	lr, lr, #24
12004#else
12005	uxtb	lr, r4, ror #8
12006#endif
12007#else
12008	ubfx	lr, r4, #8, #8
12009#endif
12010	eor	r9, r9, r2, ror #16
12011#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12012#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12013	lsl	r2, r5, #24
12014	lsr	r2, r2, #24
12015#else
12016	uxtb	r2, r5
12017#endif
12018#else
12019	ubfx	r2, r5, #0, #8
12020#endif
12021	ldr	r10, [r0, r10, lsl #2]
12022	ldr	r11, [r0, r11, lsl #2]
12023	ldr	lr, [r0, lr, lsl #2]
12024	ldr	r2, [r0, r2, lsl #2]
12025#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12026#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12027	lsl	r6, r6, #24
12028	lsr	r6, r6, #24
12029#else
12030	uxtb	r6, r6
12031#endif
12032#else
12033	ubfx	r6, r6, #0, #8
12034#endif
12035	eor	r10, r10, r11, ror #24
12036#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12037#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12038	lsl	r11, r4, #8
12039	lsr	r11, r11, #24
12040#else
12041	uxtb	r11, r4, ror #16
12042#endif
12043#else
12044	ubfx	r11, r4, #16, #8
12045#endif
12046	eor	r10, r10, lr, ror #8
12047	lsr	lr, r7, #24
12048	eor	r10, r10, r2, ror #16
12049#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12050#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12051	lsl	r2, r5, #16
12052	lsr	r2, r2, #24
12053#else
12054	uxtb	r2, r5, ror #8
12055#endif
12056#else
12057	ubfx	r2, r5, #8, #8
12058#endif
12059	ldr	r6, [r0, r6, lsl #2]
12060	ldr	lr, [r0, lr, lsl #2]
12061	ldr	r11, [r0, r11, lsl #2]
12062	ldr	r2, [r0, r2, lsl #2]
12063	eor	lr, lr, r6, ror #24
12064	ldm	r3!, {r4, r5, r6, r7}
12065	eor	r11, r11, lr, ror #24
12066	eor	r11, r11, r2, ror #8
12067	#   XOR in Key Schedule
12068	eor	r8, r8, r4
12069	eor	r9, r9, r5
12070	eor	r10, r10, r6
12071	eor	r11, r11, r7
12072#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12073#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12074	lsl	r4, r11, #24
12075	lsr	r4, r4, #24
12076#else
12077	uxtb	r4, r11
12078#endif
12079#else
12080	ubfx	r4, r11, #0, #8
12081#endif
12082#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12083#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12084	lsl	r7, r10, #16
12085	lsr	r7, r7, #24
12086#else
12087	uxtb	r7, r10, ror #8
12088#endif
12089#else
12090	ubfx	r7, r10, #8, #8
12091#endif
12092#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12093#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12094	lsl	lr, r9, #8
12095	lsr	lr, lr, #24
12096#else
12097	uxtb	lr, r9, ror #16
12098#endif
12099#else
12100	ubfx	lr, r9, #16, #8
12101#endif
12102	lsr	r2, r8, #24
12103	ldrb	r4, [r0, r4, lsl #2]
12104	ldrb	r7, [r0, r7, lsl #2]
12105	ldrb	lr, [r0, lr, lsl #2]
12106	ldrb	r2, [r0, r2, lsl #2]
12107#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12108#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12109	lsl	r5, r8, #24
12110	lsr	r5, r5, #24
12111#else
12112	uxtb	r5, r8
12113#endif
12114#else
12115	ubfx	r5, r8, #0, #8
12116#endif
12117	eor	r4, r4, r7, lsl #8
12118#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12119#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12120	lsl	r7, r11, #16
12121	lsr	r7, r7, #24
12122#else
12123	uxtb	r7, r11, ror #8
12124#endif
12125#else
12126	ubfx	r7, r11, #8, #8
12127#endif
12128	eor	r4, r4, lr, lsl #16
12129#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12130#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12131	lsl	lr, r10, #8
12132	lsr	lr, lr, #24
12133#else
12134	uxtb	lr, r10, ror #16
12135#endif
12136#else
12137	ubfx	lr, r10, #16, #8
12138#endif
12139	eor	r4, r4, r2, lsl #24
12140	lsr	r2, r9, #24
12141	ldrb	r5, [r0, r5, lsl #2]
12142	ldrb	r7, [r0, r7, lsl #2]
12143	ldrb	lr, [r0, lr, lsl #2]
12144	ldrb	r2, [r0, r2, lsl #2]
12145#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12146#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12147	lsl	r6, r9, #24
12148	lsr	r6, r6, #24
12149#else
12150	uxtb	r6, r9
12151#endif
12152#else
12153	ubfx	r6, r9, #0, #8
12154#endif
12155	eor	r5, r5, r7, lsl #8
12156#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12157#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12158	lsl	r7, r8, #16
12159	lsr	r7, r7, #24
12160#else
12161	uxtb	r7, r8, ror #8
12162#endif
12163#else
12164	ubfx	r7, r8, #8, #8
12165#endif
12166	eor	r5, r5, lr, lsl #16
12167#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12168#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12169	lsl	lr, r11, #8
12170	lsr	lr, lr, #24
12171#else
12172	uxtb	lr, r11, ror #16
12173#endif
12174#else
12175	ubfx	lr, r11, #16, #8
12176#endif
12177	eor	r5, r5, r2, lsl #24
12178	lsr	r2, r10, #24
12179	ldrb	r6, [r0, r6, lsl #2]
12180	ldrb	r7, [r0, r7, lsl #2]
12181	ldrb	lr, [r0, lr, lsl #2]
12182	ldrb	r2, [r0, r2, lsl #2]
12183	lsr	r11, r11, #24
12184	eor	r6, r6, r7, lsl #8
12185#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12186#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12187	lsl	r7, r10, #24
12188	lsr	r7, r7, #24
12189#else
12190	uxtb	r7, r10
12191#endif
12192#else
12193	ubfx	r7, r10, #0, #8
12194#endif
12195	eor	r6, r6, lr, lsl #16
12196#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12197#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12198	lsl	lr, r9, #16
12199	lsr	lr, lr, #24
12200#else
12201	uxtb	lr, r9, ror #8
12202#endif
12203#else
12204	ubfx	lr, r9, #8, #8
12205#endif
12206	eor	r6, r6, r2, lsl #24
12207#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12208#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12209	lsl	r2, r8, #8
12210	lsr	r2, r2, #24
12211#else
12212	uxtb	r2, r8, ror #16
12213#endif
12214#else
12215	ubfx	r2, r8, #16, #8
12216#endif
12217	ldrb	r11, [r0, r11, lsl #2]
12218	ldrb	r7, [r0, r7, lsl #2]
12219	ldrb	lr, [r0, lr, lsl #2]
12220	ldrb	r2, [r0, r2, lsl #2]
12221	eor	lr, lr, r11, lsl #16
12222	ldm	r3, {r8, r9, r10, r11}
12223	eor	r7, r7, lr, lsl #8
12224	eor	r7, r7, r2, lsl #16
12225	#   XOR in Key Schedule
12226	eor	r4, r4, r8
12227	eor	r5, r5, r9
12228	eor	r6, r6, r10
12229	eor	r7, r7, r11
12230#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
12231	pop	{r1, r2, lr}
12232	ldr	r3, [sp]
12233#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12234	eor	r8, r4, r4, ror #16
12235	eor	r9, r5, r5, ror #16
12236	eor	r10, r6, r6, ror #16
12237	eor	r11, r7, r7, ror #16
12238	bic	r8, r8, #0xff0000
12239	bic	r9, r9, #0xff0000
12240	bic	r10, r10, #0xff0000
12241	bic	r11, r11, #0xff0000
12242	ror	r4, r4, #8
12243	ror	r5, r5, #8
12244	ror	r6, r6, #8
12245	ror	r7, r7, #8
12246	eor	r4, r4, r8, lsr #8
12247	eor	r5, r5, r9, lsr #8
12248	eor	r6, r6, r10, lsr #8
12249	eor	r7, r7, r11, lsr #8
12250#else
12251	rev	r4, r4
12252	rev	r5, r5
12253	rev	r6, r6
12254	rev	r7, r7
12255#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
12256	str	r4, [r1]
12257	str	r5, [r1, #4]
12258	str	r6, [r1, #8]
12259	str	r7, [r1, #12]
12260	subs	r2, r2, #16
12261	add	lr, lr, #16
12262	add	r1, r1, #16
12263	bne	L_AES_CBC_encrypt_loop_block_256
12264	b	L_AES_CBC_encrypt_end
12265L_AES_CBC_encrypt_start_block_192:
12266L_AES_CBC_encrypt_loop_block_192:
12267	ldr	r8, [lr]
12268	ldr	r9, [lr, #4]
12269	ldr	r10, [lr, #8]
12270	ldr	r11, [lr, #12]
12271	eor	r4, r4, r8
12272	eor	r5, r5, r9
12273	eor	r6, r6, r10
12274	eor	r7, r7, r11
12275	push	{r1, r2, lr}
12276#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12277	eor	r8, r4, r4, ror #16
12278	eor	r9, r5, r5, ror #16
12279	eor	r10, r6, r6, ror #16
12280	eor	r11, r7, r7, ror #16
12281	bic	r8, r8, #0xff0000
12282	bic	r9, r9, #0xff0000
12283	bic	r10, r10, #0xff0000
12284	bic	r11, r11, #0xff0000
12285	ror	r4, r4, #8
12286	ror	r5, r5, #8
12287	ror	r6, r6, #8
12288	ror	r7, r7, #8
12289	eor	r4, r4, r8, lsr #8
12290	eor	r5, r5, r9, lsr #8
12291	eor	r6, r6, r10, lsr #8
12292	eor	r7, r7, r11, lsr #8
12293#else
12294	rev	r4, r4
12295	rev	r5, r5
12296	rev	r6, r6
12297	rev	r7, r7
12298#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
12299	ldm	r3!, {r8, r9, r10, r11}
12300	# Round: 0 - XOR in key schedule
12301	eor	r4, r4, r8
12302	eor	r5, r5, r9
12303	eor	r6, r6, r10
12304	eor	r7, r7, r11
12305	mov	r1, #5
12306#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
12307	bl	AES_encrypt_block
12308#else
12309L_AES_CBC_encrypt_block_nr_192:
12310#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12311#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12312	lsl	r8, r5, #8
12313	lsr	r8, r8, #24
12314#else
12315	uxtb	r8, r5, ror #16
12316#endif
12317#else
12318	ubfx	r8, r5, #16, #8
12319#endif
12320	lsr	r11, r4, #24
12321#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12322#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12323	lsl	lr, r6, #16
12324	lsr	lr, lr, #24
12325#else
12326	uxtb	lr, r6, ror #8
12327#endif
12328#else
12329	ubfx	lr, r6, #8, #8
12330#endif
12331#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12332#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12333	lsl	r2, r7, #24
12334	lsr	r2, r2, #24
12335#else
12336	uxtb	r2, r7
12337#endif
12338#else
12339	ubfx	r2, r7, #0, #8
12340#endif
12341	ldr	r8, [r0, r8, lsl #2]
12342	ldr	r11, [r0, r11, lsl #2]
12343	ldr	lr, [r0, lr, lsl #2]
12344	ldr	r2, [r0, r2, lsl #2]
12345#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12346#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12347	lsl	r9, r6, #8
12348	lsr	r9, r9, #24
12349#else
12350	uxtb	r9, r6, ror #16
12351#endif
12352#else
12353	ubfx	r9, r6, #16, #8
12354#endif
12355	eor	r8, r8, r11, ror #24
12356	lsr	r11, r5, #24
12357	eor	r8, r8, lr, ror #8
12358#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12359#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12360	lsl	lr, r7, #16
12361	lsr	lr, lr, #24
12362#else
12363	uxtb	lr, r7, ror #8
12364#endif
12365#else
12366	ubfx	lr, r7, #8, #8
12367#endif
12368	eor	r8, r8, r2, ror #16
12369#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12370#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12371	lsl	r2, r4, #24
12372	lsr	r2, r2, #24
12373#else
12374	uxtb	r2, r4
12375#endif
12376#else
12377	ubfx	r2, r4, #0, #8
12378#endif
12379	ldr	r9, [r0, r9, lsl #2]
12380	ldr	r11, [r0, r11, lsl #2]
12381	ldr	lr, [r0, lr, lsl #2]
12382	ldr	r2, [r0, r2, lsl #2]
12383#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12384#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12385	lsl	r10, r7, #8
12386	lsr	r10, r10, #24
12387#else
12388	uxtb	r10, r7, ror #16
12389#endif
12390#else
12391	ubfx	r10, r7, #16, #8
12392#endif
12393	eor	r9, r9, r11, ror #24
12394	lsr	r11, r6, #24
12395	eor	r9, r9, lr, ror #8
12396#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12397#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12398	lsl	lr, r4, #16
12399	lsr	lr, lr, #24
12400#else
12401	uxtb	lr, r4, ror #8
12402#endif
12403#else
12404	ubfx	lr, r4, #8, #8
12405#endif
12406	eor	r9, r9, r2, ror #16
12407#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12408#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12409	lsl	r2, r5, #24
12410	lsr	r2, r2, #24
12411#else
12412	uxtb	r2, r5
12413#endif
12414#else
12415	ubfx	r2, r5, #0, #8
12416#endif
12417	ldr	r10, [r0, r10, lsl #2]
12418	ldr	r11, [r0, r11, lsl #2]
12419	ldr	lr, [r0, lr, lsl #2]
12420	ldr	r2, [r0, r2, lsl #2]
12421#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12422#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12423	lsl	r6, r6, #24
12424	lsr	r6, r6, #24
12425#else
12426	uxtb	r6, r6
12427#endif
12428#else
12429	ubfx	r6, r6, #0, #8
12430#endif
12431	eor	r10, r10, r11, ror #24
12432#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12433#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12434	lsl	r11, r4, #8
12435	lsr	r11, r11, #24
12436#else
12437	uxtb	r11, r4, ror #16
12438#endif
12439#else
12440	ubfx	r11, r4, #16, #8
12441#endif
12442	eor	r10, r10, lr, ror #8
12443	lsr	lr, r7, #24
12444	eor	r10, r10, r2, ror #16
12445#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12446#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12447	lsl	r2, r5, #16
12448	lsr	r2, r2, #24
12449#else
12450	uxtb	r2, r5, ror #8
12451#endif
12452#else
12453	ubfx	r2, r5, #8, #8
12454#endif
12455	ldr	r6, [r0, r6, lsl #2]
12456	ldr	lr, [r0, lr, lsl #2]
12457	ldr	r11, [r0, r11, lsl #2]
12458	ldr	r2, [r0, r2, lsl #2]
12459	eor	lr, lr, r6, ror #24
12460	ldm	r3!, {r4, r5, r6, r7}
12461	eor	r11, r11, lr, ror #24
12462	eor	r11, r11, r2, ror #8
12463	#   XOR in Key Schedule
12464	eor	r8, r8, r4
12465	eor	r9, r9, r5
12466	eor	r10, r10, r6
12467	eor	r11, r11, r7
12468#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12469#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12470	lsl	r4, r9, #8
12471	lsr	r4, r4, #24
12472#else
12473	uxtb	r4, r9, ror #16
12474#endif
12475#else
12476	ubfx	r4, r9, #16, #8
12477#endif
12478	lsr	r7, r8, #24
12479#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12480#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12481	lsl	lr, r10, #16
12482	lsr	lr, lr, #24
12483#else
12484	uxtb	lr, r10, ror #8
12485#endif
12486#else
12487	ubfx	lr, r10, #8, #8
12488#endif
12489#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12490#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12491	lsl	r2, r11, #24
12492	lsr	r2, r2, #24
12493#else
12494	uxtb	r2, r11
12495#endif
12496#else
12497	ubfx	r2, r11, #0, #8
12498#endif
12499	ldr	r4, [r0, r4, lsl #2]
12500	ldr	r7, [r0, r7, lsl #2]
12501	ldr	lr, [r0, lr, lsl #2]
12502	ldr	r2, [r0, r2, lsl #2]
12503#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12504#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12505	lsl	r5, r10, #8
12506	lsr	r5, r5, #24
12507#else
12508	uxtb	r5, r10, ror #16
12509#endif
12510#else
12511	ubfx	r5, r10, #16, #8
12512#endif
12513	eor	r4, r4, r7, ror #24
12514	lsr	r7, r9, #24
12515	eor	r4, r4, lr, ror #8
12516#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12517#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12518	lsl	lr, r11, #16
12519	lsr	lr, lr, #24
12520#else
12521	uxtb	lr, r11, ror #8
12522#endif
12523#else
12524	ubfx	lr, r11, #8, #8
12525#endif
12526	eor	r4, r4, r2, ror #16
12527#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12528#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12529	lsl	r2, r8, #24
12530	lsr	r2, r2, #24
12531#else
12532	uxtb	r2, r8
12533#endif
12534#else
12535	ubfx	r2, r8, #0, #8
12536#endif
12537	ldr	r5, [r0, r5, lsl #2]
12538	ldr	r7, [r0, r7, lsl #2]
12539	ldr	lr, [r0, lr, lsl #2]
12540	ldr	r2, [r0, r2, lsl #2]
12541#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12542#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12543	lsl	r6, r11, #8
12544	lsr	r6, r6, #24
12545#else
12546	uxtb	r6, r11, ror #16
12547#endif
12548#else
12549	ubfx	r6, r11, #16, #8
12550#endif
12551	eor	r5, r5, r7, ror #24
12552	lsr	r7, r10, #24
12553	eor	r5, r5, lr, ror #8
12554#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12555#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12556	lsl	lr, r8, #16
12557	lsr	lr, lr, #24
12558#else
12559	uxtb	lr, r8, ror #8
12560#endif
12561#else
12562	ubfx	lr, r8, #8, #8
12563#endif
12564	eor	r5, r5, r2, ror #16
12565#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12566#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12567	lsl	r2, r9, #24
12568	lsr	r2, r2, #24
12569#else
12570	uxtb	r2, r9
12571#endif
12572#else
12573	ubfx	r2, r9, #0, #8
12574#endif
12575	ldr	r6, [r0, r6, lsl #2]
12576	ldr	r7, [r0, r7, lsl #2]
12577	ldr	lr, [r0, lr, lsl #2]
12578	ldr	r2, [r0, r2, lsl #2]
12579#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12580#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12581	lsl	r10, r10, #24
12582	lsr	r10, r10, #24
12583#else
12584	uxtb	r10, r10
12585#endif
12586#else
12587	ubfx	r10, r10, #0, #8
12588#endif
12589	eor	r6, r6, r7, ror #24
12590#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12591#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12592	lsl	r7, r8, #8
12593	lsr	r7, r7, #24
12594#else
12595	uxtb	r7, r8, ror #16
12596#endif
12597#else
12598	ubfx	r7, r8, #16, #8
12599#endif
12600	eor	r6, r6, lr, ror #8
12601	lsr	lr, r11, #24
12602	eor	r6, r6, r2, ror #16
12603#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12604#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12605	lsl	r2, r9, #16
12606	lsr	r2, r2, #24
12607#else
12608	uxtb	r2, r9, ror #8
12609#endif
12610#else
12611	ubfx	r2, r9, #8, #8
12612#endif
12613	ldr	r10, [r0, r10, lsl #2]
12614	ldr	lr, [r0, lr, lsl #2]
12615	ldr	r7, [r0, r7, lsl #2]
12616	ldr	r2, [r0, r2, lsl #2]
12617	eor	lr, lr, r10, ror #24
12618	ldm	r3!, {r8, r9, r10, r11}
12619	eor	r7, r7, lr, ror #24
12620	eor	r7, r7, r2, ror #8
12621	#   XOR in Key Schedule
12622	eor	r4, r4, r8
12623	eor	r5, r5, r9
12624	eor	r6, r6, r10
12625	eor	r7, r7, r11
12626	subs	r1, r1, #1
12627	bne	L_AES_CBC_encrypt_block_nr_192
12628#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12629#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12630	lsl	r8, r5, #8
12631	lsr	r8, r8, #24
12632#else
12633	uxtb	r8, r5, ror #16
12634#endif
12635#else
12636	ubfx	r8, r5, #16, #8
12637#endif
12638	lsr	r11, r4, #24
12639#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12640#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12641	lsl	lr, r6, #16
12642	lsr	lr, lr, #24
12643#else
12644	uxtb	lr, r6, ror #8
12645#endif
12646#else
12647	ubfx	lr, r6, #8, #8
12648#endif
12649#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12650#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12651	lsl	r2, r7, #24
12652	lsr	r2, r2, #24
12653#else
12654	uxtb	r2, r7
12655#endif
12656#else
12657	ubfx	r2, r7, #0, #8
12658#endif
12659	ldr	r8, [r0, r8, lsl #2]
12660	ldr	r11, [r0, r11, lsl #2]
12661	ldr	lr, [r0, lr, lsl #2]
12662	ldr	r2, [r0, r2, lsl #2]
12663#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12664#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12665	lsl	r9, r6, #8
12666	lsr	r9, r9, #24
12667#else
12668	uxtb	r9, r6, ror #16
12669#endif
12670#else
12671	ubfx	r9, r6, #16, #8
12672#endif
12673	eor	r8, r8, r11, ror #24
12674	lsr	r11, r5, #24
12675	eor	r8, r8, lr, ror #8
12676#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12677#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12678	lsl	lr, r7, #16
12679	lsr	lr, lr, #24
12680#else
12681	uxtb	lr, r7, ror #8
12682#endif
12683#else
12684	ubfx	lr, r7, #8, #8
12685#endif
12686	eor	r8, r8, r2, ror #16
12687#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12688#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12689	lsl	r2, r4, #24
12690	lsr	r2, r2, #24
12691#else
12692	uxtb	r2, r4
12693#endif
12694#else
12695	ubfx	r2, r4, #0, #8
12696#endif
12697	ldr	r9, [r0, r9, lsl #2]
12698	ldr	r11, [r0, r11, lsl #2]
12699	ldr	lr, [r0, lr, lsl #2]
12700	ldr	r2, [r0, r2, lsl #2]
12701#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12702#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12703	lsl	r10, r7, #8
12704	lsr	r10, r10, #24
12705#else
12706	uxtb	r10, r7, ror #16
12707#endif
12708#else
12709	ubfx	r10, r7, #16, #8
12710#endif
12711	eor	r9, r9, r11, ror #24
12712	lsr	r11, r6, #24
12713	eor	r9, r9, lr, ror #8
12714#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12715#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12716	lsl	lr, r4, #16
12717	lsr	lr, lr, #24
12718#else
12719	uxtb	lr, r4, ror #8
12720#endif
12721#else
12722	ubfx	lr, r4, #8, #8
12723#endif
12724	eor	r9, r9, r2, ror #16
12725#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12726#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12727	lsl	r2, r5, #24
12728	lsr	r2, r2, #24
12729#else
12730	uxtb	r2, r5
12731#endif
12732#else
12733	ubfx	r2, r5, #0, #8
12734#endif
12735	ldr	r10, [r0, r10, lsl #2]
12736	ldr	r11, [r0, r11, lsl #2]
12737	ldr	lr, [r0, lr, lsl #2]
12738	ldr	r2, [r0, r2, lsl #2]
12739#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12740#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12741	lsl	r6, r6, #24
12742	lsr	r6, r6, #24
12743#else
12744	uxtb	r6, r6
12745#endif
12746#else
12747	ubfx	r6, r6, #0, #8
12748#endif
12749	eor	r10, r10, r11, ror #24
12750#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12751#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12752	lsl	r11, r4, #8
12753	lsr	r11, r11, #24
12754#else
12755	uxtb	r11, r4, ror #16
12756#endif
12757#else
12758	ubfx	r11, r4, #16, #8
12759#endif
12760	eor	r10, r10, lr, ror #8
12761	lsr	lr, r7, #24
12762	eor	r10, r10, r2, ror #16
12763#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12764#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12765	lsl	r2, r5, #16
12766	lsr	r2, r2, #24
12767#else
12768	uxtb	r2, r5, ror #8
12769#endif
12770#else
12771	ubfx	r2, r5, #8, #8
12772#endif
12773	ldr	r6, [r0, r6, lsl #2]
12774	ldr	lr, [r0, lr, lsl #2]
12775	ldr	r11, [r0, r11, lsl #2]
12776	ldr	r2, [r0, r2, lsl #2]
12777	eor	lr, lr, r6, ror #24
12778	ldm	r3!, {r4, r5, r6, r7}
12779	eor	r11, r11, lr, ror #24
12780	eor	r11, r11, r2, ror #8
12781	#   XOR in Key Schedule
12782	eor	r8, r8, r4
12783	eor	r9, r9, r5
12784	eor	r10, r10, r6
12785	eor	r11, r11, r7
12786#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12787#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12788	lsl	r4, r11, #24
12789	lsr	r4, r4, #24
12790#else
12791	uxtb	r4, r11
12792#endif
12793#else
12794	ubfx	r4, r11, #0, #8
12795#endif
12796#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12797#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12798	lsl	r7, r10, #16
12799	lsr	r7, r7, #24
12800#else
12801	uxtb	r7, r10, ror #8
12802#endif
12803#else
12804	ubfx	r7, r10, #8, #8
12805#endif
12806#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12807#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12808	lsl	lr, r9, #8
12809	lsr	lr, lr, #24
12810#else
12811	uxtb	lr, r9, ror #16
12812#endif
12813#else
12814	ubfx	lr, r9, #16, #8
12815#endif
12816	lsr	r2, r8, #24
12817	ldrb	r4, [r0, r4, lsl #2]
12818	ldrb	r7, [r0, r7, lsl #2]
12819	ldrb	lr, [r0, lr, lsl #2]
12820	ldrb	r2, [r0, r2, lsl #2]
12821#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12822#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12823	lsl	r5, r8, #24
12824	lsr	r5, r5, #24
12825#else
12826	uxtb	r5, r8
12827#endif
12828#else
12829	ubfx	r5, r8, #0, #8
12830#endif
12831	eor	r4, r4, r7, lsl #8
12832#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12833#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12834	lsl	r7, r11, #16
12835	lsr	r7, r7, #24
12836#else
12837	uxtb	r7, r11, ror #8
12838#endif
12839#else
12840	ubfx	r7, r11, #8, #8
12841#endif
12842	eor	r4, r4, lr, lsl #16
12843#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12844#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12845	lsl	lr, r10, #8
12846	lsr	lr, lr, #24
12847#else
12848	uxtb	lr, r10, ror #16
12849#endif
12850#else
12851	ubfx	lr, r10, #16, #8
12852#endif
12853	eor	r4, r4, r2, lsl #24
12854	lsr	r2, r9, #24
12855	ldrb	r5, [r0, r5, lsl #2]
12856	ldrb	r7, [r0, r7, lsl #2]
12857	ldrb	lr, [r0, lr, lsl #2]
12858	ldrb	r2, [r0, r2, lsl #2]
12859#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12860#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12861	lsl	r6, r9, #24
12862	lsr	r6, r6, #24
12863#else
12864	uxtb	r6, r9
12865#endif
12866#else
12867	ubfx	r6, r9, #0, #8
12868#endif
12869	eor	r5, r5, r7, lsl #8
12870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12871#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12872	lsl	r7, r8, #16
12873	lsr	r7, r7, #24
12874#else
12875	uxtb	r7, r8, ror #8
12876#endif
12877#else
12878	ubfx	r7, r8, #8, #8
12879#endif
12880	eor	r5, r5, lr, lsl #16
12881#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12882#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12883	lsl	lr, r11, #8
12884	lsr	lr, lr, #24
12885#else
12886	uxtb	lr, r11, ror #16
12887#endif
12888#else
12889	ubfx	lr, r11, #16, #8
12890#endif
12891	eor	r5, r5, r2, lsl #24
12892	lsr	r2, r10, #24
12893	ldrb	r6, [r0, r6, lsl #2]
12894	ldrb	r7, [r0, r7, lsl #2]
12895	ldrb	lr, [r0, lr, lsl #2]
12896	ldrb	r2, [r0, r2, lsl #2]
12897	lsr	r11, r11, #24
12898	eor	r6, r6, r7, lsl #8
12899#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12900#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12901	lsl	r7, r10, #24
12902	lsr	r7, r7, #24
12903#else
12904	uxtb	r7, r10
12905#endif
12906#else
12907	ubfx	r7, r10, #0, #8
12908#endif
12909	eor	r6, r6, lr, lsl #16
12910#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12911#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12912	lsl	lr, r9, #16
12913	lsr	lr, lr, #24
12914#else
12915	uxtb	lr, r9, ror #8
12916#endif
12917#else
12918	ubfx	lr, r9, #8, #8
12919#endif
12920	eor	r6, r6, r2, lsl #24
12921#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12922#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12923	lsl	r2, r8, #8
12924	lsr	r2, r2, #24
12925#else
12926	uxtb	r2, r8, ror #16
12927#endif
12928#else
12929	ubfx	r2, r8, #16, #8
12930#endif
12931	ldrb	r11, [r0, r11, lsl #2]
12932	ldrb	r7, [r0, r7, lsl #2]
12933	ldrb	lr, [r0, lr, lsl #2]
12934	ldrb	r2, [r0, r2, lsl #2]
12935	eor	lr, lr, r11, lsl #16
12936	ldm	r3, {r8, r9, r10, r11}
12937	eor	r7, r7, lr, lsl #8
12938	eor	r7, r7, r2, lsl #16
12939	#   XOR in Key Schedule
12940	eor	r4, r4, r8
12941	eor	r5, r5, r9
12942	eor	r6, r6, r10
12943	eor	r7, r7, r11
12944#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
12945	pop	{r1, r2, lr}
12946	ldr	r3, [sp]
12947#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12948	eor	r8, r4, r4, ror #16
12949	eor	r9, r5, r5, ror #16
12950	eor	r10, r6, r6, ror #16
12951	eor	r11, r7, r7, ror #16
12952	bic	r8, r8, #0xff0000
12953	bic	r9, r9, #0xff0000
12954	bic	r10, r10, #0xff0000
12955	bic	r11, r11, #0xff0000
12956	ror	r4, r4, #8
12957	ror	r5, r5, #8
12958	ror	r6, r6, #8
12959	ror	r7, r7, #8
12960	eor	r4, r4, r8, lsr #8
12961	eor	r5, r5, r9, lsr #8
12962	eor	r6, r6, r10, lsr #8
12963	eor	r7, r7, r11, lsr #8
12964#else
12965	rev	r4, r4
12966	rev	r5, r5
12967	rev	r6, r6
12968	rev	r7, r7
12969#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
12970	str	r4, [r1]
12971	str	r5, [r1, #4]
12972	str	r6, [r1, #8]
12973	str	r7, [r1, #12]
12974	subs	r2, r2, #16
12975	add	lr, lr, #16
12976	add	r1, r1, #16
12977	bne	L_AES_CBC_encrypt_loop_block_192
12978	b	L_AES_CBC_encrypt_end
12979L_AES_CBC_encrypt_start_block_128:
12980L_AES_CBC_encrypt_loop_block_128:
12981	ldr	r8, [lr]
12982	ldr	r9, [lr, #4]
12983	ldr	r10, [lr, #8]
12984	ldr	r11, [lr, #12]
12985	eor	r4, r4, r8
12986	eor	r5, r5, r9
12987	eor	r6, r6, r10
12988	eor	r7, r7, r11
12989	push	{r1, r2, lr}
12990#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12991	eor	r8, r4, r4, ror #16
12992	eor	r9, r5, r5, ror #16
12993	eor	r10, r6, r6, ror #16
12994	eor	r11, r7, r7, ror #16
12995	bic	r8, r8, #0xff0000
12996	bic	r9, r9, #0xff0000
12997	bic	r10, r10, #0xff0000
12998	bic	r11, r11, #0xff0000
12999	ror	r4, r4, #8
13000	ror	r5, r5, #8
13001	ror	r6, r6, #8
13002	ror	r7, r7, #8
13003	eor	r4, r4, r8, lsr #8
13004	eor	r5, r5, r9, lsr #8
13005	eor	r6, r6, r10, lsr #8
13006	eor	r7, r7, r11, lsr #8
13007#else
13008	rev	r4, r4
13009	rev	r5, r5
13010	rev	r6, r6
13011	rev	r7, r7
13012#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
13013	ldm	r3!, {r8, r9, r10, r11}
13014	# Round: 0 - XOR in key schedule
13015	eor	r4, r4, r8
13016	eor	r5, r5, r9
13017	eor	r6, r6, r10
13018	eor	r7, r7, r11
13019	mov	r1, #4
13020#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
13021	bl	AES_encrypt_block
13022#else
13023L_AES_CBC_encrypt_block_nr_128:
13024#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13025#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13026	lsl	r8, r5, #8
13027	lsr	r8, r8, #24
13028#else
13029	uxtb	r8, r5, ror #16
13030#endif
13031#else
13032	ubfx	r8, r5, #16, #8
13033#endif
13034	lsr	r11, r4, #24
13035#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13036#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13037	lsl	lr, r6, #16
13038	lsr	lr, lr, #24
13039#else
13040	uxtb	lr, r6, ror #8
13041#endif
13042#else
13043	ubfx	lr, r6, #8, #8
13044#endif
13045#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13046#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13047	lsl	r2, r7, #24
13048	lsr	r2, r2, #24
13049#else
13050	uxtb	r2, r7
13051#endif
13052#else
13053	ubfx	r2, r7, #0, #8
13054#endif
13055	ldr	r8, [r0, r8, lsl #2]
13056	ldr	r11, [r0, r11, lsl #2]
13057	ldr	lr, [r0, lr, lsl #2]
13058	ldr	r2, [r0, r2, lsl #2]
13059#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13060#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13061	lsl	r9, r6, #8
13062	lsr	r9, r9, #24
13063#else
13064	uxtb	r9, r6, ror #16
13065#endif
13066#else
13067	ubfx	r9, r6, #16, #8
13068#endif
13069	eor	r8, r8, r11, ror #24
13070	lsr	r11, r5, #24
13071	eor	r8, r8, lr, ror #8
13072#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13073#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13074	lsl	lr, r7, #16
13075	lsr	lr, lr, #24
13076#else
13077	uxtb	lr, r7, ror #8
13078#endif
13079#else
13080	ubfx	lr, r7, #8, #8
13081#endif
13082	eor	r8, r8, r2, ror #16
13083#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13084#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13085	lsl	r2, r4, #24
13086	lsr	r2, r2, #24
13087#else
13088	uxtb	r2, r4
13089#endif
13090#else
13091	ubfx	r2, r4, #0, #8
13092#endif
13093	ldr	r9, [r0, r9, lsl #2]
13094	ldr	r11, [r0, r11, lsl #2]
13095	ldr	lr, [r0, lr, lsl #2]
13096	ldr	r2, [r0, r2, lsl #2]
13097#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13098#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13099	lsl	r10, r7, #8
13100	lsr	r10, r10, #24
13101#else
13102	uxtb	r10, r7, ror #16
13103#endif
13104#else
13105	ubfx	r10, r7, #16, #8
13106#endif
13107	eor	r9, r9, r11, ror #24
13108	lsr	r11, r6, #24
13109	eor	r9, r9, lr, ror #8
13110#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13111#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13112	lsl	lr, r4, #16
13113	lsr	lr, lr, #24
13114#else
13115	uxtb	lr, r4, ror #8
13116#endif
13117#else
13118	ubfx	lr, r4, #8, #8
13119#endif
13120	eor	r9, r9, r2, ror #16
13121#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13122#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13123	lsl	r2, r5, #24
13124	lsr	r2, r2, #24
13125#else
13126	uxtb	r2, r5
13127#endif
13128#else
13129	ubfx	r2, r5, #0, #8
13130#endif
13131	ldr	r10, [r0, r10, lsl #2]
13132	ldr	r11, [r0, r11, lsl #2]
13133	ldr	lr, [r0, lr, lsl #2]
13134	ldr	r2, [r0, r2, lsl #2]
13135#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13136#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13137	lsl	r6, r6, #24
13138	lsr	r6, r6, #24
13139#else
13140	uxtb	r6, r6
13141#endif
13142#else
13143	ubfx	r6, r6, #0, #8
13144#endif
13145	eor	r10, r10, r11, ror #24
13146#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13147#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13148	lsl	r11, r4, #8
13149	lsr	r11, r11, #24
13150#else
13151	uxtb	r11, r4, ror #16
13152#endif
13153#else
13154	ubfx	r11, r4, #16, #8
13155#endif
13156	eor	r10, r10, lr, ror #8
13157	lsr	lr, r7, #24
13158	eor	r10, r10, r2, ror #16
13159#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13160#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13161	lsl	r2, r5, #16
13162	lsr	r2, r2, #24
13163#else
13164	uxtb	r2, r5, ror #8
13165#endif
13166#else
13167	ubfx	r2, r5, #8, #8
13168#endif
13169	ldr	r6, [r0, r6, lsl #2]
13170	ldr	lr, [r0, lr, lsl #2]
13171	ldr	r11, [r0, r11, lsl #2]
13172	ldr	r2, [r0, r2, lsl #2]
13173	eor	lr, lr, r6, ror #24
13174	ldm	r3!, {r4, r5, r6, r7}
13175	eor	r11, r11, lr, ror #24
13176	eor	r11, r11, r2, ror #8
13177	#   XOR in Key Schedule
13178	eor	r8, r8, r4
13179	eor	r9, r9, r5
13180	eor	r10, r10, r6
13181	eor	r11, r11, r7
13182#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13183#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13184	lsl	r4, r9, #8
13185	lsr	r4, r4, #24
13186#else
13187	uxtb	r4, r9, ror #16
13188#endif
13189#else
13190	ubfx	r4, r9, #16, #8
13191#endif
13192	lsr	r7, r8, #24
13193#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13194#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13195	lsl	lr, r10, #16
13196	lsr	lr, lr, #24
13197#else
13198	uxtb	lr, r10, ror #8
13199#endif
13200#else
13201	ubfx	lr, r10, #8, #8
13202#endif
13203#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13204#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13205	lsl	r2, r11, #24
13206	lsr	r2, r2, #24
13207#else
13208	uxtb	r2, r11
13209#endif
13210#else
13211	ubfx	r2, r11, #0, #8
13212#endif
13213	ldr	r4, [r0, r4, lsl #2]
13214	ldr	r7, [r0, r7, lsl #2]
13215	ldr	lr, [r0, lr, lsl #2]
13216	ldr	r2, [r0, r2, lsl #2]
13217#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13218#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13219	lsl	r5, r10, #8
13220	lsr	r5, r5, #24
13221#else
13222	uxtb	r5, r10, ror #16
13223#endif
13224#else
13225	ubfx	r5, r10, #16, #8
13226#endif
13227	eor	r4, r4, r7, ror #24
13228	lsr	r7, r9, #24
13229	eor	r4, r4, lr, ror #8
13230#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13231#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13232	lsl	lr, r11, #16
13233	lsr	lr, lr, #24
13234#else
13235	uxtb	lr, r11, ror #8
13236#endif
13237#else
13238	ubfx	lr, r11, #8, #8
13239#endif
13240	eor	r4, r4, r2, ror #16
13241#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13242#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13243	lsl	r2, r8, #24
13244	lsr	r2, r2, #24
13245#else
13246	uxtb	r2, r8
13247#endif
13248#else
13249	ubfx	r2, r8, #0, #8
13250#endif
13251	ldr	r5, [r0, r5, lsl #2]
13252	ldr	r7, [r0, r7, lsl #2]
13253	ldr	lr, [r0, lr, lsl #2]
13254	ldr	r2, [r0, r2, lsl #2]
13255#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13256#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13257	lsl	r6, r11, #8
13258	lsr	r6, r6, #24
13259#else
13260	uxtb	r6, r11, ror #16
13261#endif
13262#else
13263	ubfx	r6, r11, #16, #8
13264#endif
13265	eor	r5, r5, r7, ror #24
13266	lsr	r7, r10, #24
13267	eor	r5, r5, lr, ror #8
13268#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13269#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13270	lsl	lr, r8, #16
13271	lsr	lr, lr, #24
13272#else
13273	uxtb	lr, r8, ror #8
13274#endif
13275#else
13276	ubfx	lr, r8, #8, #8
13277#endif
13278	eor	r5, r5, r2, ror #16
13279#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13280#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13281	lsl	r2, r9, #24
13282	lsr	r2, r2, #24
13283#else
13284	uxtb	r2, r9
13285#endif
13286#else
13287	ubfx	r2, r9, #0, #8
13288#endif
13289	ldr	r6, [r0, r6, lsl #2]
13290	ldr	r7, [r0, r7, lsl #2]
13291	ldr	lr, [r0, lr, lsl #2]
13292	ldr	r2, [r0, r2, lsl #2]
13293#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13294#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13295	lsl	r10, r10, #24
13296	lsr	r10, r10, #24
13297#else
13298	uxtb	r10, r10
13299#endif
13300#else
13301	ubfx	r10, r10, #0, #8
13302#endif
13303	eor	r6, r6, r7, ror #24
13304#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13305#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13306	lsl	r7, r8, #8
13307	lsr	r7, r7, #24
13308#else
13309	uxtb	r7, r8, ror #16
13310#endif
13311#else
13312	ubfx	r7, r8, #16, #8
13313#endif
13314	eor	r6, r6, lr, ror #8
13315	lsr	lr, r11, #24
13316	eor	r6, r6, r2, ror #16
13317#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13318#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13319	lsl	r2, r9, #16
13320	lsr	r2, r2, #24
13321#else
13322	uxtb	r2, r9, ror #8
13323#endif
13324#else
13325	ubfx	r2, r9, #8, #8
13326#endif
13327	ldr	r10, [r0, r10, lsl #2]
13328	ldr	lr, [r0, lr, lsl #2]
13329	ldr	r7, [r0, r7, lsl #2]
13330	ldr	r2, [r0, r2, lsl #2]
13331	eor	lr, lr, r10, ror #24
13332	ldm	r3!, {r8, r9, r10, r11}
13333	eor	r7, r7, lr, ror #24
13334	eor	r7, r7, r2, ror #8
13335	#   XOR in Key Schedule
13336	eor	r4, r4, r8
13337	eor	r5, r5, r9
13338	eor	r6, r6, r10
13339	eor	r7, r7, r11
13340	subs	r1, r1, #1
13341	bne	L_AES_CBC_encrypt_block_nr_128
13342#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13343#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13344	lsl	r8, r5, #8
13345	lsr	r8, r8, #24
13346#else
13347	uxtb	r8, r5, ror #16
13348#endif
13349#else
13350	ubfx	r8, r5, #16, #8
13351#endif
13352	lsr	r11, r4, #24
13353#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13354#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13355	lsl	lr, r6, #16
13356	lsr	lr, lr, #24
13357#else
13358	uxtb	lr, r6, ror #8
13359#endif
13360#else
13361	ubfx	lr, r6, #8, #8
13362#endif
13363#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13364#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13365	lsl	r2, r7, #24
13366	lsr	r2, r2, #24
13367#else
13368	uxtb	r2, r7
13369#endif
13370#else
13371	ubfx	r2, r7, #0, #8
13372#endif
13373	ldr	r8, [r0, r8, lsl #2]
13374	ldr	r11, [r0, r11, lsl #2]
13375	ldr	lr, [r0, lr, lsl #2]
13376	ldr	r2, [r0, r2, lsl #2]
13377#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13378#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13379	lsl	r9, r6, #8
13380	lsr	r9, r9, #24
13381#else
13382	uxtb	r9, r6, ror #16
13383#endif
13384#else
13385	ubfx	r9, r6, #16, #8
13386#endif
13387	eor	r8, r8, r11, ror #24
13388	lsr	r11, r5, #24
13389	eor	r8, r8, lr, ror #8
13390#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13391#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13392	lsl	lr, r7, #16
13393	lsr	lr, lr, #24
13394#else
13395	uxtb	lr, r7, ror #8
13396#endif
13397#else
13398	ubfx	lr, r7, #8, #8
13399#endif
13400	eor	r8, r8, r2, ror #16
13401#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13402#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13403	lsl	r2, r4, #24
13404	lsr	r2, r2, #24
13405#else
13406	uxtb	r2, r4
13407#endif
13408#else
13409	ubfx	r2, r4, #0, #8
13410#endif
13411	ldr	r9, [r0, r9, lsl #2]
13412	ldr	r11, [r0, r11, lsl #2]
13413	ldr	lr, [r0, lr, lsl #2]
13414	ldr	r2, [r0, r2, lsl #2]
13415#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13416#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13417	lsl	r10, r7, #8
13418	lsr	r10, r10, #24
13419#else
13420	uxtb	r10, r7, ror #16
13421#endif
13422#else
13423	ubfx	r10, r7, #16, #8
13424#endif
13425	eor	r9, r9, r11, ror #24
13426	lsr	r11, r6, #24
13427	eor	r9, r9, lr, ror #8
13428#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13429#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13430	lsl	lr, r4, #16
13431	lsr	lr, lr, #24
13432#else
13433	uxtb	lr, r4, ror #8
13434#endif
13435#else
13436	ubfx	lr, r4, #8, #8
13437#endif
13438	eor	r9, r9, r2, ror #16
13439#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13440#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13441	lsl	r2, r5, #24
13442	lsr	r2, r2, #24
13443#else
13444	uxtb	r2, r5
13445#endif
13446#else
13447	ubfx	r2, r5, #0, #8
13448#endif
13449	ldr	r10, [r0, r10, lsl #2]
13450	ldr	r11, [r0, r11, lsl #2]
13451	ldr	lr, [r0, lr, lsl #2]
13452	ldr	r2, [r0, r2, lsl #2]
13453#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13454#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13455	lsl	r6, r6, #24
13456	lsr	r6, r6, #24
13457#else
13458	uxtb	r6, r6
13459#endif
13460#else
13461	ubfx	r6, r6, #0, #8
13462#endif
13463	eor	r10, r10, r11, ror #24
13464#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13465#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13466	lsl	r11, r4, #8
13467	lsr	r11, r11, #24
13468#else
13469	uxtb	r11, r4, ror #16
13470#endif
13471#else
13472	ubfx	r11, r4, #16, #8
13473#endif
13474	eor	r10, r10, lr, ror #8
13475	lsr	lr, r7, #24
13476	eor	r10, r10, r2, ror #16
13477#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13478#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13479	lsl	r2, r5, #16
13480	lsr	r2, r2, #24
13481#else
13482	uxtb	r2, r5, ror #8
13483#endif
13484#else
13485	ubfx	r2, r5, #8, #8
13486#endif
13487	ldr	r6, [r0, r6, lsl #2]
13488	ldr	lr, [r0, lr, lsl #2]
13489	ldr	r11, [r0, r11, lsl #2]
13490	ldr	r2, [r0, r2, lsl #2]
13491	eor	lr, lr, r6, ror #24
13492	ldm	r3!, {r4, r5, r6, r7}
13493	eor	r11, r11, lr, ror #24
13494	eor	r11, r11, r2, ror #8
13495	#   XOR in Key Schedule
13496	eor	r8, r8, r4
13497	eor	r9, r9, r5
13498	eor	r10, r10, r6
13499	eor	r11, r11, r7
13500#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13501#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13502	lsl	r4, r11, #24
13503	lsr	r4, r4, #24
13504#else
13505	uxtb	r4, r11
13506#endif
13507#else
13508	ubfx	r4, r11, #0, #8
13509#endif
13510#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13511#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13512	lsl	r7, r10, #16
13513	lsr	r7, r7, #24
13514#else
13515	uxtb	r7, r10, ror #8
13516#endif
13517#else
13518	ubfx	r7, r10, #8, #8
13519#endif
13520#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13521#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13522	lsl	lr, r9, #8
13523	lsr	lr, lr, #24
13524#else
13525	uxtb	lr, r9, ror #16
13526#endif
13527#else
13528	ubfx	lr, r9, #16, #8
13529#endif
13530	lsr	r2, r8, #24
13531	ldrb	r4, [r0, r4, lsl #2]
13532	ldrb	r7, [r0, r7, lsl #2]
13533	ldrb	lr, [r0, lr, lsl #2]
13534	ldrb	r2, [r0, r2, lsl #2]
13535#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13536#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13537	lsl	r5, r8, #24
13538	lsr	r5, r5, #24
13539#else
13540	uxtb	r5, r8
13541#endif
13542#else
13543	ubfx	r5, r8, #0, #8
13544#endif
13545	eor	r4, r4, r7, lsl #8
13546#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13547#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13548	lsl	r7, r11, #16
13549	lsr	r7, r7, #24
13550#else
13551	uxtb	r7, r11, ror #8
13552#endif
13553#else
13554	ubfx	r7, r11, #8, #8
13555#endif
13556	eor	r4, r4, lr, lsl #16
13557#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13558#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13559	lsl	lr, r10, #8
13560	lsr	lr, lr, #24
13561#else
13562	uxtb	lr, r10, ror #16
13563#endif
13564#else
13565	ubfx	lr, r10, #16, #8
13566#endif
13567	eor	r4, r4, r2, lsl #24
13568	lsr	r2, r9, #24
13569	ldrb	r5, [r0, r5, lsl #2]
13570	ldrb	r7, [r0, r7, lsl #2]
13571	ldrb	lr, [r0, lr, lsl #2]
13572	ldrb	r2, [r0, r2, lsl #2]
13573#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13574#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13575	lsl	r6, r9, #24
13576	lsr	r6, r6, #24
13577#else
13578	uxtb	r6, r9
13579#endif
13580#else
13581	ubfx	r6, r9, #0, #8
13582#endif
13583	eor	r5, r5, r7, lsl #8
13584#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13585#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13586	lsl	r7, r8, #16
13587	lsr	r7, r7, #24
13588#else
13589	uxtb	r7, r8, ror #8
13590#endif
13591#else
13592	ubfx	r7, r8, #8, #8
13593#endif
13594	eor	r5, r5, lr, lsl #16
13595#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13596#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13597	lsl	lr, r11, #8
13598	lsr	lr, lr, #24
13599#else
13600	uxtb	lr, r11, ror #16
13601#endif
13602#else
13603	ubfx	lr, r11, #16, #8
13604#endif
13605	eor	r5, r5, r2, lsl #24
13606	lsr	r2, r10, #24
13607	ldrb	r6, [r0, r6, lsl #2]
13608	ldrb	r7, [r0, r7, lsl #2]
13609	ldrb	lr, [r0, lr, lsl #2]
13610	ldrb	r2, [r0, r2, lsl #2]
13611	lsr	r11, r11, #24
13612	eor	r6, r6, r7, lsl #8
13613#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13614#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13615	lsl	r7, r10, #24
13616	lsr	r7, r7, #24
13617#else
13618	uxtb	r7, r10
13619#endif
13620#else
13621	ubfx	r7, r10, #0, #8
13622#endif
13623	eor	r6, r6, lr, lsl #16
13624#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13625#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13626	lsl	lr, r9, #16
13627	lsr	lr, lr, #24
13628#else
13629	uxtb	lr, r9, ror #8
13630#endif
13631#else
13632	ubfx	lr, r9, #8, #8
13633#endif
13634	eor	r6, r6, r2, lsl #24
13635#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13636#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13637	lsl	r2, r8, #8
13638	lsr	r2, r2, #24
13639#else
13640	uxtb	r2, r8, ror #16
13641#endif
13642#else
13643	ubfx	r2, r8, #16, #8
13644#endif
13645	ldrb	r11, [r0, r11, lsl #2]
13646	ldrb	r7, [r0, r7, lsl #2]
13647	ldrb	lr, [r0, lr, lsl #2]
13648	ldrb	r2, [r0, r2, lsl #2]
13649	eor	lr, lr, r11, lsl #16
13650	ldm	r3, {r8, r9, r10, r11}
13651	eor	r7, r7, lr, lsl #8
13652	eor	r7, r7, r2, lsl #16
13653	#   XOR in Key Schedule
13654	eor	r4, r4, r8
13655	eor	r5, r5, r9
13656	eor	r6, r6, r10
13657	eor	r7, r7, r11
13658#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
13659	pop	{r1, r2, lr}
13660	ldr	r3, [sp]
13661#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13662	eor	r8, r4, r4, ror #16
13663	eor	r9, r5, r5, ror #16
13664	eor	r10, r6, r6, ror #16
13665	eor	r11, r7, r7, ror #16
13666	bic	r8, r8, #0xff0000
13667	bic	r9, r9, #0xff0000
13668	bic	r10, r10, #0xff0000
13669	bic	r11, r11, #0xff0000
13670	ror	r4, r4, #8
13671	ror	r5, r5, #8
13672	ror	r6, r6, #8
13673	ror	r7, r7, #8
13674	eor	r4, r4, r8, lsr #8
13675	eor	r5, r5, r9, lsr #8
13676	eor	r6, r6, r10, lsr #8
13677	eor	r7, r7, r11, lsr #8
13678#else
13679	rev	r4, r4
13680	rev	r5, r5
13681	rev	r6, r6
13682	rev	r7, r7
13683#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
13684	str	r4, [r1]
13685	str	r5, [r1, #4]
13686	str	r6, [r1, #8]
13687	str	r7, [r1, #12]
13688	subs	r2, r2, #16
13689	add	lr, lr, #16
13690	add	r1, r1, #16
13691	bne	L_AES_CBC_encrypt_loop_block_128
13692L_AES_CBC_encrypt_end:
13693	pop	{r3, r9}
13694	stm	r9, {r4, r5, r6, r7}
13695	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
13696	.size	AES_CBC_encrypt,.-AES_CBC_encrypt
13697#endif /* HAVE_AES_CBC */
13698#ifdef WOLFSSL_AES_COUNTER
13699#ifndef __APPLE__
13700	.text
13701	.type	L_AES_ARM32_te_ctr, %object
13702	.size	L_AES_ARM32_te_ctr, 12
13703#else
13704	.section	__DATA,__data
13705#endif /* __APPLE__ */
13706	# 8-byte aligned, 64-bit aligned
13707#ifndef __APPLE__
13708	.align	3
13709#else
13710	.p2align	3
13711#endif /* __APPLE__ */
13712L_AES_ARM32_te_ctr:
13713	.long	L_AES_ARM32_te_data
13714	.text
13715	.align	4
13716	.globl	AES_CTR_encrypt
13717	.type	AES_CTR_encrypt, %function
13718AES_CTR_encrypt:
13719	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
13720	ldr	r12, [sp, #36]
13721	ldr	r8, [sp, #40]
13722	mov	lr, r0
13723	adr	r0, L_AES_ARM32_te_ctr
13724	ldr	r0, [r0]
13725	ldm	r8, {r4, r5, r6, r7}
13726#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13727	eor	r10, r4, r4, ror #16
13728	eor	r11, r5, r5, ror #16
13729	bic	r10, r10, #0xff0000
13730	bic	r11, r11, #0xff0000
13731	ror	r4, r4, #8
13732	ror	r5, r5, #8
13733	eor	r4, r4, r10, lsr #8
13734	eor	r5, r5, r11, lsr #8
13735	eor	r10, r6, r6, ror #16
13736	eor	r11, r7, r7, ror #16
13737	bic	r10, r10, #0xff0000
13738	bic	r11, r11, #0xff0000
13739	ror	r6, r6, #8
13740	ror	r7, r7, #8
13741	eor	r6, r6, r10, lsr #8
13742	eor	r7, r7, r11, lsr #8
13743#else
13744	rev	r4, r4
13745	rev	r5, r5
13746	rev	r6, r6
13747	rev	r7, r7
13748#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
13749	stm	r8, {r4, r5, r6, r7}
13750	push	{r3, r8}
13751	cmp	r12, #10
13752	beq	L_AES_CTR_encrypt_start_block_128
13753	cmp	r12, #12
13754	beq	L_AES_CTR_encrypt_start_block_192
13755L_AES_CTR_encrypt_loop_block_256:
13756	push	{r1, r2, lr}
13757	ldr	lr, [sp, #16]
13758	adds	r11, r7, #1
13759	adcs	r10, r6, #0
13760	adcs	r9, r5, #0
13761	adc	r8, r4, #0
13762	stm	lr, {r8, r9, r10, r11}
13763	ldm	r3!, {r8, r9, r10, r11}
13764	# Round: 0 - XOR in key schedule
13765	eor	r4, r4, r8
13766	eor	r5, r5, r9
13767	eor	r6, r6, r10
13768	eor	r7, r7, r11
13769	mov	r1, #6
13770#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
13771	bl	AES_encrypt_block
13772#else
13773L_AES_CTR_encrypt_block_nr_256:
13774#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13775#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13776	lsl	r8, r5, #8
13777	lsr	r8, r8, #24
13778#else
13779	uxtb	r8, r5, ror #16
13780#endif
13781#else
13782	ubfx	r8, r5, #16, #8
13783#endif
13784	lsr	r11, r4, #24
13785#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13786#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13787	lsl	lr, r6, #16
13788	lsr	lr, lr, #24
13789#else
13790	uxtb	lr, r6, ror #8
13791#endif
13792#else
13793	ubfx	lr, r6, #8, #8
13794#endif
13795#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13796#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13797	lsl	r2, r7, #24
13798	lsr	r2, r2, #24
13799#else
13800	uxtb	r2, r7
13801#endif
13802#else
13803	ubfx	r2, r7, #0, #8
13804#endif
13805	ldr	r8, [r0, r8, lsl #2]
13806	ldr	r11, [r0, r11, lsl #2]
13807	ldr	lr, [r0, lr, lsl #2]
13808	ldr	r2, [r0, r2, lsl #2]
13809#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13810#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13811	lsl	r9, r6, #8
13812	lsr	r9, r9, #24
13813#else
13814	uxtb	r9, r6, ror #16
13815#endif
13816#else
13817	ubfx	r9, r6, #16, #8
13818#endif
13819	eor	r8, r8, r11, ror #24
13820	lsr	r11, r5, #24
13821	eor	r8, r8, lr, ror #8
13822#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13823#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13824	lsl	lr, r7, #16
13825	lsr	lr, lr, #24
13826#else
13827	uxtb	lr, r7, ror #8
13828#endif
13829#else
13830	ubfx	lr, r7, #8, #8
13831#endif
13832	eor	r8, r8, r2, ror #16
13833#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13834#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13835	lsl	r2, r4, #24
13836	lsr	r2, r2, #24
13837#else
13838	uxtb	r2, r4
13839#endif
13840#else
13841	ubfx	r2, r4, #0, #8
13842#endif
13843	ldr	r9, [r0, r9, lsl #2]
13844	ldr	r11, [r0, r11, lsl #2]
13845	ldr	lr, [r0, lr, lsl #2]
13846	ldr	r2, [r0, r2, lsl #2]
13847#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13848#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13849	lsl	r10, r7, #8
13850	lsr	r10, r10, #24
13851#else
13852	uxtb	r10, r7, ror #16
13853#endif
13854#else
13855	ubfx	r10, r7, #16, #8
13856#endif
13857	eor	r9, r9, r11, ror #24
13858	lsr	r11, r6, #24
13859	eor	r9, r9, lr, ror #8
13860#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13861#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13862	lsl	lr, r4, #16
13863	lsr	lr, lr, #24
13864#else
13865	uxtb	lr, r4, ror #8
13866#endif
13867#else
13868	ubfx	lr, r4, #8, #8
13869#endif
13870	eor	r9, r9, r2, ror #16
13871#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13872#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13873	lsl	r2, r5, #24
13874	lsr	r2, r2, #24
13875#else
13876	uxtb	r2, r5
13877#endif
13878#else
13879	ubfx	r2, r5, #0, #8
13880#endif
13881	ldr	r10, [r0, r10, lsl #2]
13882	ldr	r11, [r0, r11, lsl #2]
13883	ldr	lr, [r0, lr, lsl #2]
13884	ldr	r2, [r0, r2, lsl #2]
13885#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13886#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13887	lsl	r6, r6, #24
13888	lsr	r6, r6, #24
13889#else
13890	uxtb	r6, r6
13891#endif
13892#else
13893	ubfx	r6, r6, #0, #8
13894#endif
13895	eor	r10, r10, r11, ror #24
13896#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13897#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13898	lsl	r11, r4, #8
13899	lsr	r11, r11, #24
13900#else
13901	uxtb	r11, r4, ror #16
13902#endif
13903#else
13904	ubfx	r11, r4, #16, #8
13905#endif
13906	eor	r10, r10, lr, ror #8
13907	lsr	lr, r7, #24
13908	eor	r10, r10, r2, ror #16
13909#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13910#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13911	lsl	r2, r5, #16
13912	lsr	r2, r2, #24
13913#else
13914	uxtb	r2, r5, ror #8
13915#endif
13916#else
13917	ubfx	r2, r5, #8, #8
13918#endif
13919	ldr	r6, [r0, r6, lsl #2]
13920	ldr	lr, [r0, lr, lsl #2]
13921	ldr	r11, [r0, r11, lsl #2]
13922	ldr	r2, [r0, r2, lsl #2]
13923	eor	lr, lr, r6, ror #24
13924	ldm	r3!, {r4, r5, r6, r7}
13925	eor	r11, r11, lr, ror #24
13926	eor	r11, r11, r2, ror #8
13927	#   XOR in Key Schedule
13928	eor	r8, r8, r4
13929	eor	r9, r9, r5
13930	eor	r10, r10, r6
13931	eor	r11, r11, r7
13932#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13933#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13934	lsl	r4, r9, #8
13935	lsr	r4, r4, #24
13936#else
13937	uxtb	r4, r9, ror #16
13938#endif
13939#else
13940	ubfx	r4, r9, #16, #8
13941#endif
13942	lsr	r7, r8, #24
13943#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13944#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13945	lsl	lr, r10, #16
13946	lsr	lr, lr, #24
13947#else
13948	uxtb	lr, r10, ror #8
13949#endif
13950#else
13951	ubfx	lr, r10, #8, #8
13952#endif
13953#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13954#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13955	lsl	r2, r11, #24
13956	lsr	r2, r2, #24
13957#else
13958	uxtb	r2, r11
13959#endif
13960#else
13961	ubfx	r2, r11, #0, #8
13962#endif
13963	ldr	r4, [r0, r4, lsl #2]
13964	ldr	r7, [r0, r7, lsl #2]
13965	ldr	lr, [r0, lr, lsl #2]
13966	ldr	r2, [r0, r2, lsl #2]
13967#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13968#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13969	lsl	r5, r10, #8
13970	lsr	r5, r5, #24
13971#else
13972	uxtb	r5, r10, ror #16
13973#endif
13974#else
13975	ubfx	r5, r10, #16, #8
13976#endif
13977	eor	r4, r4, r7, ror #24
13978	lsr	r7, r9, #24
13979	eor	r4, r4, lr, ror #8
13980#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13981#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13982	lsl	lr, r11, #16
13983	lsr	lr, lr, #24
13984#else
13985	uxtb	lr, r11, ror #8
13986#endif
13987#else
13988	ubfx	lr, r11, #8, #8
13989#endif
13990	eor	r4, r4, r2, ror #16
13991#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13993	lsl	r2, r8, #24
13994	lsr	r2, r2, #24
13995#else
13996	uxtb	r2, r8
13997#endif
13998#else
13999	ubfx	r2, r8, #0, #8
14000#endif
14001	ldr	r5, [r0, r5, lsl #2]
14002	ldr	r7, [r0, r7, lsl #2]
14003	ldr	lr, [r0, lr, lsl #2]
14004	ldr	r2, [r0, r2, lsl #2]
14005#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14006#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14007	lsl	r6, r11, #8
14008	lsr	r6, r6, #24
14009#else
14010	uxtb	r6, r11, ror #16
14011#endif
14012#else
14013	ubfx	r6, r11, #16, #8
14014#endif
14015	eor	r5, r5, r7, ror #24
14016	lsr	r7, r10, #24
14017	eor	r5, r5, lr, ror #8
14018#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14019#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14020	lsl	lr, r8, #16
14021	lsr	lr, lr, #24
14022#else
14023	uxtb	lr, r8, ror #8
14024#endif
14025#else
14026	ubfx	lr, r8, #8, #8
14027#endif
14028	eor	r5, r5, r2, ror #16
14029#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14031	lsl	r2, r9, #24
14032	lsr	r2, r2, #24
14033#else
14034	uxtb	r2, r9
14035#endif
14036#else
14037	ubfx	r2, r9, #0, #8
14038#endif
14039	ldr	r6, [r0, r6, lsl #2]
14040	ldr	r7, [r0, r7, lsl #2]
14041	ldr	lr, [r0, lr, lsl #2]
14042	ldr	r2, [r0, r2, lsl #2]
14043#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14044#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14045	lsl	r10, r10, #24
14046	lsr	r10, r10, #24
14047#else
14048	uxtb	r10, r10
14049#endif
14050#else
14051	ubfx	r10, r10, #0, #8
14052#endif
14053	eor	r6, r6, r7, ror #24
14054#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14055#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14056	lsl	r7, r8, #8
14057	lsr	r7, r7, #24
14058#else
14059	uxtb	r7, r8, ror #16
14060#endif
14061#else
14062	ubfx	r7, r8, #16, #8
14063#endif
14064	eor	r6, r6, lr, ror #8
14065	lsr	lr, r11, #24
14066	eor	r6, r6, r2, ror #16
14067#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14068#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14069	lsl	r2, r9, #16
14070	lsr	r2, r2, #24
14071#else
14072	uxtb	r2, r9, ror #8
14073#endif
14074#else
14075	ubfx	r2, r9, #8, #8
14076#endif
14077	ldr	r10, [r0, r10, lsl #2]
14078	ldr	lr, [r0, lr, lsl #2]
14079	ldr	r7, [r0, r7, lsl #2]
14080	ldr	r2, [r0, r2, lsl #2]
14081	eor	lr, lr, r10, ror #24
14082	ldm	r3!, {r8, r9, r10, r11}
14083	eor	r7, r7, lr, ror #24
14084	eor	r7, r7, r2, ror #8
14085	#   XOR in Key Schedule
14086	eor	r4, r4, r8
14087	eor	r5, r5, r9
14088	eor	r6, r6, r10
14089	eor	r7, r7, r11
14090	subs	r1, r1, #1
14091	bne	L_AES_CTR_encrypt_block_nr_256
14092#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14093#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14094	lsl	r8, r5, #8
14095	lsr	r8, r8, #24
14096#else
14097	uxtb	r8, r5, ror #16
14098#endif
14099#else
14100	ubfx	r8, r5, #16, #8
14101#endif
14102	lsr	r11, r4, #24
14103#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14104#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14105	lsl	lr, r6, #16
14106	lsr	lr, lr, #24
14107#else
14108	uxtb	lr, r6, ror #8
14109#endif
14110#else
14111	ubfx	lr, r6, #8, #8
14112#endif
14113#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14114#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14115	lsl	r2, r7, #24
14116	lsr	r2, r2, #24
14117#else
14118	uxtb	r2, r7
14119#endif
14120#else
14121	ubfx	r2, r7, #0, #8
14122#endif
14123	ldr	r8, [r0, r8, lsl #2]
14124	ldr	r11, [r0, r11, lsl #2]
14125	ldr	lr, [r0, lr, lsl #2]
14126	ldr	r2, [r0, r2, lsl #2]
14127#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14128#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14129	lsl	r9, r6, #8
14130	lsr	r9, r9, #24
14131#else
14132	uxtb	r9, r6, ror #16
14133#endif
14134#else
14135	ubfx	r9, r6, #16, #8
14136#endif
14137	eor	r8, r8, r11, ror #24
14138	lsr	r11, r5, #24
14139	eor	r8, r8, lr, ror #8
14140#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14141#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14142	lsl	lr, r7, #16
14143	lsr	lr, lr, #24
14144#else
14145	uxtb	lr, r7, ror #8
14146#endif
14147#else
14148	ubfx	lr, r7, #8, #8
14149#endif
14150	eor	r8, r8, r2, ror #16
14151#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14152#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14153	lsl	r2, r4, #24
14154	lsr	r2, r2, #24
14155#else
14156	uxtb	r2, r4
14157#endif
14158#else
14159	ubfx	r2, r4, #0, #8
14160#endif
14161	ldr	r9, [r0, r9, lsl #2]
14162	ldr	r11, [r0, r11, lsl #2]
14163	ldr	lr, [r0, lr, lsl #2]
14164	ldr	r2, [r0, r2, lsl #2]
14165#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14166#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14167	lsl	r10, r7, #8
14168	lsr	r10, r10, #24
14169#else
14170	uxtb	r10, r7, ror #16
14171#endif
14172#else
14173	ubfx	r10, r7, #16, #8
14174#endif
14175	eor	r9, r9, r11, ror #24
14176	lsr	r11, r6, #24
14177	eor	r9, r9, lr, ror #8
14178#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14179#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14180	lsl	lr, r4, #16
14181	lsr	lr, lr, #24
14182#else
14183	uxtb	lr, r4, ror #8
14184#endif
14185#else
14186	ubfx	lr, r4, #8, #8
14187#endif
14188	eor	r9, r9, r2, ror #16
14189#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14190#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14191	lsl	r2, r5, #24
14192	lsr	r2, r2, #24
14193#else
14194	uxtb	r2, r5
14195#endif
14196#else
14197	ubfx	r2, r5, #0, #8
14198#endif
14199	ldr	r10, [r0, r10, lsl #2]
14200	ldr	r11, [r0, r11, lsl #2]
14201	ldr	lr, [r0, lr, lsl #2]
14202	ldr	r2, [r0, r2, lsl #2]
14203#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14204#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14205	lsl	r6, r6, #24
14206	lsr	r6, r6, #24
14207#else
14208	uxtb	r6, r6
14209#endif
14210#else
14211	ubfx	r6, r6, #0, #8
14212#endif
14213	eor	r10, r10, r11, ror #24
14214#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14215#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14216	lsl	r11, r4, #8
14217	lsr	r11, r11, #24
14218#else
14219	uxtb	r11, r4, ror #16
14220#endif
14221#else
14222	ubfx	r11, r4, #16, #8
14223#endif
14224	eor	r10, r10, lr, ror #8
14225	lsr	lr, r7, #24
14226	eor	r10, r10, r2, ror #16
14227#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14228#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14229	lsl	r2, r5, #16
14230	lsr	r2, r2, #24
14231#else
14232	uxtb	r2, r5, ror #8
14233#endif
14234#else
14235	ubfx	r2, r5, #8, #8
14236#endif
14237	ldr	r6, [r0, r6, lsl #2]
14238	ldr	lr, [r0, lr, lsl #2]
14239	ldr	r11, [r0, r11, lsl #2]
14240	ldr	r2, [r0, r2, lsl #2]
14241	eor	lr, lr, r6, ror #24
14242	ldm	r3!, {r4, r5, r6, r7}
14243	eor	r11, r11, lr, ror #24
14244	eor	r11, r11, r2, ror #8
14245	#   XOR in Key Schedule
14246	eor	r8, r8, r4
14247	eor	r9, r9, r5
14248	eor	r10, r10, r6
14249	eor	r11, r11, r7
14250#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14251#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14252	lsl	r4, r11, #24
14253	lsr	r4, r4, #24
14254#else
14255	uxtb	r4, r11
14256#endif
14257#else
14258	ubfx	r4, r11, #0, #8
14259#endif
14260#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14261#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14262	lsl	r7, r10, #16
14263	lsr	r7, r7, #24
14264#else
14265	uxtb	r7, r10, ror #8
14266#endif
14267#else
14268	ubfx	r7, r10, #8, #8
14269#endif
14270#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14271#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14272	lsl	lr, r9, #8
14273	lsr	lr, lr, #24
14274#else
14275	uxtb	lr, r9, ror #16
14276#endif
14277#else
14278	ubfx	lr, r9, #16, #8
14279#endif
14280	lsr	r2, r8, #24
14281	ldrb	r4, [r0, r4, lsl #2]
14282	ldrb	r7, [r0, r7, lsl #2]
14283	ldrb	lr, [r0, lr, lsl #2]
14284	ldrb	r2, [r0, r2, lsl #2]
14285#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14286#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14287	lsl	r5, r8, #24
14288	lsr	r5, r5, #24
14289#else
14290	uxtb	r5, r8
14291#endif
14292#else
14293	ubfx	r5, r8, #0, #8
14294#endif
14295	eor	r4, r4, r7, lsl #8
14296#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14297#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14298	lsl	r7, r11, #16
14299	lsr	r7, r7, #24
14300#else
14301	uxtb	r7, r11, ror #8
14302#endif
14303#else
14304	ubfx	r7, r11, #8, #8
14305#endif
14306	eor	r4, r4, lr, lsl #16
14307#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14308#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14309	lsl	lr, r10, #8
14310	lsr	lr, lr, #24
14311#else
14312	uxtb	lr, r10, ror #16
14313#endif
14314#else
14315	ubfx	lr, r10, #16, #8
14316#endif
14317	eor	r4, r4, r2, lsl #24
14318	lsr	r2, r9, #24
14319	ldrb	r5, [r0, r5, lsl #2]
14320	ldrb	r7, [r0, r7, lsl #2]
14321	ldrb	lr, [r0, lr, lsl #2]
14322	ldrb	r2, [r0, r2, lsl #2]
14323#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14324#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14325	lsl	r6, r9, #24
14326	lsr	r6, r6, #24
14327#else
14328	uxtb	r6, r9
14329#endif
14330#else
14331	ubfx	r6, r9, #0, #8
14332#endif
14333	eor	r5, r5, r7, lsl #8
14334#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14335#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14336	lsl	r7, r8, #16
14337	lsr	r7, r7, #24
14338#else
14339	uxtb	r7, r8, ror #8
14340#endif
14341#else
14342	ubfx	r7, r8, #8, #8
14343#endif
14344	eor	r5, r5, lr, lsl #16
14345#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14346#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14347	lsl	lr, r11, #8
14348	lsr	lr, lr, #24
14349#else
14350	uxtb	lr, r11, ror #16
14351#endif
14352#else
14353	ubfx	lr, r11, #16, #8
14354#endif
14355	eor	r5, r5, r2, lsl #24
14356	lsr	r2, r10, #24
14357	ldrb	r6, [r0, r6, lsl #2]
14358	ldrb	r7, [r0, r7, lsl #2]
14359	ldrb	lr, [r0, lr, lsl #2]
14360	ldrb	r2, [r0, r2, lsl #2]
14361	lsr	r11, r11, #24
14362	eor	r6, r6, r7, lsl #8
14363#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14364#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14365	lsl	r7, r10, #24
14366	lsr	r7, r7, #24
14367#else
14368	uxtb	r7, r10
14369#endif
14370#else
14371	ubfx	r7, r10, #0, #8
14372#endif
14373	eor	r6, r6, lr, lsl #16
14374#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14375#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14376	lsl	lr, r9, #16
14377	lsr	lr, lr, #24
14378#else
14379	uxtb	lr, r9, ror #8
14380#endif
14381#else
14382	ubfx	lr, r9, #8, #8
14383#endif
14384	eor	r6, r6, r2, lsl #24
14385#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14386#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14387	lsl	r2, r8, #8
14388	lsr	r2, r2, #24
14389#else
14390	uxtb	r2, r8, ror #16
14391#endif
14392#else
14393	ubfx	r2, r8, #16, #8
14394#endif
14395	ldrb	r11, [r0, r11, lsl #2]
14396	ldrb	r7, [r0, r7, lsl #2]
14397	ldrb	lr, [r0, lr, lsl #2]
14398	ldrb	r2, [r0, r2, lsl #2]
14399	eor	lr, lr, r11, lsl #16
14400	ldm	r3, {r8, r9, r10, r11}
14401	eor	r7, r7, lr, lsl #8
14402	eor	r7, r7, r2, lsl #16
14403	#   XOR in Key Schedule
14404	eor	r4, r4, r8
14405	eor	r5, r5, r9
14406	eor	r6, r6, r10
14407	eor	r7, r7, r11
14408#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
14409	pop	{r1, r2, lr}
14410	ldr	r3, [sp]
14411#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14412	eor	r8, r4, r4, ror #16
14413	eor	r9, r5, r5, ror #16
14414	eor	r10, r6, r6, ror #16
14415	eor	r11, r7, r7, ror #16
14416	bic	r8, r8, #0xff0000
14417	bic	r9, r9, #0xff0000
14418	bic	r10, r10, #0xff0000
14419	bic	r11, r11, #0xff0000
14420	ror	r4, r4, #8
14421	ror	r5, r5, #8
14422	ror	r6, r6, #8
14423	ror	r7, r7, #8
14424	eor	r4, r4, r8, lsr #8
14425	eor	r5, r5, r9, lsr #8
14426	eor	r6, r6, r10, lsr #8
14427	eor	r7, r7, r11, lsr #8
14428#else
14429	rev	r4, r4
14430	rev	r5, r5
14431	rev	r6, r6
14432	rev	r7, r7
14433#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
14434	ldr	r8, [lr]
14435	ldr	r9, [lr, #4]
14436	ldr	r10, [lr, #8]
14437	ldr	r11, [lr, #12]
14438	eor	r4, r4, r8
14439	eor	r5, r5, r9
14440	eor	r6, r6, r10
14441	eor	r7, r7, r11
14442	ldr	r8, [sp, #4]
14443	str	r4, [r1]
14444	str	r5, [r1, #4]
14445	str	r6, [r1, #8]
14446	str	r7, [r1, #12]
14447	ldm	r8, {r4, r5, r6, r7}
14448	subs	r2, r2, #16
14449	add	lr, lr, #16
14450	add	r1, r1, #16
14451	bne	L_AES_CTR_encrypt_loop_block_256
14452	b	L_AES_CTR_encrypt_end
14453L_AES_CTR_encrypt_start_block_192:
14454L_AES_CTR_encrypt_loop_block_192:
14455	push	{r1, r2, lr}
14456	ldr	lr, [sp, #16]
14457	adds	r11, r7, #1
14458	adcs	r10, r6, #0
14459	adcs	r9, r5, #0
14460	adc	r8, r4, #0
14461	stm	lr, {r8, r9, r10, r11}
14462	ldm	r3!, {r8, r9, r10, r11}
14463	# Round: 0 - XOR in key schedule
14464	eor	r4, r4, r8
14465	eor	r5, r5, r9
14466	eor	r6, r6, r10
14467	eor	r7, r7, r11
14468	mov	r1, #5
14469#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
14470	bl	AES_encrypt_block
14471#else
14472L_AES_CTR_encrypt_block_nr_192:
14473#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14474#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14475	lsl	r8, r5, #8
14476	lsr	r8, r8, #24
14477#else
14478	uxtb	r8, r5, ror #16
14479#endif
14480#else
14481	ubfx	r8, r5, #16, #8
14482#endif
14483	lsr	r11, r4, #24
14484#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14485#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14486	lsl	lr, r6, #16
14487	lsr	lr, lr, #24
14488#else
14489	uxtb	lr, r6, ror #8
14490#endif
14491#else
14492	ubfx	lr, r6, #8, #8
14493#endif
14494#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14496	lsl	r2, r7, #24
14497	lsr	r2, r2, #24
14498#else
14499	uxtb	r2, r7
14500#endif
14501#else
14502	ubfx	r2, r7, #0, #8
14503#endif
14504	ldr	r8, [r0, r8, lsl #2]
14505	ldr	r11, [r0, r11, lsl #2]
14506	ldr	lr, [r0, lr, lsl #2]
14507	ldr	r2, [r0, r2, lsl #2]
14508#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14509#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14510	lsl	r9, r6, #8
14511	lsr	r9, r9, #24
14512#else
14513	uxtb	r9, r6, ror #16
14514#endif
14515#else
14516	ubfx	r9, r6, #16, #8
14517#endif
14518	eor	r8, r8, r11, ror #24
14519	lsr	r11, r5, #24
14520	eor	r8, r8, lr, ror #8
14521#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14522#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14523	lsl	lr, r7, #16
14524	lsr	lr, lr, #24
14525#else
14526	uxtb	lr, r7, ror #8
14527#endif
14528#else
14529	ubfx	lr, r7, #8, #8
14530#endif
14531	eor	r8, r8, r2, ror #16
14532#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14533#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14534	lsl	r2, r4, #24
14535	lsr	r2, r2, #24
14536#else
14537	uxtb	r2, r4
14538#endif
14539#else
14540	ubfx	r2, r4, #0, #8
14541#endif
14542	ldr	r9, [r0, r9, lsl #2]
14543	ldr	r11, [r0, r11, lsl #2]
14544	ldr	lr, [r0, lr, lsl #2]
14545	ldr	r2, [r0, r2, lsl #2]
14546#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14547#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14548	lsl	r10, r7, #8
14549	lsr	r10, r10, #24
14550#else
14551	uxtb	r10, r7, ror #16
14552#endif
14553#else
14554	ubfx	r10, r7, #16, #8
14555#endif
14556	eor	r9, r9, r11, ror #24
14557	lsr	r11, r6, #24
14558	eor	r9, r9, lr, ror #8
14559#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14560#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14561	lsl	lr, r4, #16
14562	lsr	lr, lr, #24
14563#else
14564	uxtb	lr, r4, ror #8
14565#endif
14566#else
14567	ubfx	lr, r4, #8, #8
14568#endif
14569	eor	r9, r9, r2, ror #16
14570#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14571#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14572	lsl	r2, r5, #24
14573	lsr	r2, r2, #24
14574#else
14575	uxtb	r2, r5
14576#endif
14577#else
14578	ubfx	r2, r5, #0, #8
14579#endif
14580	ldr	r10, [r0, r10, lsl #2]
14581	ldr	r11, [r0, r11, lsl #2]
14582	ldr	lr, [r0, lr, lsl #2]
14583	ldr	r2, [r0, r2, lsl #2]
14584#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14585#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14586	lsl	r6, r6, #24
14587	lsr	r6, r6, #24
14588#else
14589	uxtb	r6, r6
14590#endif
14591#else
14592	ubfx	r6, r6, #0, #8
14593#endif
14594	eor	r10, r10, r11, ror #24
14595#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14596#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14597	lsl	r11, r4, #8
14598	lsr	r11, r11, #24
14599#else
14600	uxtb	r11, r4, ror #16
14601#endif
14602#else
14603	ubfx	r11, r4, #16, #8
14604#endif
14605	eor	r10, r10, lr, ror #8
14606	lsr	lr, r7, #24
14607	eor	r10, r10, r2, ror #16
14608#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14609#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14610	lsl	r2, r5, #16
14611	lsr	r2, r2, #24
14612#else
14613	uxtb	r2, r5, ror #8
14614#endif
14615#else
14616	ubfx	r2, r5, #8, #8
14617#endif
14618	ldr	r6, [r0, r6, lsl #2]
14619	ldr	lr, [r0, lr, lsl #2]
14620	ldr	r11, [r0, r11, lsl #2]
14621	ldr	r2, [r0, r2, lsl #2]
14622	eor	lr, lr, r6, ror #24
14623	ldm	r3!, {r4, r5, r6, r7}
14624	eor	r11, r11, lr, ror #24
14625	eor	r11, r11, r2, ror #8
14626	#   XOR in Key Schedule
14627	eor	r8, r8, r4
14628	eor	r9, r9, r5
14629	eor	r10, r10, r6
14630	eor	r11, r11, r7
14631#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14632#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14633	lsl	r4, r9, #8
14634	lsr	r4, r4, #24
14635#else
14636	uxtb	r4, r9, ror #16
14637#endif
14638#else
14639	ubfx	r4, r9, #16, #8
14640#endif
14641	lsr	r7, r8, #24
14642#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14643#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14644	lsl	lr, r10, #16
14645	lsr	lr, lr, #24
14646#else
14647	uxtb	lr, r10, ror #8
14648#endif
14649#else
14650	ubfx	lr, r10, #8, #8
14651#endif
14652#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14653#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14654	lsl	r2, r11, #24
14655	lsr	r2, r2, #24
14656#else
14657	uxtb	r2, r11
14658#endif
14659#else
14660	ubfx	r2, r11, #0, #8
14661#endif
14662	ldr	r4, [r0, r4, lsl #2]
14663	ldr	r7, [r0, r7, lsl #2]
14664	ldr	lr, [r0, lr, lsl #2]
14665	ldr	r2, [r0, r2, lsl #2]
14666#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14667#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14668	lsl	r5, r10, #8
14669	lsr	r5, r5, #24
14670#else
14671	uxtb	r5, r10, ror #16
14672#endif
14673#else
14674	ubfx	r5, r10, #16, #8
14675#endif
14676	eor	r4, r4, r7, ror #24
14677	lsr	r7, r9, #24
14678	eor	r4, r4, lr, ror #8
14679#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14680#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14681	lsl	lr, r11, #16
14682	lsr	lr, lr, #24
14683#else
14684	uxtb	lr, r11, ror #8
14685#endif
14686#else
14687	ubfx	lr, r11, #8, #8
14688#endif
14689	eor	r4, r4, r2, ror #16
14690#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14691#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14692	lsl	r2, r8, #24
14693	lsr	r2, r2, #24
14694#else
14695	uxtb	r2, r8
14696#endif
14697#else
14698	ubfx	r2, r8, #0, #8
14699#endif
14700	ldr	r5, [r0, r5, lsl #2]
14701	ldr	r7, [r0, r7, lsl #2]
14702	ldr	lr, [r0, lr, lsl #2]
14703	ldr	r2, [r0, r2, lsl #2]
14704#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14705#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14706	lsl	r6, r11, #8
14707	lsr	r6, r6, #24
14708#else
14709	uxtb	r6, r11, ror #16
14710#endif
14711#else
14712	ubfx	r6, r11, #16, #8
14713#endif
14714	eor	r5, r5, r7, ror #24
14715	lsr	r7, r10, #24
14716	eor	r5, r5, lr, ror #8
14717#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14718#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14719	lsl	lr, r8, #16
14720	lsr	lr, lr, #24
14721#else
14722	uxtb	lr, r8, ror #8
14723#endif
14724#else
14725	ubfx	lr, r8, #8, #8
14726#endif
14727	eor	r5, r5, r2, ror #16
14728#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14729#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14730	lsl	r2, r9, #24
14731	lsr	r2, r2, #24
14732#else
14733	uxtb	r2, r9
14734#endif
14735#else
14736	ubfx	r2, r9, #0, #8
14737#endif
14738	ldr	r6, [r0, r6, lsl #2]
14739	ldr	r7, [r0, r7, lsl #2]
14740	ldr	lr, [r0, lr, lsl #2]
14741	ldr	r2, [r0, r2, lsl #2]
14742#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14743#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14744	lsl	r10, r10, #24
14745	lsr	r10, r10, #24
14746#else
14747	uxtb	r10, r10
14748#endif
14749#else
14750	ubfx	r10, r10, #0, #8
14751#endif
14752	eor	r6, r6, r7, ror #24
14753#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14754#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14755	lsl	r7, r8, #8
14756	lsr	r7, r7, #24
14757#else
14758	uxtb	r7, r8, ror #16
14759#endif
14760#else
14761	ubfx	r7, r8, #16, #8
14762#endif
14763	eor	r6, r6, lr, ror #8
14764	lsr	lr, r11, #24
14765	eor	r6, r6, r2, ror #16
14766#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14767#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14768	lsl	r2, r9, #16
14769	lsr	r2, r2, #24
14770#else
14771	uxtb	r2, r9, ror #8
14772#endif
14773#else
14774	ubfx	r2, r9, #8, #8
14775#endif
14776	ldr	r10, [r0, r10, lsl #2]
14777	ldr	lr, [r0, lr, lsl #2]
14778	ldr	r7, [r0, r7, lsl #2]
14779	ldr	r2, [r0, r2, lsl #2]
14780	eor	lr, lr, r10, ror #24
14781	ldm	r3!, {r8, r9, r10, r11}
14782	eor	r7, r7, lr, ror #24
14783	eor	r7, r7, r2, ror #8
14784	#   XOR in Key Schedule
14785	eor	r4, r4, r8
14786	eor	r5, r5, r9
14787	eor	r6, r6, r10
14788	eor	r7, r7, r11
14789	subs	r1, r1, #1
14790	bne	L_AES_CTR_encrypt_block_nr_192
14791#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14792#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14793	lsl	r8, r5, #8
14794	lsr	r8, r8, #24
14795#else
14796	uxtb	r8, r5, ror #16
14797#endif
14798#else
14799	ubfx	r8, r5, #16, #8
14800#endif
14801	lsr	r11, r4, #24
14802#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14803#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14804	lsl	lr, r6, #16
14805	lsr	lr, lr, #24
14806#else
14807	uxtb	lr, r6, ror #8
14808#endif
14809#else
14810	ubfx	lr, r6, #8, #8
14811#endif
14812#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14813#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14814	lsl	r2, r7, #24
14815	lsr	r2, r2, #24
14816#else
14817	uxtb	r2, r7
14818#endif
14819#else
14820	ubfx	r2, r7, #0, #8
14821#endif
14822	ldr	r8, [r0, r8, lsl #2]
14823	ldr	r11, [r0, r11, lsl #2]
14824	ldr	lr, [r0, lr, lsl #2]
14825	ldr	r2, [r0, r2, lsl #2]
14826#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14827#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14828	lsl	r9, r6, #8
14829	lsr	r9, r9, #24
14830#else
14831	uxtb	r9, r6, ror #16
14832#endif
14833#else
14834	ubfx	r9, r6, #16, #8
14835#endif
14836	eor	r8, r8, r11, ror #24
14837	lsr	r11, r5, #24
14838	eor	r8, r8, lr, ror #8
14839#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14840#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14841	lsl	lr, r7, #16
14842	lsr	lr, lr, #24
14843#else
14844	uxtb	lr, r7, ror #8
14845#endif
14846#else
14847	ubfx	lr, r7, #8, #8
14848#endif
14849	eor	r8, r8, r2, ror #16
14850#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14851#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14852	lsl	r2, r4, #24
14853	lsr	r2, r2, #24
14854#else
14855	uxtb	r2, r4
14856#endif
14857#else
14858	ubfx	r2, r4, #0, #8
14859#endif
14860	ldr	r9, [r0, r9, lsl #2]
14861	ldr	r11, [r0, r11, lsl #2]
14862	ldr	lr, [r0, lr, lsl #2]
14863	ldr	r2, [r0, r2, lsl #2]
14864#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14865#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14866	lsl	r10, r7, #8
14867	lsr	r10, r10, #24
14868#else
14869	uxtb	r10, r7, ror #16
14870#endif
14871#else
14872	ubfx	r10, r7, #16, #8
14873#endif
14874	eor	r9, r9, r11, ror #24
14875	lsr	r11, r6, #24
14876	eor	r9, r9, lr, ror #8
14877#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14878#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14879	lsl	lr, r4, #16
14880	lsr	lr, lr, #24
14881#else
14882	uxtb	lr, r4, ror #8
14883#endif
14884#else
14885	ubfx	lr, r4, #8, #8
14886#endif
14887	eor	r9, r9, r2, ror #16
14888#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14889#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14890	lsl	r2, r5, #24
14891	lsr	r2, r2, #24
14892#else
14893	uxtb	r2, r5
14894#endif
14895#else
14896	ubfx	r2, r5, #0, #8
14897#endif
14898	ldr	r10, [r0, r10, lsl #2]
14899	ldr	r11, [r0, r11, lsl #2]
14900	ldr	lr, [r0, lr, lsl #2]
14901	ldr	r2, [r0, r2, lsl #2]
14902#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14903#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14904	lsl	r6, r6, #24
14905	lsr	r6, r6, #24
14906#else
14907	uxtb	r6, r6
14908#endif
14909#else
14910	ubfx	r6, r6, #0, #8
14911#endif
14912	eor	r10, r10, r11, ror #24
14913#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14914#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14915	lsl	r11, r4, #8
14916	lsr	r11, r11, #24
14917#else
14918	uxtb	r11, r4, ror #16
14919#endif
14920#else
14921	ubfx	r11, r4, #16, #8
14922#endif
14923	eor	r10, r10, lr, ror #8
14924	lsr	lr, r7, #24
14925	eor	r10, r10, r2, ror #16
14926#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14927#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14928	lsl	r2, r5, #16
14929	lsr	r2, r2, #24
14930#else
14931	uxtb	r2, r5, ror #8
14932#endif
14933#else
14934	ubfx	r2, r5, #8, #8
14935#endif
14936	ldr	r6, [r0, r6, lsl #2]
14937	ldr	lr, [r0, lr, lsl #2]
14938	ldr	r11, [r0, r11, lsl #2]
14939	ldr	r2, [r0, r2, lsl #2]
14940	eor	lr, lr, r6, ror #24
14941	ldm	r3!, {r4, r5, r6, r7}
14942	eor	r11, r11, lr, ror #24
14943	eor	r11, r11, r2, ror #8
14944	#   XOR in Key Schedule
14945	eor	r8, r8, r4
14946	eor	r9, r9, r5
14947	eor	r10, r10, r6
14948	eor	r11, r11, r7
14949#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14950#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14951	lsl	r4, r11, #24
14952	lsr	r4, r4, #24
14953#else
14954	uxtb	r4, r11
14955#endif
14956#else
14957	ubfx	r4, r11, #0, #8
14958#endif
14959#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14960#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14961	lsl	r7, r10, #16
14962	lsr	r7, r7, #24
14963#else
14964	uxtb	r7, r10, ror #8
14965#endif
14966#else
14967	ubfx	r7, r10, #8, #8
14968#endif
14969#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14970#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14971	lsl	lr, r9, #8
14972	lsr	lr, lr, #24
14973#else
14974	uxtb	lr, r9, ror #16
14975#endif
14976#else
14977	ubfx	lr, r9, #16, #8
14978#endif
14979	lsr	r2, r8, #24
14980	ldrb	r4, [r0, r4, lsl #2]
14981	ldrb	r7, [r0, r7, lsl #2]
14982	ldrb	lr, [r0, lr, lsl #2]
14983	ldrb	r2, [r0, r2, lsl #2]
14984#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14985#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14986	lsl	r5, r8, #24
14987	lsr	r5, r5, #24
14988#else
14989	uxtb	r5, r8
14990#endif
14991#else
14992	ubfx	r5, r8, #0, #8
14993#endif
14994	eor	r4, r4, r7, lsl #8
14995#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14996#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14997	lsl	r7, r11, #16
14998	lsr	r7, r7, #24
14999#else
15000	uxtb	r7, r11, ror #8
15001#endif
15002#else
15003	ubfx	r7, r11, #8, #8
15004#endif
15005	eor	r4, r4, lr, lsl #16
15006#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15007#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15008	lsl	lr, r10, #8
15009	lsr	lr, lr, #24
15010#else
15011	uxtb	lr, r10, ror #16
15012#endif
15013#else
15014	ubfx	lr, r10, #16, #8
15015#endif
15016	eor	r4, r4, r2, lsl #24
15017	lsr	r2, r9, #24
15018	ldrb	r5, [r0, r5, lsl #2]
15019	ldrb	r7, [r0, r7, lsl #2]
15020	ldrb	lr, [r0, lr, lsl #2]
15021	ldrb	r2, [r0, r2, lsl #2]
15022#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15023#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15024	lsl	r6, r9, #24
15025	lsr	r6, r6, #24
15026#else
15027	uxtb	r6, r9
15028#endif
15029#else
15030	ubfx	r6, r9, #0, #8
15031#endif
15032	eor	r5, r5, r7, lsl #8
15033#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15034#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15035	lsl	r7, r8, #16
15036	lsr	r7, r7, #24
15037#else
15038	uxtb	r7, r8, ror #8
15039#endif
15040#else
15041	ubfx	r7, r8, #8, #8
15042#endif
15043	eor	r5, r5, lr, lsl #16
15044#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15045#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15046	lsl	lr, r11, #8
15047	lsr	lr, lr, #24
15048#else
15049	uxtb	lr, r11, ror #16
15050#endif
15051#else
15052	ubfx	lr, r11, #16, #8
15053#endif
15054	eor	r5, r5, r2, lsl #24
15055	lsr	r2, r10, #24
15056	ldrb	r6, [r0, r6, lsl #2]
15057	ldrb	r7, [r0, r7, lsl #2]
15058	ldrb	lr, [r0, lr, lsl #2]
15059	ldrb	r2, [r0, r2, lsl #2]
15060	lsr	r11, r11, #24
15061	eor	r6, r6, r7, lsl #8
15062#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15063#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15064	lsl	r7, r10, #24
15065	lsr	r7, r7, #24
15066#else
15067	uxtb	r7, r10
15068#endif
15069#else
15070	ubfx	r7, r10, #0, #8
15071#endif
15072	eor	r6, r6, lr, lsl #16
15073#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15074#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15075	lsl	lr, r9, #16
15076	lsr	lr, lr, #24
15077#else
15078	uxtb	lr, r9, ror #8
15079#endif
15080#else
15081	ubfx	lr, r9, #8, #8
15082#endif
15083	eor	r6, r6, r2, lsl #24
15084#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15085#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15086	lsl	r2, r8, #8
15087	lsr	r2, r2, #24
15088#else
15089	uxtb	r2, r8, ror #16
15090#endif
15091#else
15092	ubfx	r2, r8, #16, #8
15093#endif
15094	ldrb	r11, [r0, r11, lsl #2]
15095	ldrb	r7, [r0, r7, lsl #2]
15096	ldrb	lr, [r0, lr, lsl #2]
15097	ldrb	r2, [r0, r2, lsl #2]
15098	eor	lr, lr, r11, lsl #16
15099	ldm	r3, {r8, r9, r10, r11}
15100	eor	r7, r7, lr, lsl #8
15101	eor	r7, r7, r2, lsl #16
15102	#   XOR in Key Schedule
15103	eor	r4, r4, r8
15104	eor	r5, r5, r9
15105	eor	r6, r6, r10
15106	eor	r7, r7, r11
15107#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
15108	pop	{r1, r2, lr}
15109	ldr	r3, [sp]
15110#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15111	eor	r8, r4, r4, ror #16
15112	eor	r9, r5, r5, ror #16
15113	eor	r10, r6, r6, ror #16
15114	eor	r11, r7, r7, ror #16
15115	bic	r8, r8, #0xff0000
15116	bic	r9, r9, #0xff0000
15117	bic	r10, r10, #0xff0000
15118	bic	r11, r11, #0xff0000
15119	ror	r4, r4, #8
15120	ror	r5, r5, #8
15121	ror	r6, r6, #8
15122	ror	r7, r7, #8
15123	eor	r4, r4, r8, lsr #8
15124	eor	r5, r5, r9, lsr #8
15125	eor	r6, r6, r10, lsr #8
15126	eor	r7, r7, r11, lsr #8
15127#else
15128	rev	r4, r4
15129	rev	r5, r5
15130	rev	r6, r6
15131	rev	r7, r7
15132#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
15133	ldr	r8, [lr]
15134	ldr	r9, [lr, #4]
15135	ldr	r10, [lr, #8]
15136	ldr	r11, [lr, #12]
15137	eor	r4, r4, r8
15138	eor	r5, r5, r9
15139	eor	r6, r6, r10
15140	eor	r7, r7, r11
15141	ldr	r8, [sp, #4]
15142	str	r4, [r1]
15143	str	r5, [r1, #4]
15144	str	r6, [r1, #8]
15145	str	r7, [r1, #12]
15146	ldm	r8, {r4, r5, r6, r7}
15147	subs	r2, r2, #16
15148	add	lr, lr, #16
15149	add	r1, r1, #16
15150	bne	L_AES_CTR_encrypt_loop_block_192
15151	b	L_AES_CTR_encrypt_end
15152L_AES_CTR_encrypt_start_block_128:
15153L_AES_CTR_encrypt_loop_block_128:
15154	push	{r1, r2, lr}
15155	ldr	lr, [sp, #16]
15156	adds	r11, r7, #1
15157	adcs	r10, r6, #0
15158	adcs	r9, r5, #0
15159	adc	r8, r4, #0
15160	stm	lr, {r8, r9, r10, r11}
15161	ldm	r3!, {r8, r9, r10, r11}
15162	# Round: 0 - XOR in key schedule
15163	eor	r4, r4, r8
15164	eor	r5, r5, r9
15165	eor	r6, r6, r10
15166	eor	r7, r7, r11
15167	mov	r1, #4
15168#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
15169	bl	AES_encrypt_block
15170#else
15171L_AES_CTR_encrypt_block_nr_128:
15172#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15173#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15174	lsl	r8, r5, #8
15175	lsr	r8, r8, #24
15176#else
15177	uxtb	r8, r5, ror #16
15178#endif
15179#else
15180	ubfx	r8, r5, #16, #8
15181#endif
15182	lsr	r11, r4, #24
15183#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15184#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15185	lsl	lr, r6, #16
15186	lsr	lr, lr, #24
15187#else
15188	uxtb	lr, r6, ror #8
15189#endif
15190#else
15191	ubfx	lr, r6, #8, #8
15192#endif
15193#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15194#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15195	lsl	r2, r7, #24
15196	lsr	r2, r2, #24
15197#else
15198	uxtb	r2, r7
15199#endif
15200#else
15201	ubfx	r2, r7, #0, #8
15202#endif
15203	ldr	r8, [r0, r8, lsl #2]
15204	ldr	r11, [r0, r11, lsl #2]
15205	ldr	lr, [r0, lr, lsl #2]
15206	ldr	r2, [r0, r2, lsl #2]
15207#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15208#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15209	lsl	r9, r6, #8
15210	lsr	r9, r9, #24
15211#else
15212	uxtb	r9, r6, ror #16
15213#endif
15214#else
15215	ubfx	r9, r6, #16, #8
15216#endif
15217	eor	r8, r8, r11, ror #24
15218	lsr	r11, r5, #24
15219	eor	r8, r8, lr, ror #8
15220#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15221#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15222	lsl	lr, r7, #16
15223	lsr	lr, lr, #24
15224#else
15225	uxtb	lr, r7, ror #8
15226#endif
15227#else
15228	ubfx	lr, r7, #8, #8
15229#endif
15230	eor	r8, r8, r2, ror #16
15231#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15232#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15233	lsl	r2, r4, #24
15234	lsr	r2, r2, #24
15235#else
15236	uxtb	r2, r4
15237#endif
15238#else
15239	ubfx	r2, r4, #0, #8
15240#endif
15241	ldr	r9, [r0, r9, lsl #2]
15242	ldr	r11, [r0, r11, lsl #2]
15243	ldr	lr, [r0, lr, lsl #2]
15244	ldr	r2, [r0, r2, lsl #2]
15245#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15246#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15247	lsl	r10, r7, #8
15248	lsr	r10, r10, #24
15249#else
15250	uxtb	r10, r7, ror #16
15251#endif
15252#else
15253	ubfx	r10, r7, #16, #8
15254#endif
15255	eor	r9, r9, r11, ror #24
15256	lsr	r11, r6, #24
15257	eor	r9, r9, lr, ror #8
15258#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15259#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15260	lsl	lr, r4, #16
15261	lsr	lr, lr, #24
15262#else
15263	uxtb	lr, r4, ror #8
15264#endif
15265#else
15266	ubfx	lr, r4, #8, #8
15267#endif
15268	eor	r9, r9, r2, ror #16
15269#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15270#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15271	lsl	r2, r5, #24
15272	lsr	r2, r2, #24
15273#else
15274	uxtb	r2, r5
15275#endif
15276#else
15277	ubfx	r2, r5, #0, #8
15278#endif
15279	ldr	r10, [r0, r10, lsl #2]
15280	ldr	r11, [r0, r11, lsl #2]
15281	ldr	lr, [r0, lr, lsl #2]
15282	ldr	r2, [r0, r2, lsl #2]
15283#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15284#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15285	lsl	r6, r6, #24
15286	lsr	r6, r6, #24
15287#else
15288	uxtb	r6, r6
15289#endif
15290#else
15291	ubfx	r6, r6, #0, #8
15292#endif
15293	eor	r10, r10, r11, ror #24
15294#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15295#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15296	lsl	r11, r4, #8
15297	lsr	r11, r11, #24
15298#else
15299	uxtb	r11, r4, ror #16
15300#endif
15301#else
15302	ubfx	r11, r4, #16, #8
15303#endif
15304	eor	r10, r10, lr, ror #8
15305	lsr	lr, r7, #24
15306	eor	r10, r10, r2, ror #16
15307#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15308#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15309	lsl	r2, r5, #16
15310	lsr	r2, r2, #24
15311#else
15312	uxtb	r2, r5, ror #8
15313#endif
15314#else
15315	ubfx	r2, r5, #8, #8
15316#endif
15317	ldr	r6, [r0, r6, lsl #2]
15318	ldr	lr, [r0, lr, lsl #2]
15319	ldr	r11, [r0, r11, lsl #2]
15320	ldr	r2, [r0, r2, lsl #2]
15321	eor	lr, lr, r6, ror #24
15322	ldm	r3!, {r4, r5, r6, r7}
15323	eor	r11, r11, lr, ror #24
15324	eor	r11, r11, r2, ror #8
15325	#   XOR in Key Schedule
15326	eor	r8, r8, r4
15327	eor	r9, r9, r5
15328	eor	r10, r10, r6
15329	eor	r11, r11, r7
15330#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15331#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15332	lsl	r4, r9, #8
15333	lsr	r4, r4, #24
15334#else
15335	uxtb	r4, r9, ror #16
15336#endif
15337#else
15338	ubfx	r4, r9, #16, #8
15339#endif
15340	lsr	r7, r8, #24
15341#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15342#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15343	lsl	lr, r10, #16
15344	lsr	lr, lr, #24
15345#else
15346	uxtb	lr, r10, ror #8
15347#endif
15348#else
15349	ubfx	lr, r10, #8, #8
15350#endif
15351#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15352#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15353	lsl	r2, r11, #24
15354	lsr	r2, r2, #24
15355#else
15356	uxtb	r2, r11
15357#endif
15358#else
15359	ubfx	r2, r11, #0, #8
15360#endif
15361	ldr	r4, [r0, r4, lsl #2]
15362	ldr	r7, [r0, r7, lsl #2]
15363	ldr	lr, [r0, lr, lsl #2]
15364	ldr	r2, [r0, r2, lsl #2]
15365#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15366#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15367	lsl	r5, r10, #8
15368	lsr	r5, r5, #24
15369#else
15370	uxtb	r5, r10, ror #16
15371#endif
15372#else
15373	ubfx	r5, r10, #16, #8
15374#endif
15375	eor	r4, r4, r7, ror #24
15376	lsr	r7, r9, #24
15377	eor	r4, r4, lr, ror #8
15378#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15379#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15380	lsl	lr, r11, #16
15381	lsr	lr, lr, #24
15382#else
15383	uxtb	lr, r11, ror #8
15384#endif
15385#else
15386	ubfx	lr, r11, #8, #8
15387#endif
15388	eor	r4, r4, r2, ror #16
15389#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15390#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15391	lsl	r2, r8, #24
15392	lsr	r2, r2, #24
15393#else
15394	uxtb	r2, r8
15395#endif
15396#else
15397	ubfx	r2, r8, #0, #8
15398#endif
15399	ldr	r5, [r0, r5, lsl #2]
15400	ldr	r7, [r0, r7, lsl #2]
15401	ldr	lr, [r0, lr, lsl #2]
15402	ldr	r2, [r0, r2, lsl #2]
15403#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15404#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15405	lsl	r6, r11, #8
15406	lsr	r6, r6, #24
15407#else
15408	uxtb	r6, r11, ror #16
15409#endif
15410#else
15411	ubfx	r6, r11, #16, #8
15412#endif
15413	eor	r5, r5, r7, ror #24
15414	lsr	r7, r10, #24
15415	eor	r5, r5, lr, ror #8
15416#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15417#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15418	lsl	lr, r8, #16
15419	lsr	lr, lr, #24
15420#else
15421	uxtb	lr, r8, ror #8
15422#endif
15423#else
15424	ubfx	lr, r8, #8, #8
15425#endif
15426	eor	r5, r5, r2, ror #16
15427#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15428#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15429	lsl	r2, r9, #24
15430	lsr	r2, r2, #24
15431#else
15432	uxtb	r2, r9
15433#endif
15434#else
15435	ubfx	r2, r9, #0, #8
15436#endif
15437	ldr	r6, [r0, r6, lsl #2]
15438	ldr	r7, [r0, r7, lsl #2]
15439	ldr	lr, [r0, lr, lsl #2]
15440	ldr	r2, [r0, r2, lsl #2]
15441#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15442#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15443	lsl	r10, r10, #24
15444	lsr	r10, r10, #24
15445#else
15446	uxtb	r10, r10
15447#endif
15448#else
15449	ubfx	r10, r10, #0, #8
15450#endif
15451	eor	r6, r6, r7, ror #24
15452#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15453#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15454	lsl	r7, r8, #8
15455	lsr	r7, r7, #24
15456#else
15457	uxtb	r7, r8, ror #16
15458#endif
15459#else
15460	ubfx	r7, r8, #16, #8
15461#endif
15462	eor	r6, r6, lr, ror #8
15463	lsr	lr, r11, #24
15464	eor	r6, r6, r2, ror #16
15465#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15466#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15467	lsl	r2, r9, #16
15468	lsr	r2, r2, #24
15469#else
15470	uxtb	r2, r9, ror #8
15471#endif
15472#else
15473	ubfx	r2, r9, #8, #8
15474#endif
15475	ldr	r10, [r0, r10, lsl #2]
15476	ldr	lr, [r0, lr, lsl #2]
15477	ldr	r7, [r0, r7, lsl #2]
15478	ldr	r2, [r0, r2, lsl #2]
15479	eor	lr, lr, r10, ror #24
15480	ldm	r3!, {r8, r9, r10, r11}
15481	eor	r7, r7, lr, ror #24
15482	eor	r7, r7, r2, ror #8
15483	#   XOR in Key Schedule
15484	eor	r4, r4, r8
15485	eor	r5, r5, r9
15486	eor	r6, r6, r10
15487	eor	r7, r7, r11
15488	subs	r1, r1, #1
15489	bne	L_AES_CTR_encrypt_block_nr_128
15490#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15491#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15492	lsl	r8, r5, #8
15493	lsr	r8, r8, #24
15494#else
15495	uxtb	r8, r5, ror #16
15496#endif
15497#else
15498	ubfx	r8, r5, #16, #8
15499#endif
15500	lsr	r11, r4, #24
15501#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15502#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15503	lsl	lr, r6, #16
15504	lsr	lr, lr, #24
15505#else
15506	uxtb	lr, r6, ror #8
15507#endif
15508#else
15509	ubfx	lr, r6, #8, #8
15510#endif
15511#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15512#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15513	lsl	r2, r7, #24
15514	lsr	r2, r2, #24
15515#else
15516	uxtb	r2, r7
15517#endif
15518#else
15519	ubfx	r2, r7, #0, #8
15520#endif
15521	ldr	r8, [r0, r8, lsl #2]
15522	ldr	r11, [r0, r11, lsl #2]
15523	ldr	lr, [r0, lr, lsl #2]
15524	ldr	r2, [r0, r2, lsl #2]
15525#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15526#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15527	lsl	r9, r6, #8
15528	lsr	r9, r9, #24
15529#else
15530	uxtb	r9, r6, ror #16
15531#endif
15532#else
15533	ubfx	r9, r6, #16, #8
15534#endif
15535	eor	r8, r8, r11, ror #24
15536	lsr	r11, r5, #24
15537	eor	r8, r8, lr, ror #8
15538#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15539#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15540	lsl	lr, r7, #16
15541	lsr	lr, lr, #24
15542#else
15543	uxtb	lr, r7, ror #8
15544#endif
15545#else
15546	ubfx	lr, r7, #8, #8
15547#endif
15548	eor	r8, r8, r2, ror #16
15549#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15550#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15551	lsl	r2, r4, #24
15552	lsr	r2, r2, #24
15553#else
15554	uxtb	r2, r4
15555#endif
15556#else
15557	ubfx	r2, r4, #0, #8
15558#endif
15559	ldr	r9, [r0, r9, lsl #2]
15560	ldr	r11, [r0, r11, lsl #2]
15561	ldr	lr, [r0, lr, lsl #2]
15562	ldr	r2, [r0, r2, lsl #2]
15563#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15564#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15565	lsl	r10, r7, #8
15566	lsr	r10, r10, #24
15567#else
15568	uxtb	r10, r7, ror #16
15569#endif
15570#else
15571	ubfx	r10, r7, #16, #8
15572#endif
15573	eor	r9, r9, r11, ror #24
15574	lsr	r11, r6, #24
15575	eor	r9, r9, lr, ror #8
15576#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15577#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15578	lsl	lr, r4, #16
15579	lsr	lr, lr, #24
15580#else
15581	uxtb	lr, r4, ror #8
15582#endif
15583#else
15584	ubfx	lr, r4, #8, #8
15585#endif
15586	eor	r9, r9, r2, ror #16
15587#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15588#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15589	lsl	r2, r5, #24
15590	lsr	r2, r2, #24
15591#else
15592	uxtb	r2, r5
15593#endif
15594#else
15595	ubfx	r2, r5, #0, #8
15596#endif
15597	ldr	r10, [r0, r10, lsl #2]
15598	ldr	r11, [r0, r11, lsl #2]
15599	ldr	lr, [r0, lr, lsl #2]
15600	ldr	r2, [r0, r2, lsl #2]
15601#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15602#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15603	lsl	r6, r6, #24
15604	lsr	r6, r6, #24
15605#else
15606	uxtb	r6, r6
15607#endif
15608#else
15609	ubfx	r6, r6, #0, #8
15610#endif
15611	eor	r10, r10, r11, ror #24
15612#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15613#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15614	lsl	r11, r4, #8
15615	lsr	r11, r11, #24
15616#else
15617	uxtb	r11, r4, ror #16
15618#endif
15619#else
15620	ubfx	r11, r4, #16, #8
15621#endif
15622	eor	r10, r10, lr, ror #8
15623	lsr	lr, r7, #24
15624	eor	r10, r10, r2, ror #16
15625#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15626#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15627	lsl	r2, r5, #16
15628	lsr	r2, r2, #24
15629#else
15630	uxtb	r2, r5, ror #8
15631#endif
15632#else
15633	ubfx	r2, r5, #8, #8
15634#endif
15635	ldr	r6, [r0, r6, lsl #2]
15636	ldr	lr, [r0, lr, lsl #2]
15637	ldr	r11, [r0, r11, lsl #2]
15638	ldr	r2, [r0, r2, lsl #2]
15639	eor	lr, lr, r6, ror #24
15640	ldm	r3!, {r4, r5, r6, r7}
15641	eor	r11, r11, lr, ror #24
15642	eor	r11, r11, r2, ror #8
15643	#   XOR in Key Schedule
15644	eor	r8, r8, r4
15645	eor	r9, r9, r5
15646	eor	r10, r10, r6
15647	eor	r11, r11, r7
15648#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15649#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15650	lsl	r4, r11, #24
15651	lsr	r4, r4, #24
15652#else
15653	uxtb	r4, r11
15654#endif
15655#else
15656	ubfx	r4, r11, #0, #8
15657#endif
15658#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15659#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15660	lsl	r7, r10, #16
15661	lsr	r7, r7, #24
15662#else
15663	uxtb	r7, r10, ror #8
15664#endif
15665#else
15666	ubfx	r7, r10, #8, #8
15667#endif
15668#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15669#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15670	lsl	lr, r9, #8
15671	lsr	lr, lr, #24
15672#else
15673	uxtb	lr, r9, ror #16
15674#endif
15675#else
15676	ubfx	lr, r9, #16, #8
15677#endif
15678	lsr	r2, r8, #24
15679	ldrb	r4, [r0, r4, lsl #2]
15680	ldrb	r7, [r0, r7, lsl #2]
15681	ldrb	lr, [r0, lr, lsl #2]
15682	ldrb	r2, [r0, r2, lsl #2]
15683#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15684#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15685	lsl	r5, r8, #24
15686	lsr	r5, r5, #24
15687#else
15688	uxtb	r5, r8
15689#endif
15690#else
15691	ubfx	r5, r8, #0, #8
15692#endif
15693	eor	r4, r4, r7, lsl #8
15694#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15695#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15696	lsl	r7, r11, #16
15697	lsr	r7, r7, #24
15698#else
15699	uxtb	r7, r11, ror #8
15700#endif
15701#else
15702	ubfx	r7, r11, #8, #8
15703#endif
15704	eor	r4, r4, lr, lsl #16
15705#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15706#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15707	lsl	lr, r10, #8
15708	lsr	lr, lr, #24
15709#else
15710	uxtb	lr, r10, ror #16
15711#endif
15712#else
15713	ubfx	lr, r10, #16, #8
15714#endif
15715	eor	r4, r4, r2, lsl #24
15716	lsr	r2, r9, #24
15717	ldrb	r5, [r0, r5, lsl #2]
15718	ldrb	r7, [r0, r7, lsl #2]
15719	ldrb	lr, [r0, lr, lsl #2]
15720	ldrb	r2, [r0, r2, lsl #2]
15721#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15722#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15723	lsl	r6, r9, #24
15724	lsr	r6, r6, #24
15725#else
15726	uxtb	r6, r9
15727#endif
15728#else
15729	ubfx	r6, r9, #0, #8
15730#endif
15731	eor	r5, r5, r7, lsl #8
15732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15733#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15734	lsl	r7, r8, #16
15735	lsr	r7, r7, #24
15736#else
15737	uxtb	r7, r8, ror #8
15738#endif
15739#else
15740	ubfx	r7, r8, #8, #8
15741#endif
15742	eor	r5, r5, lr, lsl #16
15743#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15744#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15745	lsl	lr, r11, #8
15746	lsr	lr, lr, #24
15747#else
15748	uxtb	lr, r11, ror #16
15749#endif
15750#else
15751	ubfx	lr, r11, #16, #8
15752#endif
15753	eor	r5, r5, r2, lsl #24
15754	lsr	r2, r10, #24
15755	ldrb	r6, [r0, r6, lsl #2]
15756	ldrb	r7, [r0, r7, lsl #2]
15757	ldrb	lr, [r0, lr, lsl #2]
15758	ldrb	r2, [r0, r2, lsl #2]
15759	lsr	r11, r11, #24
15760	eor	r6, r6, r7, lsl #8
15761#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15762#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15763	lsl	r7, r10, #24
15764	lsr	r7, r7, #24
15765#else
15766	uxtb	r7, r10
15767#endif
15768#else
15769	ubfx	r7, r10, #0, #8
15770#endif
15771	eor	r6, r6, lr, lsl #16
15772#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15773#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15774	lsl	lr, r9, #16
15775	lsr	lr, lr, #24
15776#else
15777	uxtb	lr, r9, ror #8
15778#endif
15779#else
15780	ubfx	lr, r9, #8, #8
15781#endif
15782	eor	r6, r6, r2, lsl #24
15783#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15784#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15785	lsl	r2, r8, #8
15786	lsr	r2, r2, #24
15787#else
15788	uxtb	r2, r8, ror #16
15789#endif
15790#else
15791	ubfx	r2, r8, #16, #8
15792#endif
15793	ldrb	r11, [r0, r11, lsl #2]
15794	ldrb	r7, [r0, r7, lsl #2]
15795	ldrb	lr, [r0, lr, lsl #2]
15796	ldrb	r2, [r0, r2, lsl #2]
15797	eor	lr, lr, r11, lsl #16
15798	ldm	r3, {r8, r9, r10, r11}
15799	eor	r7, r7, lr, lsl #8
15800	eor	r7, r7, r2, lsl #16
15801	#   XOR in Key Schedule
15802	eor	r4, r4, r8
15803	eor	r5, r5, r9
15804	eor	r6, r6, r10
15805	eor	r7, r7, r11
15806#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
15807	pop	{r1, r2, lr}
15808	ldr	r3, [sp]
15809#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15810	eor	r8, r4, r4, ror #16
15811	eor	r9, r5, r5, ror #16
15812	eor	r10, r6, r6, ror #16
15813	eor	r11, r7, r7, ror #16
15814	bic	r8, r8, #0xff0000
15815	bic	r9, r9, #0xff0000
15816	bic	r10, r10, #0xff0000
15817	bic	r11, r11, #0xff0000
15818	ror	r4, r4, #8
15819	ror	r5, r5, #8
15820	ror	r6, r6, #8
15821	ror	r7, r7, #8
15822	eor	r4, r4, r8, lsr #8
15823	eor	r5, r5, r9, lsr #8
15824	eor	r6, r6, r10, lsr #8
15825	eor	r7, r7, r11, lsr #8
15826#else
15827	rev	r4, r4
15828	rev	r5, r5
15829	rev	r6, r6
15830	rev	r7, r7
15831#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
15832	ldr	r8, [lr]
15833	ldr	r9, [lr, #4]
15834	ldr	r10, [lr, #8]
15835	ldr	r11, [lr, #12]
15836	eor	r4, r4, r8
15837	eor	r5, r5, r9
15838	eor	r6, r6, r10
15839	eor	r7, r7, r11
15840	ldr	r8, [sp, #4]
15841	str	r4, [r1]
15842	str	r5, [r1, #4]
15843	str	r6, [r1, #8]
15844	str	r7, [r1, #12]
15845	ldm	r8, {r4, r5, r6, r7}
15846	subs	r2, r2, #16
15847	add	lr, lr, #16
15848	add	r1, r1, #16
15849	bne	L_AES_CTR_encrypt_loop_block_128
15850L_AES_CTR_encrypt_end:
15851	pop	{r3, r8}
15852#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15853	eor	r10, r4, r4, ror #16
15854	eor	r11, r5, r5, ror #16
15855	bic	r10, r10, #0xff0000
15856	bic	r11, r11, #0xff0000
15857	ror	r4, r4, #8
15858	ror	r5, r5, #8
15859	eor	r4, r4, r10, lsr #8
15860	eor	r5, r5, r11, lsr #8
15861	eor	r10, r6, r6, ror #16
15862	eor	r11, r7, r7, ror #16
15863	bic	r10, r10, #0xff0000
15864	bic	r11, r11, #0xff0000
15865	ror	r6, r6, #8
15866	ror	r7, r7, #8
15867	eor	r6, r6, r10, lsr #8
15868	eor	r7, r7, r11, lsr #8
15869#else
15870	rev	r4, r4
15871	rev	r5, r5
15872	rev	r6, r6
15873	rev	r7, r7
15874#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
15875	stm	r8, {r4, r5, r6, r7}
15876	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
15877	.size	AES_CTR_encrypt,.-AES_CTR_encrypt
15878#endif /* WOLFSSL_AES_COUNTER */
15879#ifdef HAVE_AES_DECRYPT
15880#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
15881    defined(HAVE_AES_CBC) || defined(HAVE_AES_ECB)
15882#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
15883	.text
15884	.align	4
15885	.globl	AES_decrypt_block
15886	.type	AES_decrypt_block, %function
15887AES_decrypt_block:
15888	push	{lr}
15889L_AES_decrypt_block_nr:
15890#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15891#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15892	lsl	r8, r7, #8
15893	lsr	r8, r8, #24
15894#else
15895	uxtb	r8, r7, ror #16
15896#endif
15897#else
15898	ubfx	r8, r7, #16, #8
15899#endif
15900	lsr	r11, r4, #24
15901#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15902#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15903	lsl	r12, r6, #16
15904	lsr	r12, r12, #24
15905#else
15906	uxtb	r12, r6, ror #8
15907#endif
15908#else
15909	ubfx	r12, r6, #8, #8
15910#endif
15911#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15912#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15913	lsl	lr, r5, #24
15914	lsr	lr, lr, #24
15915#else
15916	uxtb	lr, r5
15917#endif
15918#else
15919	ubfx	lr, r5, #0, #8
15920#endif
15921	ldr	r8, [r0, r8, lsl #2]
15922	ldr	r11, [r0, r11, lsl #2]
15923	ldr	r12, [r0, r12, lsl #2]
15924	ldr	lr, [r0, lr, lsl #2]
15925#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15926#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15927	lsl	r9, r4, #8
15928	lsr	r9, r9, #24
15929#else
15930	uxtb	r9, r4, ror #16
15931#endif
15932#else
15933	ubfx	r9, r4, #16, #8
15934#endif
15935	eor	r8, r8, r11, ror #24
15936	lsr	r11, r5, #24
15937	eor	r8, r8, r12, ror #8
15938#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15939#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15940	lsl	r12, r7, #16
15941	lsr	r12, r12, #24
15942#else
15943	uxtb	r12, r7, ror #8
15944#endif
15945#else
15946	ubfx	r12, r7, #8, #8
15947#endif
15948	eor	r8, r8, lr, ror #16
15949#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15950#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15951	lsl	lr, r6, #24
15952	lsr	lr, lr, #24
15953#else
15954	uxtb	lr, r6
15955#endif
15956#else
15957	ubfx	lr, r6, #0, #8
15958#endif
15959	ldr	r9, [r0, r9, lsl #2]
15960	ldr	r11, [r0, r11, lsl #2]
15961	ldr	r12, [r0, r12, lsl #2]
15962	ldr	lr, [r0, lr, lsl #2]
15963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15964#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15965	lsl	r10, r5, #8
15966	lsr	r10, r10, #24
15967#else
15968	uxtb	r10, r5, ror #16
15969#endif
15970#else
15971	ubfx	r10, r5, #16, #8
15972#endif
15973	eor	r9, r9, r11, ror #24
15974	lsr	r11, r6, #24
15975	eor	r9, r9, r12, ror #8
15976#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15977#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15978	lsl	r12, r4, #16
15979	lsr	r12, r12, #24
15980#else
15981	uxtb	r12, r4, ror #8
15982#endif
15983#else
15984	ubfx	r12, r4, #8, #8
15985#endif
15986	eor	r9, r9, lr, ror #16
15987#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15988#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15989	lsl	lr, r7, #24
15990	lsr	lr, lr, #24
15991#else
15992	uxtb	lr, r7
15993#endif
15994#else
15995	ubfx	lr, r7, #0, #8
15996#endif
15997	ldr	r10, [r0, r10, lsl #2]
15998	ldr	r11, [r0, r11, lsl #2]
15999	ldr	r12, [r0, r12, lsl #2]
16000	ldr	lr, [r0, lr, lsl #2]
16001#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16002#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16003	lsl	r4, r4, #24
16004	lsr	r4, r4, #24
16005#else
16006	uxtb	r4, r4
16007#endif
16008#else
16009	ubfx	r4, r4, #0, #8
16010#endif
16011	eor	r10, r10, r11, ror #24
16012#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16013#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16014	lsl	r11, r6, #8
16015	lsr	r11, r11, #24
16016#else
16017	uxtb	r11, r6, ror #16
16018#endif
16019#else
16020	ubfx	r11, r6, #16, #8
16021#endif
16022	eor	r10, r10, r12, ror #8
16023	lsr	r12, r7, #24
16024	eor	r10, r10, lr, ror #16
16025#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16026#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16027	lsl	lr, r5, #16
16028	lsr	lr, lr, #24
16029#else
16030	uxtb	lr, r5, ror #8
16031#endif
16032#else
16033	ubfx	lr, r5, #8, #8
16034#endif
16035	ldr	r4, [r0, r4, lsl #2]
16036	ldr	r12, [r0, r12, lsl #2]
16037	ldr	r11, [r0, r11, lsl #2]
16038	ldr	lr, [r0, lr, lsl #2]
16039	eor	r12, r12, r4, ror #24
16040	ldm	r3!, {r4, r5, r6, r7}
16041	eor	r11, r11, lr, ror #8
16042	eor	r11, r11, r12, ror #24
16043	#   XOR in Key Schedule
16044	eor	r8, r8, r4
16045	eor	r9, r9, r5
16046	eor	r10, r10, r6
16047	eor	r11, r11, r7
16048#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16049#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16050	lsl	r4, r11, #8
16051	lsr	r4, r4, #24
16052#else
16053	uxtb	r4, r11, ror #16
16054#endif
16055#else
16056	ubfx	r4, r11, #16, #8
16057#endif
16058	lsr	r7, r8, #24
16059#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16060#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16061	lsl	r12, r10, #16
16062	lsr	r12, r12, #24
16063#else
16064	uxtb	r12, r10, ror #8
16065#endif
16066#else
16067	ubfx	r12, r10, #8, #8
16068#endif
16069#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16070#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16071	lsl	lr, r9, #24
16072	lsr	lr, lr, #24
16073#else
16074	uxtb	lr, r9
16075#endif
16076#else
16077	ubfx	lr, r9, #0, #8
16078#endif
16079	ldr	r4, [r0, r4, lsl #2]
16080	ldr	r7, [r0, r7, lsl #2]
16081	ldr	r12, [r0, r12, lsl #2]
16082	ldr	lr, [r0, lr, lsl #2]
16083#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16084#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16085	lsl	r5, r8, #8
16086	lsr	r5, r5, #24
16087#else
16088	uxtb	r5, r8, ror #16
16089#endif
16090#else
16091	ubfx	r5, r8, #16, #8
16092#endif
16093	eor	r4, r4, r7, ror #24
16094	lsr	r7, r9, #24
16095	eor	r4, r4, r12, ror #8
16096#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16097#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16098	lsl	r12, r11, #16
16099	lsr	r12, r12, #24
16100#else
16101	uxtb	r12, r11, ror #8
16102#endif
16103#else
16104	ubfx	r12, r11, #8, #8
16105#endif
16106	eor	r4, r4, lr, ror #16
16107#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16108#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16109	lsl	lr, r10, #24
16110	lsr	lr, lr, #24
16111#else
16112	uxtb	lr, r10
16113#endif
16114#else
16115	ubfx	lr, r10, #0, #8
16116#endif
16117	ldr	r5, [r0, r5, lsl #2]
16118	ldr	r7, [r0, r7, lsl #2]
16119	ldr	r12, [r0, r12, lsl #2]
16120	ldr	lr, [r0, lr, lsl #2]
16121#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16122#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16123	lsl	r6, r9, #8
16124	lsr	r6, r6, #24
16125#else
16126	uxtb	r6, r9, ror #16
16127#endif
16128#else
16129	ubfx	r6, r9, #16, #8
16130#endif
16131	eor	r5, r5, r7, ror #24
16132	lsr	r7, r10, #24
16133	eor	r5, r5, r12, ror #8
16134#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16135#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16136	lsl	r12, r8, #16
16137	lsr	r12, r12, #24
16138#else
16139	uxtb	r12, r8, ror #8
16140#endif
16141#else
16142	ubfx	r12, r8, #8, #8
16143#endif
16144	eor	r5, r5, lr, ror #16
16145#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16146#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16147	lsl	lr, r11, #24
16148	lsr	lr, lr, #24
16149#else
16150	uxtb	lr, r11
16151#endif
16152#else
16153	ubfx	lr, r11, #0, #8
16154#endif
16155	ldr	r6, [r0, r6, lsl #2]
16156	ldr	r7, [r0, r7, lsl #2]
16157	ldr	r12, [r0, r12, lsl #2]
16158	ldr	lr, [r0, lr, lsl #2]
16159#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16160#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16161	lsl	r8, r8, #24
16162	lsr	r8, r8, #24
16163#else
16164	uxtb	r8, r8
16165#endif
16166#else
16167	ubfx	r8, r8, #0, #8
16168#endif
16169	eor	r6, r6, r7, ror #24
16170#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16171#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16172	lsl	r7, r10, #8
16173	lsr	r7, r7, #24
16174#else
16175	uxtb	r7, r10, ror #16
16176#endif
16177#else
16178	ubfx	r7, r10, #16, #8
16179#endif
16180	eor	r6, r6, r12, ror #8
16181	lsr	r12, r11, #24
16182	eor	r6, r6, lr, ror #16
16183#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16184#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16185	lsl	lr, r9, #16
16186	lsr	lr, lr, #24
16187#else
16188	uxtb	lr, r9, ror #8
16189#endif
16190#else
16191	ubfx	lr, r9, #8, #8
16192#endif
16193	ldr	r8, [r0, r8, lsl #2]
16194	ldr	r12, [r0, r12, lsl #2]
16195	ldr	r7, [r0, r7, lsl #2]
16196	ldr	lr, [r0, lr, lsl #2]
16197	eor	r12, r12, r8, ror #24
16198	ldm	r3!, {r8, r9, r10, r11}
16199	eor	r7, r7, lr, ror #8
16200	eor	r7, r7, r12, ror #24
16201	#   XOR in Key Schedule
16202	eor	r4, r4, r8
16203	eor	r5, r5, r9
16204	eor	r6, r6, r10
16205	eor	r7, r7, r11
16206	subs	r1, r1, #1
16207	bne	L_AES_decrypt_block_nr
16208#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16209#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16210	lsl	r8, r7, #8
16211	lsr	r8, r8, #24
16212#else
16213	uxtb	r8, r7, ror #16
16214#endif
16215#else
16216	ubfx	r8, r7, #16, #8
16217#endif
16218	lsr	r11, r4, #24
16219#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16220#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16221	lsl	r12, r6, #16
16222	lsr	r12, r12, #24
16223#else
16224	uxtb	r12, r6, ror #8
16225#endif
16226#else
16227	ubfx	r12, r6, #8, #8
16228#endif
16229#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16230#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16231	lsl	lr, r5, #24
16232	lsr	lr, lr, #24
16233#else
16234	uxtb	lr, r5
16235#endif
16236#else
16237	ubfx	lr, r5, #0, #8
16238#endif
16239	ldr	r8, [r0, r8, lsl #2]
16240	ldr	r11, [r0, r11, lsl #2]
16241	ldr	r12, [r0, r12, lsl #2]
16242	ldr	lr, [r0, lr, lsl #2]
16243#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16244#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16245	lsl	r9, r4, #8
16246	lsr	r9, r9, #24
16247#else
16248	uxtb	r9, r4, ror #16
16249#endif
16250#else
16251	ubfx	r9, r4, #16, #8
16252#endif
16253	eor	r8, r8, r11, ror #24
16254	lsr	r11, r5, #24
16255	eor	r8, r8, r12, ror #8
16256#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16257#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16258	lsl	r12, r7, #16
16259	lsr	r12, r12, #24
16260#else
16261	uxtb	r12, r7, ror #8
16262#endif
16263#else
16264	ubfx	r12, r7, #8, #8
16265#endif
16266	eor	r8, r8, lr, ror #16
16267#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16268#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16269	lsl	lr, r6, #24
16270	lsr	lr, lr, #24
16271#else
16272	uxtb	lr, r6
16273#endif
16274#else
16275	ubfx	lr, r6, #0, #8
16276#endif
16277	ldr	r9, [r0, r9, lsl #2]
16278	ldr	r11, [r0, r11, lsl #2]
16279	ldr	r12, [r0, r12, lsl #2]
16280	ldr	lr, [r0, lr, lsl #2]
16281#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16282#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16283	lsl	r10, r5, #8
16284	lsr	r10, r10, #24
16285#else
16286	uxtb	r10, r5, ror #16
16287#endif
16288#else
16289	ubfx	r10, r5, #16, #8
16290#endif
16291	eor	r9, r9, r11, ror #24
16292	lsr	r11, r6, #24
16293	eor	r9, r9, r12, ror #8
16294#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16295#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16296	lsl	r12, r4, #16
16297	lsr	r12, r12, #24
16298#else
16299	uxtb	r12, r4, ror #8
16300#endif
16301#else
16302	ubfx	r12, r4, #8, #8
16303#endif
16304	eor	r9, r9, lr, ror #16
16305#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16306#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16307	lsl	lr, r7, #24
16308	lsr	lr, lr, #24
16309#else
16310	uxtb	lr, r7
16311#endif
16312#else
16313	ubfx	lr, r7, #0, #8
16314#endif
16315	ldr	r10, [r0, r10, lsl #2]
16316	ldr	r11, [r0, r11, lsl #2]
16317	ldr	r12, [r0, r12, lsl #2]
16318	ldr	lr, [r0, lr, lsl #2]
16319#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16320#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16321	lsl	r4, r4, #24
16322	lsr	r4, r4, #24
16323#else
16324	uxtb	r4, r4
16325#endif
16326#else
16327	ubfx	r4, r4, #0, #8
16328#endif
16329	eor	r10, r10, r11, ror #24
16330#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16331#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16332	lsl	r11, r6, #8
16333	lsr	r11, r11, #24
16334#else
16335	uxtb	r11, r6, ror #16
16336#endif
16337#else
16338	ubfx	r11, r6, #16, #8
16339#endif
16340	eor	r10, r10, r12, ror #8
16341	lsr	r12, r7, #24
16342	eor	r10, r10, lr, ror #16
16343#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16344#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16345	lsl	lr, r5, #16
16346	lsr	lr, lr, #24
16347#else
16348	uxtb	lr, r5, ror #8
16349#endif
16350#else
16351	ubfx	lr, r5, #8, #8
16352#endif
16353	ldr	r4, [r0, r4, lsl #2]
16354	ldr	r12, [r0, r12, lsl #2]
16355	ldr	r11, [r0, r11, lsl #2]
16356	ldr	lr, [r0, lr, lsl #2]
16357	eor	r12, r12, r4, ror #24
16358	ldm	r3!, {r4, r5, r6, r7}
16359	eor	r11, r11, lr, ror #8
16360	eor	r11, r11, r12, ror #24
16361	#   XOR in Key Schedule
16362	eor	r8, r8, r4
16363	eor	r9, r9, r5
16364	eor	r10, r10, r6
16365	eor	r11, r11, r7
16366#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16367#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16368	lsl	r4, r9, #24
16369	lsr	r4, r4, #24
16370#else
16371	uxtb	r4, r9
16372#endif
16373#else
16374	ubfx	r4, r9, #0, #8
16375#endif
16376#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16377#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16378	lsl	r7, r10, #16
16379	lsr	r7, r7, #24
16380#else
16381	uxtb	r7, r10, ror #8
16382#endif
16383#else
16384	ubfx	r7, r10, #8, #8
16385#endif
16386#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16387#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16388	lsl	r12, r11, #8
16389	lsr	r12, r12, #24
16390#else
16391	uxtb	r12, r11, ror #16
16392#endif
16393#else
16394	ubfx	r12, r11, #16, #8
16395#endif
16396	lsr	lr, r8, #24
16397	ldrb	r4, [r2, r4]
16398	ldrb	r7, [r2, r7]
16399	ldrb	r12, [r2, r12]
16400	ldrb	lr, [r2, lr]
16401#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16402#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16403	lsl	r5, r10, #24
16404	lsr	r5, r5, #24
16405#else
16406	uxtb	r5, r10
16407#endif
16408#else
16409	ubfx	r5, r10, #0, #8
16410#endif
16411	eor	r4, r4, r7, lsl #8
16412#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16413#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16414	lsl	r7, r11, #16
16415	lsr	r7, r7, #24
16416#else
16417	uxtb	r7, r11, ror #8
16418#endif
16419#else
16420	ubfx	r7, r11, #8, #8
16421#endif
16422	eor	r4, r4, r12, lsl #16
16423#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16425	lsl	r12, r8, #8
16426	lsr	r12, r12, #24
16427#else
16428	uxtb	r12, r8, ror #16
16429#endif
16430#else
16431	ubfx	r12, r8, #16, #8
16432#endif
16433	eor	r4, r4, lr, lsl #24
16434	lsr	lr, r9, #24
16435	ldrb	r7, [r2, r7]
16436	ldrb	lr, [r2, lr]
16437	ldrb	r5, [r2, r5]
16438	ldrb	r12, [r2, r12]
16439#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16440#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16441	lsl	r6, r11, #24
16442	lsr	r6, r6, #24
16443#else
16444	uxtb	r6, r11
16445#endif
16446#else
16447	ubfx	r6, r11, #0, #8
16448#endif
16449	eor	r5, r5, r7, lsl #8
16450#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16451#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16452	lsl	r7, r8, #16
16453	lsr	r7, r7, #24
16454#else
16455	uxtb	r7, r8, ror #8
16456#endif
16457#else
16458	ubfx	r7, r8, #8, #8
16459#endif
16460	eor	r5, r5, r12, lsl #16
16461#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16462#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16463	lsl	r12, r9, #8
16464	lsr	r12, r12, #24
16465#else
16466	uxtb	r12, r9, ror #16
16467#endif
16468#else
16469	ubfx	r12, r9, #16, #8
16470#endif
16471	eor	r5, r5, lr, lsl #24
16472	lsr	lr, r10, #24
16473	ldrb	r7, [r2, r7]
16474	ldrb	lr, [r2, lr]
16475	ldrb	r6, [r2, r6]
16476	ldrb	r12, [r2, r12]
16477	lsr	r11, r11, #24
16478	eor	r6, r6, r7, lsl #8
16479#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16480#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16481	lsl	r7, r8, #24
16482	lsr	r7, r7, #24
16483#else
16484	uxtb	r7, r8
16485#endif
16486#else
16487	ubfx	r7, r8, #0, #8
16488#endif
16489	eor	r6, r6, r12, lsl #16
16490#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16491#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16492	lsl	r12, r9, #16
16493	lsr	r12, r12, #24
16494#else
16495	uxtb	r12, r9, ror #8
16496#endif
16497#else
16498	ubfx	r12, r9, #8, #8
16499#endif
16500	eor	r6, r6, lr, lsl #24
16501#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16502#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16503	lsl	lr, r10, #8
16504	lsr	lr, lr, #24
16505#else
16506	uxtb	lr, r10, ror #16
16507#endif
16508#else
16509	ubfx	lr, r10, #16, #8
16510#endif
16511	ldrb	r11, [r2, r11]
16512	ldrb	r12, [r2, r12]
16513	ldrb	r7, [r2, r7]
16514	ldrb	lr, [r2, lr]
16515	eor	r12, r12, r11, lsl #16
16516	ldm	r3, {r8, r9, r10, r11}
16517	eor	r7, r7, r12, lsl #8
16518	eor	r7, r7, lr, lsl #16
16519	#   XOR in Key Schedule
16520	eor	r4, r4, r8
16521	eor	r5, r5, r9
16522	eor	r6, r6, r10
16523	eor	r7, r7, r11
16524	pop	{pc}
16525	.size	AES_decrypt_block,.-AES_decrypt_block
16526#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
16527#ifndef __APPLE__
16528	.text
16529	.type	L_AES_ARM32_td_ecb, %object
16530	.size	L_AES_ARM32_td_ecb, 12
16531#else
16532	.section	__DATA,__data
16533#endif /* __APPLE__ */
16534	# 8-byte aligned, 64-bit aligned
16535#ifndef __APPLE__
16536	.align	3
16537#else
16538	.p2align	3
16539#endif /* __APPLE__ */
16540L_AES_ARM32_td_ecb:
16541	.long	L_AES_ARM32_td_data
16542#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || defined(HAVE_AES_ECB)
16543#ifndef __APPLE__
16544	.text
16545	.type	L_AES_ARM32_ecb_td4, %object
16546	.size	L_AES_ARM32_ecb_td4, 256
16547#else
16548	.section	__DATA,__data
16549#endif /* __APPLE__ */
16550	# 4-byte aligned, 32-bit aligned
16551#ifndef __APPLE__
16552	.align	2
16553#else
16554	.p2align	2
16555#endif /* __APPLE__ */
16556L_AES_ARM32_ecb_td4:
16557	.byte	0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
16558	.byte	0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
16559	.byte	0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
16560	.byte	0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
16561	.byte	0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
16562	.byte	0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
16563	.byte	0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
16564	.byte	0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
16565	.byte	0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
16566	.byte	0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
16567	.byte	0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
16568	.byte	0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
16569	.byte	0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
16570	.byte	0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
16571	.byte	0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
16572	.byte	0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
16573	.byte	0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
16574	.byte	0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
16575	.byte	0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
16576	.byte	0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
16577	.byte	0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
16578	.byte	0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
16579	.byte	0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
16580	.byte	0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
16581	.byte	0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
16582	.byte	0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
16583	.byte	0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
16584	.byte	0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
16585	.byte	0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
16586	.byte	0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
16587	.byte	0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
16588	.byte	0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
16589	.text
16590	.align	4
16591	.globl	AES_ECB_decrypt
16592	.type	AES_ECB_decrypt, %function
16593AES_ECB_decrypt:
16594	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
16595	ldr	r8, [sp, #36]
16596	mov	lr, r0
16597	adr	r0, L_AES_ARM32_td_ecb
16598	ldr	r0, [r0]
16599	mov	r12, r2
16600	adr	r2, L_AES_ARM32_ecb_td4
16601	cmp	r8, #10
16602	beq	L_AES_ECB_decrypt_start_block_128
16603	cmp	r8, #12
16604	beq	L_AES_ECB_decrypt_start_block_192
16605L_AES_ECB_decrypt_loop_block_256:
16606	ldr	r4, [lr]
16607	ldr	r5, [lr, #4]
16608	ldr	r6, [lr, #8]
16609	ldr	r7, [lr, #12]
16610#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16611	eor	r8, r4, r4, ror #16
16612	eor	r9, r5, r5, ror #16
16613	eor	r10, r6, r6, ror #16
16614	eor	r11, r7, r7, ror #16
16615	bic	r8, r8, #0xff0000
16616	bic	r9, r9, #0xff0000
16617	bic	r10, r10, #0xff0000
16618	bic	r11, r11, #0xff0000
16619	ror	r4, r4, #8
16620	ror	r5, r5, #8
16621	ror	r6, r6, #8
16622	ror	r7, r7, #8
16623	eor	r4, r4, r8, lsr #8
16624	eor	r5, r5, r9, lsr #8
16625	eor	r6, r6, r10, lsr #8
16626	eor	r7, r7, r11, lsr #8
16627#else
16628	rev	r4, r4
16629	rev	r5, r5
16630	rev	r6, r6
16631	rev	r7, r7
16632#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
16633	push	{r1, r3, r12, lr}
16634	ldm	r3!, {r8, r9, r10, r11}
16635	# Round: 0 - XOR in key schedule
16636	eor	r4, r4, r8
16637	eor	r5, r5, r9
16638	eor	r6, r6, r10
16639	eor	r7, r7, r11
16640	mov	r1, #6
16641#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
16642	bl	AES_decrypt_block
16643#else
16644L_AES_ECB_decrypt_block_nr_256:
16645#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16647	lsl	r8, r7, #8
16648	lsr	r8, r8, #24
16649#else
16650	uxtb	r8, r7, ror #16
16651#endif
16652#else
16653	ubfx	r8, r7, #16, #8
16654#endif
16655	lsr	r11, r4, #24
16656#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16657#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16658	lsl	r12, r6, #16
16659	lsr	r12, r12, #24
16660#else
16661	uxtb	r12, r6, ror #8
16662#endif
16663#else
16664	ubfx	r12, r6, #8, #8
16665#endif
16666#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16667#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16668	lsl	lr, r5, #24
16669	lsr	lr, lr, #24
16670#else
16671	uxtb	lr, r5
16672#endif
16673#else
16674	ubfx	lr, r5, #0, #8
16675#endif
16676	ldr	r8, [r0, r8, lsl #2]
16677	ldr	r11, [r0, r11, lsl #2]
16678	ldr	r12, [r0, r12, lsl #2]
16679	ldr	lr, [r0, lr, lsl #2]
16680#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16681#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16682	lsl	r9, r4, #8
16683	lsr	r9, r9, #24
16684#else
16685	uxtb	r9, r4, ror #16
16686#endif
16687#else
16688	ubfx	r9, r4, #16, #8
16689#endif
16690	eor	r8, r8, r11, ror #24
16691	lsr	r11, r5, #24
16692	eor	r8, r8, r12, ror #8
16693#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16694#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16695	lsl	r12, r7, #16
16696	lsr	r12, r12, #24
16697#else
16698	uxtb	r12, r7, ror #8
16699#endif
16700#else
16701	ubfx	r12, r7, #8, #8
16702#endif
16703	eor	r8, r8, lr, ror #16
16704#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16705#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16706	lsl	lr, r6, #24
16707	lsr	lr, lr, #24
16708#else
16709	uxtb	lr, r6
16710#endif
16711#else
16712	ubfx	lr, r6, #0, #8
16713#endif
16714	ldr	r9, [r0, r9, lsl #2]
16715	ldr	r11, [r0, r11, lsl #2]
16716	ldr	r12, [r0, r12, lsl #2]
16717	ldr	lr, [r0, lr, lsl #2]
16718#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16719#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16720	lsl	r10, r5, #8
16721	lsr	r10, r10, #24
16722#else
16723	uxtb	r10, r5, ror #16
16724#endif
16725#else
16726	ubfx	r10, r5, #16, #8
16727#endif
16728	eor	r9, r9, r11, ror #24
16729	lsr	r11, r6, #24
16730	eor	r9, r9, r12, ror #8
16731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16733	lsl	r12, r4, #16
16734	lsr	r12, r12, #24
16735#else
16736	uxtb	r12, r4, ror #8
16737#endif
16738#else
16739	ubfx	r12, r4, #8, #8
16740#endif
16741	eor	r9, r9, lr, ror #16
16742#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16743#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16744	lsl	lr, r7, #24
16745	lsr	lr, lr, #24
16746#else
16747	uxtb	lr, r7
16748#endif
16749#else
16750	ubfx	lr, r7, #0, #8
16751#endif
16752	ldr	r10, [r0, r10, lsl #2]
16753	ldr	r11, [r0, r11, lsl #2]
16754	ldr	r12, [r0, r12, lsl #2]
16755	ldr	lr, [r0, lr, lsl #2]
16756#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16757#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16758	lsl	r4, r4, #24
16759	lsr	r4, r4, #24
16760#else
16761	uxtb	r4, r4
16762#endif
16763#else
16764	ubfx	r4, r4, #0, #8
16765#endif
16766	eor	r10, r10, r11, ror #24
16767#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16768#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16769	lsl	r11, r6, #8
16770	lsr	r11, r11, #24
16771#else
16772	uxtb	r11, r6, ror #16
16773#endif
16774#else
16775	ubfx	r11, r6, #16, #8
16776#endif
16777	eor	r10, r10, r12, ror #8
16778	lsr	r12, r7, #24
16779	eor	r10, r10, lr, ror #16
16780#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16781#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16782	lsl	lr, r5, #16
16783	lsr	lr, lr, #24
16784#else
16785	uxtb	lr, r5, ror #8
16786#endif
16787#else
16788	ubfx	lr, r5, #8, #8
16789#endif
16790	ldr	r4, [r0, r4, lsl #2]
16791	ldr	r12, [r0, r12, lsl #2]
16792	ldr	r11, [r0, r11, lsl #2]
16793	ldr	lr, [r0, lr, lsl #2]
16794	eor	r12, r12, r4, ror #24
16795	ldm	r3!, {r4, r5, r6, r7}
16796	eor	r11, r11, lr, ror #8
16797	eor	r11, r11, r12, ror #24
16798	#   XOR in Key Schedule
16799	eor	r8, r8, r4
16800	eor	r9, r9, r5
16801	eor	r10, r10, r6
16802	eor	r11, r11, r7
16803#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16804#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16805	lsl	r4, r11, #8
16806	lsr	r4, r4, #24
16807#else
16808	uxtb	r4, r11, ror #16
16809#endif
16810#else
16811	ubfx	r4, r11, #16, #8
16812#endif
16813	lsr	r7, r8, #24
16814#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16815#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16816	lsl	r12, r10, #16
16817	lsr	r12, r12, #24
16818#else
16819	uxtb	r12, r10, ror #8
16820#endif
16821#else
16822	ubfx	r12, r10, #8, #8
16823#endif
16824#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16825#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16826	lsl	lr, r9, #24
16827	lsr	lr, lr, #24
16828#else
16829	uxtb	lr, r9
16830#endif
16831#else
16832	ubfx	lr, r9, #0, #8
16833#endif
16834	ldr	r4, [r0, r4, lsl #2]
16835	ldr	r7, [r0, r7, lsl #2]
16836	ldr	r12, [r0, r12, lsl #2]
16837	ldr	lr, [r0, lr, lsl #2]
16838#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16839#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16840	lsl	r5, r8, #8
16841	lsr	r5, r5, #24
16842#else
16843	uxtb	r5, r8, ror #16
16844#endif
16845#else
16846	ubfx	r5, r8, #16, #8
16847#endif
16848	eor	r4, r4, r7, ror #24
16849	lsr	r7, r9, #24
16850	eor	r4, r4, r12, ror #8
16851#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16852#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16853	lsl	r12, r11, #16
16854	lsr	r12, r12, #24
16855#else
16856	uxtb	r12, r11, ror #8
16857#endif
16858#else
16859	ubfx	r12, r11, #8, #8
16860#endif
16861	eor	r4, r4, lr, ror #16
16862#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16863#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16864	lsl	lr, r10, #24
16865	lsr	lr, lr, #24
16866#else
16867	uxtb	lr, r10
16868#endif
16869#else
16870	ubfx	lr, r10, #0, #8
16871#endif
16872	ldr	r5, [r0, r5, lsl #2]
16873	ldr	r7, [r0, r7, lsl #2]
16874	ldr	r12, [r0, r12, lsl #2]
16875	ldr	lr, [r0, lr, lsl #2]
16876#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16877#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16878	lsl	r6, r9, #8
16879	lsr	r6, r6, #24
16880#else
16881	uxtb	r6, r9, ror #16
16882#endif
16883#else
16884	ubfx	r6, r9, #16, #8
16885#endif
16886	eor	r5, r5, r7, ror #24
16887	lsr	r7, r10, #24
16888	eor	r5, r5, r12, ror #8
16889#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16890#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16891	lsl	r12, r8, #16
16892	lsr	r12, r12, #24
16893#else
16894	uxtb	r12, r8, ror #8
16895#endif
16896#else
16897	ubfx	r12, r8, #8, #8
16898#endif
16899	eor	r5, r5, lr, ror #16
16900#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16901#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16902	lsl	lr, r11, #24
16903	lsr	lr, lr, #24
16904#else
16905	uxtb	lr, r11
16906#endif
16907#else
16908	ubfx	lr, r11, #0, #8
16909#endif
16910	ldr	r6, [r0, r6, lsl #2]
16911	ldr	r7, [r0, r7, lsl #2]
16912	ldr	r12, [r0, r12, lsl #2]
16913	ldr	lr, [r0, lr, lsl #2]
16914#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16915#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16916	lsl	r8, r8, #24
16917	lsr	r8, r8, #24
16918#else
16919	uxtb	r8, r8
16920#endif
16921#else
16922	ubfx	r8, r8, #0, #8
16923#endif
16924	eor	r6, r6, r7, ror #24
16925#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16926#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16927	lsl	r7, r10, #8
16928	lsr	r7, r7, #24
16929#else
16930	uxtb	r7, r10, ror #16
16931#endif
16932#else
16933	ubfx	r7, r10, #16, #8
16934#endif
16935	eor	r6, r6, r12, ror #8
16936	lsr	r12, r11, #24
16937	eor	r6, r6, lr, ror #16
16938#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16939#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16940	lsl	lr, r9, #16
16941	lsr	lr, lr, #24
16942#else
16943	uxtb	lr, r9, ror #8
16944#endif
16945#else
16946	ubfx	lr, r9, #8, #8
16947#endif
16948	ldr	r8, [r0, r8, lsl #2]
16949	ldr	r12, [r0, r12, lsl #2]
16950	ldr	r7, [r0, r7, lsl #2]
16951	ldr	lr, [r0, lr, lsl #2]
16952	eor	r12, r12, r8, ror #24
16953	ldm	r3!, {r8, r9, r10, r11}
16954	eor	r7, r7, lr, ror #8
16955	eor	r7, r7, r12, ror #24
16956	#   XOR in Key Schedule
16957	eor	r4, r4, r8
16958	eor	r5, r5, r9
16959	eor	r6, r6, r10
16960	eor	r7, r7, r11
16961	subs	r1, r1, #1
16962	bne	L_AES_ECB_decrypt_block_nr_256
16963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16964#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16965	lsl	r8, r7, #8
16966	lsr	r8, r8, #24
16967#else
16968	uxtb	r8, r7, ror #16
16969#endif
16970#else
16971	ubfx	r8, r7, #16, #8
16972#endif
16973	lsr	r11, r4, #24
16974#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16975#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16976	lsl	r12, r6, #16
16977	lsr	r12, r12, #24
16978#else
16979	uxtb	r12, r6, ror #8
16980#endif
16981#else
16982	ubfx	r12, r6, #8, #8
16983#endif
16984#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16985#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16986	lsl	lr, r5, #24
16987	lsr	lr, lr, #24
16988#else
16989	uxtb	lr, r5
16990#endif
16991#else
16992	ubfx	lr, r5, #0, #8
16993#endif
16994	ldr	r8, [r0, r8, lsl #2]
16995	ldr	r11, [r0, r11, lsl #2]
16996	ldr	r12, [r0, r12, lsl #2]
16997	ldr	lr, [r0, lr, lsl #2]
16998#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16999#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17000	lsl	r9, r4, #8
17001	lsr	r9, r9, #24
17002#else
17003	uxtb	r9, r4, ror #16
17004#endif
17005#else
17006	ubfx	r9, r4, #16, #8
17007#endif
17008	eor	r8, r8, r11, ror #24
17009	lsr	r11, r5, #24
17010	eor	r8, r8, r12, ror #8
17011#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17012#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17013	lsl	r12, r7, #16
17014	lsr	r12, r12, #24
17015#else
17016	uxtb	r12, r7, ror #8
17017#endif
17018#else
17019	ubfx	r12, r7, #8, #8
17020#endif
17021	eor	r8, r8, lr, ror #16
17022#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17023#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17024	lsl	lr, r6, #24
17025	lsr	lr, lr, #24
17026#else
17027	uxtb	lr, r6
17028#endif
17029#else
17030	ubfx	lr, r6, #0, #8
17031#endif
17032	ldr	r9, [r0, r9, lsl #2]
17033	ldr	r11, [r0, r11, lsl #2]
17034	ldr	r12, [r0, r12, lsl #2]
17035	ldr	lr, [r0, lr, lsl #2]
17036#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17037#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17038	lsl	r10, r5, #8
17039	lsr	r10, r10, #24
17040#else
17041	uxtb	r10, r5, ror #16
17042#endif
17043#else
17044	ubfx	r10, r5, #16, #8
17045#endif
17046	eor	r9, r9, r11, ror #24
17047	lsr	r11, r6, #24
17048	eor	r9, r9, r12, ror #8
17049#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17050#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17051	lsl	r12, r4, #16
17052	lsr	r12, r12, #24
17053#else
17054	uxtb	r12, r4, ror #8
17055#endif
17056#else
17057	ubfx	r12, r4, #8, #8
17058#endif
17059	eor	r9, r9, lr, ror #16
17060#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17061#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17062	lsl	lr, r7, #24
17063	lsr	lr, lr, #24
17064#else
17065	uxtb	lr, r7
17066#endif
17067#else
17068	ubfx	lr, r7, #0, #8
17069#endif
17070	ldr	r10, [r0, r10, lsl #2]
17071	ldr	r11, [r0, r11, lsl #2]
17072	ldr	r12, [r0, r12, lsl #2]
17073	ldr	lr, [r0, lr, lsl #2]
17074#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17075#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17076	lsl	r4, r4, #24
17077	lsr	r4, r4, #24
17078#else
17079	uxtb	r4, r4
17080#endif
17081#else
17082	ubfx	r4, r4, #0, #8
17083#endif
17084	eor	r10, r10, r11, ror #24
17085#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17086#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17087	lsl	r11, r6, #8
17088	lsr	r11, r11, #24
17089#else
17090	uxtb	r11, r6, ror #16
17091#endif
17092#else
17093	ubfx	r11, r6, #16, #8
17094#endif
17095	eor	r10, r10, r12, ror #8
17096	lsr	r12, r7, #24
17097	eor	r10, r10, lr, ror #16
17098#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17099#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17100	lsl	lr, r5, #16
17101	lsr	lr, lr, #24
17102#else
17103	uxtb	lr, r5, ror #8
17104#endif
17105#else
17106	ubfx	lr, r5, #8, #8
17107#endif
17108	ldr	r4, [r0, r4, lsl #2]
17109	ldr	r12, [r0, r12, lsl #2]
17110	ldr	r11, [r0, r11, lsl #2]
17111	ldr	lr, [r0, lr, lsl #2]
17112	eor	r12, r12, r4, ror #24
17113	ldm	r3!, {r4, r5, r6, r7}
17114	eor	r11, r11, lr, ror #8
17115	eor	r11, r11, r12, ror #24
17116	#   XOR in Key Schedule
17117	eor	r8, r8, r4
17118	eor	r9, r9, r5
17119	eor	r10, r10, r6
17120	eor	r11, r11, r7
17121#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17122#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17123	lsl	r4, r9, #24
17124	lsr	r4, r4, #24
17125#else
17126	uxtb	r4, r9
17127#endif
17128#else
17129	ubfx	r4, r9, #0, #8
17130#endif
17131#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17132#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17133	lsl	r7, r10, #16
17134	lsr	r7, r7, #24
17135#else
17136	uxtb	r7, r10, ror #8
17137#endif
17138#else
17139	ubfx	r7, r10, #8, #8
17140#endif
17141#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17142#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17143	lsl	r12, r11, #8
17144	lsr	r12, r12, #24
17145#else
17146	uxtb	r12, r11, ror #16
17147#endif
17148#else
17149	ubfx	r12, r11, #16, #8
17150#endif
17151	lsr	lr, r8, #24
17152	ldrb	r4, [r2, r4]
17153	ldrb	r7, [r2, r7]
17154	ldrb	r12, [r2, r12]
17155	ldrb	lr, [r2, lr]
17156#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17157#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17158	lsl	r5, r10, #24
17159	lsr	r5, r5, #24
17160#else
17161	uxtb	r5, r10
17162#endif
17163#else
17164	ubfx	r5, r10, #0, #8
17165#endif
17166	eor	r4, r4, r7, lsl #8
17167#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17168#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17169	lsl	r7, r11, #16
17170	lsr	r7, r7, #24
17171#else
17172	uxtb	r7, r11, ror #8
17173#endif
17174#else
17175	ubfx	r7, r11, #8, #8
17176#endif
17177	eor	r4, r4, r12, lsl #16
17178#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17179#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17180	lsl	r12, r8, #8
17181	lsr	r12, r12, #24
17182#else
17183	uxtb	r12, r8, ror #16
17184#endif
17185#else
17186	ubfx	r12, r8, #16, #8
17187#endif
17188	eor	r4, r4, lr, lsl #24
17189	lsr	lr, r9, #24
17190	ldrb	r7, [r2, r7]
17191	ldrb	lr, [r2, lr]
17192	ldrb	r5, [r2, r5]
17193	ldrb	r12, [r2, r12]
17194#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17195#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17196	lsl	r6, r11, #24
17197	lsr	r6, r6, #24
17198#else
17199	uxtb	r6, r11
17200#endif
17201#else
17202	ubfx	r6, r11, #0, #8
17203#endif
17204	eor	r5, r5, r7, lsl #8
17205#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17206#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17207	lsl	r7, r8, #16
17208	lsr	r7, r7, #24
17209#else
17210	uxtb	r7, r8, ror #8
17211#endif
17212#else
17213	ubfx	r7, r8, #8, #8
17214#endif
17215	eor	r5, r5, r12, lsl #16
17216#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17217#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17218	lsl	r12, r9, #8
17219	lsr	r12, r12, #24
17220#else
17221	uxtb	r12, r9, ror #16
17222#endif
17223#else
17224	ubfx	r12, r9, #16, #8
17225#endif
17226	eor	r5, r5, lr, lsl #24
17227	lsr	lr, r10, #24
17228	ldrb	r7, [r2, r7]
17229	ldrb	lr, [r2, lr]
17230	ldrb	r6, [r2, r6]
17231	ldrb	r12, [r2, r12]
17232	lsr	r11, r11, #24
17233	eor	r6, r6, r7, lsl #8
17234#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17235#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17236	lsl	r7, r8, #24
17237	lsr	r7, r7, #24
17238#else
17239	uxtb	r7, r8
17240#endif
17241#else
17242	ubfx	r7, r8, #0, #8
17243#endif
17244	eor	r6, r6, r12, lsl #16
17245#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17246#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17247	lsl	r12, r9, #16
17248	lsr	r12, r12, #24
17249#else
17250	uxtb	r12, r9, ror #8
17251#endif
17252#else
17253	ubfx	r12, r9, #8, #8
17254#endif
17255	eor	r6, r6, lr, lsl #24
17256#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17257#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17258	lsl	lr, r10, #8
17259	lsr	lr, lr, #24
17260#else
17261	uxtb	lr, r10, ror #16
17262#endif
17263#else
17264	ubfx	lr, r10, #16, #8
17265#endif
17266	ldrb	r11, [r2, r11]
17267	ldrb	r12, [r2, r12]
17268	ldrb	r7, [r2, r7]
17269	ldrb	lr, [r2, lr]
17270	eor	r12, r12, r11, lsl #16
17271	ldm	r3, {r8, r9, r10, r11}
17272	eor	r7, r7, r12, lsl #8
17273	eor	r7, r7, lr, lsl #16
17274	#   XOR in Key Schedule
17275	eor	r4, r4, r8
17276	eor	r5, r5, r9
17277	eor	r6, r6, r10
17278	eor	r7, r7, r11
17279#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
17280	pop	{r1, r3, r12, lr}
17281#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17282	eor	r8, r4, r4, ror #16
17283	eor	r9, r5, r5, ror #16
17284	eor	r10, r6, r6, ror #16
17285	eor	r11, r7, r7, ror #16
17286	bic	r8, r8, #0xff0000
17287	bic	r9, r9, #0xff0000
17288	bic	r10, r10, #0xff0000
17289	bic	r11, r11, #0xff0000
17290	ror	r4, r4, #8
17291	ror	r5, r5, #8
17292	ror	r6, r6, #8
17293	ror	r7, r7, #8
17294	eor	r4, r4, r8, lsr #8
17295	eor	r5, r5, r9, lsr #8
17296	eor	r6, r6, r10, lsr #8
17297	eor	r7, r7, r11, lsr #8
17298#else
17299	rev	r4, r4
17300	rev	r5, r5
17301	rev	r6, r6
17302	rev	r7, r7
17303#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
17304	str	r4, [r1]
17305	str	r5, [r1, #4]
17306	str	r6, [r1, #8]
17307	str	r7, [r1, #12]
17308	subs	r12, r12, #16
17309	add	lr, lr, #16
17310	add	r1, r1, #16
17311	bne	L_AES_ECB_decrypt_loop_block_256
17312	b	L_AES_ECB_decrypt_end
17313L_AES_ECB_decrypt_start_block_192:
17314L_AES_ECB_decrypt_loop_block_192:
17315	ldr	r4, [lr]
17316	ldr	r5, [lr, #4]
17317	ldr	r6, [lr, #8]
17318	ldr	r7, [lr, #12]
17319#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17320	eor	r8, r4, r4, ror #16
17321	eor	r9, r5, r5, ror #16
17322	eor	r10, r6, r6, ror #16
17323	eor	r11, r7, r7, ror #16
17324	bic	r8, r8, #0xff0000
17325	bic	r9, r9, #0xff0000
17326	bic	r10, r10, #0xff0000
17327	bic	r11, r11, #0xff0000
17328	ror	r4, r4, #8
17329	ror	r5, r5, #8
17330	ror	r6, r6, #8
17331	ror	r7, r7, #8
17332	eor	r4, r4, r8, lsr #8
17333	eor	r5, r5, r9, lsr #8
17334	eor	r6, r6, r10, lsr #8
17335	eor	r7, r7, r11, lsr #8
17336#else
17337	rev	r4, r4
17338	rev	r5, r5
17339	rev	r6, r6
17340	rev	r7, r7
17341#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
17342	push	{r1, r3, r12, lr}
17343	ldm	r3!, {r8, r9, r10, r11}
17344	# Round: 0 - XOR in key schedule
17345	eor	r4, r4, r8
17346	eor	r5, r5, r9
17347	eor	r6, r6, r10
17348	eor	r7, r7, r11
17349	mov	r1, #5
17350#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
17351	bl	AES_decrypt_block
17352#else
17353L_AES_ECB_decrypt_block_nr_192:
17354#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17355#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17356	lsl	r8, r7, #8
17357	lsr	r8, r8, #24
17358#else
17359	uxtb	r8, r7, ror #16
17360#endif
17361#else
17362	ubfx	r8, r7, #16, #8
17363#endif
17364	lsr	r11, r4, #24
17365#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17366#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17367	lsl	r12, r6, #16
17368	lsr	r12, r12, #24
17369#else
17370	uxtb	r12, r6, ror #8
17371#endif
17372#else
17373	ubfx	r12, r6, #8, #8
17374#endif
17375#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17376#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17377	lsl	lr, r5, #24
17378	lsr	lr, lr, #24
17379#else
17380	uxtb	lr, r5
17381#endif
17382#else
17383	ubfx	lr, r5, #0, #8
17384#endif
17385	ldr	r8, [r0, r8, lsl #2]
17386	ldr	r11, [r0, r11, lsl #2]
17387	ldr	r12, [r0, r12, lsl #2]
17388	ldr	lr, [r0, lr, lsl #2]
17389#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17390#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17391	lsl	r9, r4, #8
17392	lsr	r9, r9, #24
17393#else
17394	uxtb	r9, r4, ror #16
17395#endif
17396#else
17397	ubfx	r9, r4, #16, #8
17398#endif
17399	eor	r8, r8, r11, ror #24
17400	lsr	r11, r5, #24
17401	eor	r8, r8, r12, ror #8
17402#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17403#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17404	lsl	r12, r7, #16
17405	lsr	r12, r12, #24
17406#else
17407	uxtb	r12, r7, ror #8
17408#endif
17409#else
17410	ubfx	r12, r7, #8, #8
17411#endif
17412	eor	r8, r8, lr, ror #16
17413#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17414#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17415	lsl	lr, r6, #24
17416	lsr	lr, lr, #24
17417#else
17418	uxtb	lr, r6
17419#endif
17420#else
17421	ubfx	lr, r6, #0, #8
17422#endif
17423	ldr	r9, [r0, r9, lsl #2]
17424	ldr	r11, [r0, r11, lsl #2]
17425	ldr	r12, [r0, r12, lsl #2]
17426	ldr	lr, [r0, lr, lsl #2]
17427#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17428#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17429	lsl	r10, r5, #8
17430	lsr	r10, r10, #24
17431#else
17432	uxtb	r10, r5, ror #16
17433#endif
17434#else
17435	ubfx	r10, r5, #16, #8
17436#endif
17437	eor	r9, r9, r11, ror #24
17438	lsr	r11, r6, #24
17439	eor	r9, r9, r12, ror #8
17440#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17441#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17442	lsl	r12, r4, #16
17443	lsr	r12, r12, #24
17444#else
17445	uxtb	r12, r4, ror #8
17446#endif
17447#else
17448	ubfx	r12, r4, #8, #8
17449#endif
17450	eor	r9, r9, lr, ror #16
17451#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17452#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17453	lsl	lr, r7, #24
17454	lsr	lr, lr, #24
17455#else
17456	uxtb	lr, r7
17457#endif
17458#else
17459	ubfx	lr, r7, #0, #8
17460#endif
17461	ldr	r10, [r0, r10, lsl #2]
17462	ldr	r11, [r0, r11, lsl #2]
17463	ldr	r12, [r0, r12, lsl #2]
17464	ldr	lr, [r0, lr, lsl #2]
17465#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17466#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17467	lsl	r4, r4, #24
17468	lsr	r4, r4, #24
17469#else
17470	uxtb	r4, r4
17471#endif
17472#else
17473	ubfx	r4, r4, #0, #8
17474#endif
17475	eor	r10, r10, r11, ror #24
17476#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17477#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17478	lsl	r11, r6, #8
17479	lsr	r11, r11, #24
17480#else
17481	uxtb	r11, r6, ror #16
17482#endif
17483#else
17484	ubfx	r11, r6, #16, #8
17485#endif
17486	eor	r10, r10, r12, ror #8
17487	lsr	r12, r7, #24
17488	eor	r10, r10, lr, ror #16
17489#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17490#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17491	lsl	lr, r5, #16
17492	lsr	lr, lr, #24
17493#else
17494	uxtb	lr, r5, ror #8
17495#endif
17496#else
17497	ubfx	lr, r5, #8, #8
17498#endif
17499	ldr	r4, [r0, r4, lsl #2]
17500	ldr	r12, [r0, r12, lsl #2]
17501	ldr	r11, [r0, r11, lsl #2]
17502	ldr	lr, [r0, lr, lsl #2]
17503	eor	r12, r12, r4, ror #24
17504	ldm	r3!, {r4, r5, r6, r7}
17505	eor	r11, r11, lr, ror #8
17506	eor	r11, r11, r12, ror #24
17507	#   XOR in Key Schedule
17508	eor	r8, r8, r4
17509	eor	r9, r9, r5
17510	eor	r10, r10, r6
17511	eor	r11, r11, r7
17512#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17513#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17514	lsl	r4, r11, #8
17515	lsr	r4, r4, #24
17516#else
17517	uxtb	r4, r11, ror #16
17518#endif
17519#else
17520	ubfx	r4, r11, #16, #8
17521#endif
17522	lsr	r7, r8, #24
17523#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17524#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17525	lsl	r12, r10, #16
17526	lsr	r12, r12, #24
17527#else
17528	uxtb	r12, r10, ror #8
17529#endif
17530#else
17531	ubfx	r12, r10, #8, #8
17532#endif
17533#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17534#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17535	lsl	lr, r9, #24
17536	lsr	lr, lr, #24
17537#else
17538	uxtb	lr, r9
17539#endif
17540#else
17541	ubfx	lr, r9, #0, #8
17542#endif
17543	ldr	r4, [r0, r4, lsl #2]
17544	ldr	r7, [r0, r7, lsl #2]
17545	ldr	r12, [r0, r12, lsl #2]
17546	ldr	lr, [r0, lr, lsl #2]
17547#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17548#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17549	lsl	r5, r8, #8
17550	lsr	r5, r5, #24
17551#else
17552	uxtb	r5, r8, ror #16
17553#endif
17554#else
17555	ubfx	r5, r8, #16, #8
17556#endif
17557	eor	r4, r4, r7, ror #24
17558	lsr	r7, r9, #24
17559	eor	r4, r4, r12, ror #8
17560#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17561#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17562	lsl	r12, r11, #16
17563	lsr	r12, r12, #24
17564#else
17565	uxtb	r12, r11, ror #8
17566#endif
17567#else
17568	ubfx	r12, r11, #8, #8
17569#endif
17570	eor	r4, r4, lr, ror #16
17571#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17572#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17573	lsl	lr, r10, #24
17574	lsr	lr, lr, #24
17575#else
17576	uxtb	lr, r10
17577#endif
17578#else
17579	ubfx	lr, r10, #0, #8
17580#endif
17581	ldr	r5, [r0, r5, lsl #2]
17582	ldr	r7, [r0, r7, lsl #2]
17583	ldr	r12, [r0, r12, lsl #2]
17584	ldr	lr, [r0, lr, lsl #2]
17585#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17586#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17587	lsl	r6, r9, #8
17588	lsr	r6, r6, #24
17589#else
17590	uxtb	r6, r9, ror #16
17591#endif
17592#else
17593	ubfx	r6, r9, #16, #8
17594#endif
17595	eor	r5, r5, r7, ror #24
17596	lsr	r7, r10, #24
17597	eor	r5, r5, r12, ror #8
17598#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17599#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17600	lsl	r12, r8, #16
17601	lsr	r12, r12, #24
17602#else
17603	uxtb	r12, r8, ror #8
17604#endif
17605#else
17606	ubfx	r12, r8, #8, #8
17607#endif
17608	eor	r5, r5, lr, ror #16
17609#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17610#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17611	lsl	lr, r11, #24
17612	lsr	lr, lr, #24
17613#else
17614	uxtb	lr, r11
17615#endif
17616#else
17617	ubfx	lr, r11, #0, #8
17618#endif
17619	ldr	r6, [r0, r6, lsl #2]
17620	ldr	r7, [r0, r7, lsl #2]
17621	ldr	r12, [r0, r12, lsl #2]
17622	ldr	lr, [r0, lr, lsl #2]
17623#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17624#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17625	lsl	r8, r8, #24
17626	lsr	r8, r8, #24
17627#else
17628	uxtb	r8, r8
17629#endif
17630#else
17631	ubfx	r8, r8, #0, #8
17632#endif
17633	eor	r6, r6, r7, ror #24
17634#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17635#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17636	lsl	r7, r10, #8
17637	lsr	r7, r7, #24
17638#else
17639	uxtb	r7, r10, ror #16
17640#endif
17641#else
17642	ubfx	r7, r10, #16, #8
17643#endif
17644	eor	r6, r6, r12, ror #8
17645	lsr	r12, r11, #24
17646	eor	r6, r6, lr, ror #16
17647#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17648#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17649	lsl	lr, r9, #16
17650	lsr	lr, lr, #24
17651#else
17652	uxtb	lr, r9, ror #8
17653#endif
17654#else
17655	ubfx	lr, r9, #8, #8
17656#endif
17657	ldr	r8, [r0, r8, lsl #2]
17658	ldr	r12, [r0, r12, lsl #2]
17659	ldr	r7, [r0, r7, lsl #2]
17660	ldr	lr, [r0, lr, lsl #2]
17661	eor	r12, r12, r8, ror #24
17662	ldm	r3!, {r8, r9, r10, r11}
17663	eor	r7, r7, lr, ror #8
17664	eor	r7, r7, r12, ror #24
17665	#   XOR in Key Schedule
17666	eor	r4, r4, r8
17667	eor	r5, r5, r9
17668	eor	r6, r6, r10
17669	eor	r7, r7, r11
17670	subs	r1, r1, #1
17671	bne	L_AES_ECB_decrypt_block_nr_192
17672#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17673#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17674	lsl	r8, r7, #8
17675	lsr	r8, r8, #24
17676#else
17677	uxtb	r8, r7, ror #16
17678#endif
17679#else
17680	ubfx	r8, r7, #16, #8
17681#endif
17682	lsr	r11, r4, #24
17683#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17684#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17685	lsl	r12, r6, #16
17686	lsr	r12, r12, #24
17687#else
17688	uxtb	r12, r6, ror #8
17689#endif
17690#else
17691	ubfx	r12, r6, #8, #8
17692#endif
17693#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17694#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17695	lsl	lr, r5, #24
17696	lsr	lr, lr, #24
17697#else
17698	uxtb	lr, r5
17699#endif
17700#else
17701	ubfx	lr, r5, #0, #8
17702#endif
17703	ldr	r8, [r0, r8, lsl #2]
17704	ldr	r11, [r0, r11, lsl #2]
17705	ldr	r12, [r0, r12, lsl #2]
17706	ldr	lr, [r0, lr, lsl #2]
17707#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17708#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17709	lsl	r9, r4, #8
17710	lsr	r9, r9, #24
17711#else
17712	uxtb	r9, r4, ror #16
17713#endif
17714#else
17715	ubfx	r9, r4, #16, #8
17716#endif
17717	eor	r8, r8, r11, ror #24
17718	lsr	r11, r5, #24
17719	eor	r8, r8, r12, ror #8
17720#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17721#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17722	lsl	r12, r7, #16
17723	lsr	r12, r12, #24
17724#else
17725	uxtb	r12, r7, ror #8
17726#endif
17727#else
17728	ubfx	r12, r7, #8, #8
17729#endif
17730	eor	r8, r8, lr, ror #16
17731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17733	lsl	lr, r6, #24
17734	lsr	lr, lr, #24
17735#else
17736	uxtb	lr, r6
17737#endif
17738#else
17739	ubfx	lr, r6, #0, #8
17740#endif
17741	ldr	r9, [r0, r9, lsl #2]
17742	ldr	r11, [r0, r11, lsl #2]
17743	ldr	r12, [r0, r12, lsl #2]
17744	ldr	lr, [r0, lr, lsl #2]
17745#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17746#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17747	lsl	r10, r5, #8
17748	lsr	r10, r10, #24
17749#else
17750	uxtb	r10, r5, ror #16
17751#endif
17752#else
17753	ubfx	r10, r5, #16, #8
17754#endif
17755	eor	r9, r9, r11, ror #24
17756	lsr	r11, r6, #24
17757	eor	r9, r9, r12, ror #8
17758#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17759#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17760	lsl	r12, r4, #16
17761	lsr	r12, r12, #24
17762#else
17763	uxtb	r12, r4, ror #8
17764#endif
17765#else
17766	ubfx	r12, r4, #8, #8
17767#endif
17768	eor	r9, r9, lr, ror #16
17769#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17770#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17771	lsl	lr, r7, #24
17772	lsr	lr, lr, #24
17773#else
17774	uxtb	lr, r7
17775#endif
17776#else
17777	ubfx	lr, r7, #0, #8
17778#endif
17779	ldr	r10, [r0, r10, lsl #2]
17780	ldr	r11, [r0, r11, lsl #2]
17781	ldr	r12, [r0, r12, lsl #2]
17782	ldr	lr, [r0, lr, lsl #2]
17783#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17784#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17785	lsl	r4, r4, #24
17786	lsr	r4, r4, #24
17787#else
17788	uxtb	r4, r4
17789#endif
17790#else
17791	ubfx	r4, r4, #0, #8
17792#endif
17793	eor	r10, r10, r11, ror #24
17794#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17795#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17796	lsl	r11, r6, #8
17797	lsr	r11, r11, #24
17798#else
17799	uxtb	r11, r6, ror #16
17800#endif
17801#else
17802	ubfx	r11, r6, #16, #8
17803#endif
17804	eor	r10, r10, r12, ror #8
17805	lsr	r12, r7, #24
17806	eor	r10, r10, lr, ror #16
17807#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17808#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17809	lsl	lr, r5, #16
17810	lsr	lr, lr, #24
17811#else
17812	uxtb	lr, r5, ror #8
17813#endif
17814#else
17815	ubfx	lr, r5, #8, #8
17816#endif
17817	ldr	r4, [r0, r4, lsl #2]
17818	ldr	r12, [r0, r12, lsl #2]
17819	ldr	r11, [r0, r11, lsl #2]
17820	ldr	lr, [r0, lr, lsl #2]
17821	eor	r12, r12, r4, ror #24
17822	ldm	r3!, {r4, r5, r6, r7}
17823	eor	r11, r11, lr, ror #8
17824	eor	r11, r11, r12, ror #24
17825	#   XOR in Key Schedule
17826	eor	r8, r8, r4
17827	eor	r9, r9, r5
17828	eor	r10, r10, r6
17829	eor	r11, r11, r7
17830#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17831#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17832	lsl	r4, r9, #24
17833	lsr	r4, r4, #24
17834#else
17835	uxtb	r4, r9
17836#endif
17837#else
17838	ubfx	r4, r9, #0, #8
17839#endif
17840#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17841#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17842	lsl	r7, r10, #16
17843	lsr	r7, r7, #24
17844#else
17845	uxtb	r7, r10, ror #8
17846#endif
17847#else
17848	ubfx	r7, r10, #8, #8
17849#endif
17850#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17851#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17852	lsl	r12, r11, #8
17853	lsr	r12, r12, #24
17854#else
17855	uxtb	r12, r11, ror #16
17856#endif
17857#else
17858	ubfx	r12, r11, #16, #8
17859#endif
17860	lsr	lr, r8, #24
17861	ldrb	r4, [r2, r4]
17862	ldrb	r7, [r2, r7]
17863	ldrb	r12, [r2, r12]
17864	ldrb	lr, [r2, lr]
17865#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17866#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17867	lsl	r5, r10, #24
17868	lsr	r5, r5, #24
17869#else
17870	uxtb	r5, r10
17871#endif
17872#else
17873	ubfx	r5, r10, #0, #8
17874#endif
17875	eor	r4, r4, r7, lsl #8
17876#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17877#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17878	lsl	r7, r11, #16
17879	lsr	r7, r7, #24
17880#else
17881	uxtb	r7, r11, ror #8
17882#endif
17883#else
17884	ubfx	r7, r11, #8, #8
17885#endif
17886	eor	r4, r4, r12, lsl #16
17887#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17888#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17889	lsl	r12, r8, #8
17890	lsr	r12, r12, #24
17891#else
17892	uxtb	r12, r8, ror #16
17893#endif
17894#else
17895	ubfx	r12, r8, #16, #8
17896#endif
17897	eor	r4, r4, lr, lsl #24
17898	lsr	lr, r9, #24
17899	ldrb	r7, [r2, r7]
17900	ldrb	lr, [r2, lr]
17901	ldrb	r5, [r2, r5]
17902	ldrb	r12, [r2, r12]
17903#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17904#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17905	lsl	r6, r11, #24
17906	lsr	r6, r6, #24
17907#else
17908	uxtb	r6, r11
17909#endif
17910#else
17911	ubfx	r6, r11, #0, #8
17912#endif
17913	eor	r5, r5, r7, lsl #8
17914#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17915#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17916	lsl	r7, r8, #16
17917	lsr	r7, r7, #24
17918#else
17919	uxtb	r7, r8, ror #8
17920#endif
17921#else
17922	ubfx	r7, r8, #8, #8
17923#endif
17924	eor	r5, r5, r12, lsl #16
17925#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17926#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17927	lsl	r12, r9, #8
17928	lsr	r12, r12, #24
17929#else
17930	uxtb	r12, r9, ror #16
17931#endif
17932#else
17933	ubfx	r12, r9, #16, #8
17934#endif
17935	eor	r5, r5, lr, lsl #24
17936	lsr	lr, r10, #24
17937	ldrb	r7, [r2, r7]
17938	ldrb	lr, [r2, lr]
17939	ldrb	r6, [r2, r6]
17940	ldrb	r12, [r2, r12]
17941	lsr	r11, r11, #24
17942	eor	r6, r6, r7, lsl #8
17943#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17944#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17945	lsl	r7, r8, #24
17946	lsr	r7, r7, #24
17947#else
17948	uxtb	r7, r8
17949#endif
17950#else
17951	ubfx	r7, r8, #0, #8
17952#endif
17953	eor	r6, r6, r12, lsl #16
17954#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17955#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17956	lsl	r12, r9, #16
17957	lsr	r12, r12, #24
17958#else
17959	uxtb	r12, r9, ror #8
17960#endif
17961#else
17962	ubfx	r12, r9, #8, #8
17963#endif
17964	eor	r6, r6, lr, lsl #24
17965#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17966#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17967	lsl	lr, r10, #8
17968	lsr	lr, lr, #24
17969#else
17970	uxtb	lr, r10, ror #16
17971#endif
17972#else
17973	ubfx	lr, r10, #16, #8
17974#endif
17975	ldrb	r11, [r2, r11]
17976	ldrb	r12, [r2, r12]
17977	ldrb	r7, [r2, r7]
17978	ldrb	lr, [r2, lr]
17979	eor	r12, r12, r11, lsl #16
17980	ldm	r3, {r8, r9, r10, r11}
17981	eor	r7, r7, r12, lsl #8
17982	eor	r7, r7, lr, lsl #16
17983	#   XOR in Key Schedule
17984	eor	r4, r4, r8
17985	eor	r5, r5, r9
17986	eor	r6, r6, r10
17987	eor	r7, r7, r11
17988#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
17989	pop	{r1, r3, r12, lr}
17990#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17991	eor	r8, r4, r4, ror #16
17992	eor	r9, r5, r5, ror #16
17993	eor	r10, r6, r6, ror #16
17994	eor	r11, r7, r7, ror #16
17995	bic	r8, r8, #0xff0000
17996	bic	r9, r9, #0xff0000
17997	bic	r10, r10, #0xff0000
17998	bic	r11, r11, #0xff0000
17999	ror	r4, r4, #8
18000	ror	r5, r5, #8
18001	ror	r6, r6, #8
18002	ror	r7, r7, #8
18003	eor	r4, r4, r8, lsr #8
18004	eor	r5, r5, r9, lsr #8
18005	eor	r6, r6, r10, lsr #8
18006	eor	r7, r7, r11, lsr #8
18007#else
18008	rev	r4, r4
18009	rev	r5, r5
18010	rev	r6, r6
18011	rev	r7, r7
18012#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
18013	str	r4, [r1]
18014	str	r5, [r1, #4]
18015	str	r6, [r1, #8]
18016	str	r7, [r1, #12]
18017	subs	r12, r12, #16
18018	add	lr, lr, #16
18019	add	r1, r1, #16
18020	bne	L_AES_ECB_decrypt_loop_block_192
18021	b	L_AES_ECB_decrypt_end
18022L_AES_ECB_decrypt_start_block_128:
18023L_AES_ECB_decrypt_loop_block_128:
18024	ldr	r4, [lr]
18025	ldr	r5, [lr, #4]
18026	ldr	r6, [lr, #8]
18027	ldr	r7, [lr, #12]
18028#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18029	eor	r8, r4, r4, ror #16
18030	eor	r9, r5, r5, ror #16
18031	eor	r10, r6, r6, ror #16
18032	eor	r11, r7, r7, ror #16
18033	bic	r8, r8, #0xff0000
18034	bic	r9, r9, #0xff0000
18035	bic	r10, r10, #0xff0000
18036	bic	r11, r11, #0xff0000
18037	ror	r4, r4, #8
18038	ror	r5, r5, #8
18039	ror	r6, r6, #8
18040	ror	r7, r7, #8
18041	eor	r4, r4, r8, lsr #8
18042	eor	r5, r5, r9, lsr #8
18043	eor	r6, r6, r10, lsr #8
18044	eor	r7, r7, r11, lsr #8
18045#else
18046	rev	r4, r4
18047	rev	r5, r5
18048	rev	r6, r6
18049	rev	r7, r7
18050#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
18051	push	{r1, r3, r12, lr}
18052	ldm	r3!, {r8, r9, r10, r11}
18053	# Round: 0 - XOR in key schedule
18054	eor	r4, r4, r8
18055	eor	r5, r5, r9
18056	eor	r6, r6, r10
18057	eor	r7, r7, r11
18058	mov	r1, #4
18059#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
18060	bl	AES_decrypt_block
18061#else
18062L_AES_ECB_decrypt_block_nr_128:
18063#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18064#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18065	lsl	r8, r7, #8
18066	lsr	r8, r8, #24
18067#else
18068	uxtb	r8, r7, ror #16
18069#endif
18070#else
18071	ubfx	r8, r7, #16, #8
18072#endif
18073	lsr	r11, r4, #24
18074#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18075#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18076	lsl	r12, r6, #16
18077	lsr	r12, r12, #24
18078#else
18079	uxtb	r12, r6, ror #8
18080#endif
18081#else
18082	ubfx	r12, r6, #8, #8
18083#endif
18084#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18085#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18086	lsl	lr, r5, #24
18087	lsr	lr, lr, #24
18088#else
18089	uxtb	lr, r5
18090#endif
18091#else
18092	ubfx	lr, r5, #0, #8
18093#endif
18094	ldr	r8, [r0, r8, lsl #2]
18095	ldr	r11, [r0, r11, lsl #2]
18096	ldr	r12, [r0, r12, lsl #2]
18097	ldr	lr, [r0, lr, lsl #2]
18098#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18099#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18100	lsl	r9, r4, #8
18101	lsr	r9, r9, #24
18102#else
18103	uxtb	r9, r4, ror #16
18104#endif
18105#else
18106	ubfx	r9, r4, #16, #8
18107#endif
18108	eor	r8, r8, r11, ror #24
18109	lsr	r11, r5, #24
18110	eor	r8, r8, r12, ror #8
18111#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18112#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18113	lsl	r12, r7, #16
18114	lsr	r12, r12, #24
18115#else
18116	uxtb	r12, r7, ror #8
18117#endif
18118#else
18119	ubfx	r12, r7, #8, #8
18120#endif
18121	eor	r8, r8, lr, ror #16
18122#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18123#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18124	lsl	lr, r6, #24
18125	lsr	lr, lr, #24
18126#else
18127	uxtb	lr, r6
18128#endif
18129#else
18130	ubfx	lr, r6, #0, #8
18131#endif
18132	ldr	r9, [r0, r9, lsl #2]
18133	ldr	r11, [r0, r11, lsl #2]
18134	ldr	r12, [r0, r12, lsl #2]
18135	ldr	lr, [r0, lr, lsl #2]
18136#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18137#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18138	lsl	r10, r5, #8
18139	lsr	r10, r10, #24
18140#else
18141	uxtb	r10, r5, ror #16
18142#endif
18143#else
18144	ubfx	r10, r5, #16, #8
18145#endif
18146	eor	r9, r9, r11, ror #24
18147	lsr	r11, r6, #24
18148	eor	r9, r9, r12, ror #8
18149#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18150#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18151	lsl	r12, r4, #16
18152	lsr	r12, r12, #24
18153#else
18154	uxtb	r12, r4, ror #8
18155#endif
18156#else
18157	ubfx	r12, r4, #8, #8
18158#endif
18159	eor	r9, r9, lr, ror #16
18160#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18161#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18162	lsl	lr, r7, #24
18163	lsr	lr, lr, #24
18164#else
18165	uxtb	lr, r7
18166#endif
18167#else
18168	ubfx	lr, r7, #0, #8
18169#endif
18170	ldr	r10, [r0, r10, lsl #2]
18171	ldr	r11, [r0, r11, lsl #2]
18172	ldr	r12, [r0, r12, lsl #2]
18173	ldr	lr, [r0, lr, lsl #2]
18174#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18175#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18176	lsl	r4, r4, #24
18177	lsr	r4, r4, #24
18178#else
18179	uxtb	r4, r4
18180#endif
18181#else
18182	ubfx	r4, r4, #0, #8
18183#endif
18184	eor	r10, r10, r11, ror #24
18185#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18186#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18187	lsl	r11, r6, #8
18188	lsr	r11, r11, #24
18189#else
18190	uxtb	r11, r6, ror #16
18191#endif
18192#else
18193	ubfx	r11, r6, #16, #8
18194#endif
18195	eor	r10, r10, r12, ror #8
18196	lsr	r12, r7, #24
18197	eor	r10, r10, lr, ror #16
18198#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18200	lsl	lr, r5, #16
18201	lsr	lr, lr, #24
18202#else
18203	uxtb	lr, r5, ror #8
18204#endif
18205#else
18206	ubfx	lr, r5, #8, #8
18207#endif
18208	ldr	r4, [r0, r4, lsl #2]
18209	ldr	r12, [r0, r12, lsl #2]
18210	ldr	r11, [r0, r11, lsl #2]
18211	ldr	lr, [r0, lr, lsl #2]
18212	eor	r12, r12, r4, ror #24
18213	ldm	r3!, {r4, r5, r6, r7}
18214	eor	r11, r11, lr, ror #8
18215	eor	r11, r11, r12, ror #24
18216	#   XOR in Key Schedule
18217	eor	r8, r8, r4
18218	eor	r9, r9, r5
18219	eor	r10, r10, r6
18220	eor	r11, r11, r7
18221#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18223	lsl	r4, r11, #8
18224	lsr	r4, r4, #24
18225#else
18226	uxtb	r4, r11, ror #16
18227#endif
18228#else
18229	ubfx	r4, r11, #16, #8
18230#endif
18231	lsr	r7, r8, #24
18232#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18233#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18234	lsl	r12, r10, #16
18235	lsr	r12, r12, #24
18236#else
18237	uxtb	r12, r10, ror #8
18238#endif
18239#else
18240	ubfx	r12, r10, #8, #8
18241#endif
18242#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18243#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18244	lsl	lr, r9, #24
18245	lsr	lr, lr, #24
18246#else
18247	uxtb	lr, r9
18248#endif
18249#else
18250	ubfx	lr, r9, #0, #8
18251#endif
18252	ldr	r4, [r0, r4, lsl #2]
18253	ldr	r7, [r0, r7, lsl #2]
18254	ldr	r12, [r0, r12, lsl #2]
18255	ldr	lr, [r0, lr, lsl #2]
18256#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18257#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18258	lsl	r5, r8, #8
18259	lsr	r5, r5, #24
18260#else
18261	uxtb	r5, r8, ror #16
18262#endif
18263#else
18264	ubfx	r5, r8, #16, #8
18265#endif
18266	eor	r4, r4, r7, ror #24
18267	lsr	r7, r9, #24
18268	eor	r4, r4, r12, ror #8
18269#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18270#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18271	lsl	r12, r11, #16
18272	lsr	r12, r12, #24
18273#else
18274	uxtb	r12, r11, ror #8
18275#endif
18276#else
18277	ubfx	r12, r11, #8, #8
18278#endif
18279	eor	r4, r4, lr, ror #16
18280#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18281#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18282	lsl	lr, r10, #24
18283	lsr	lr, lr, #24
18284#else
18285	uxtb	lr, r10
18286#endif
18287#else
18288	ubfx	lr, r10, #0, #8
18289#endif
18290	ldr	r5, [r0, r5, lsl #2]
18291	ldr	r7, [r0, r7, lsl #2]
18292	ldr	r12, [r0, r12, lsl #2]
18293	ldr	lr, [r0, lr, lsl #2]
18294#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18295#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18296	lsl	r6, r9, #8
18297	lsr	r6, r6, #24
18298#else
18299	uxtb	r6, r9, ror #16
18300#endif
18301#else
18302	ubfx	r6, r9, #16, #8
18303#endif
18304	eor	r5, r5, r7, ror #24
18305	lsr	r7, r10, #24
18306	eor	r5, r5, r12, ror #8
18307#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18308#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18309	lsl	r12, r8, #16
18310	lsr	r12, r12, #24
18311#else
18312	uxtb	r12, r8, ror #8
18313#endif
18314#else
18315	ubfx	r12, r8, #8, #8
18316#endif
18317	eor	r5, r5, lr, ror #16
18318#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18319#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18320	lsl	lr, r11, #24
18321	lsr	lr, lr, #24
18322#else
18323	uxtb	lr, r11
18324#endif
18325#else
18326	ubfx	lr, r11, #0, #8
18327#endif
18328	ldr	r6, [r0, r6, lsl #2]
18329	ldr	r7, [r0, r7, lsl #2]
18330	ldr	r12, [r0, r12, lsl #2]
18331	ldr	lr, [r0, lr, lsl #2]
18332#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18333#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18334	lsl	r8, r8, #24
18335	lsr	r8, r8, #24
18336#else
18337	uxtb	r8, r8
18338#endif
18339#else
18340	ubfx	r8, r8, #0, #8
18341#endif
18342	eor	r6, r6, r7, ror #24
18343#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18344#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18345	lsl	r7, r10, #8
18346	lsr	r7, r7, #24
18347#else
18348	uxtb	r7, r10, ror #16
18349#endif
18350#else
18351	ubfx	r7, r10, #16, #8
18352#endif
18353	eor	r6, r6, r12, ror #8
18354	lsr	r12, r11, #24
18355	eor	r6, r6, lr, ror #16
18356#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18357#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18358	lsl	lr, r9, #16
18359	lsr	lr, lr, #24
18360#else
18361	uxtb	lr, r9, ror #8
18362#endif
18363#else
18364	ubfx	lr, r9, #8, #8
18365#endif
18366	ldr	r8, [r0, r8, lsl #2]
18367	ldr	r12, [r0, r12, lsl #2]
18368	ldr	r7, [r0, r7, lsl #2]
18369	ldr	lr, [r0, lr, lsl #2]
18370	eor	r12, r12, r8, ror #24
18371	ldm	r3!, {r8, r9, r10, r11}
18372	eor	r7, r7, lr, ror #8
18373	eor	r7, r7, r12, ror #24
18374	#   XOR in Key Schedule
18375	eor	r4, r4, r8
18376	eor	r5, r5, r9
18377	eor	r6, r6, r10
18378	eor	r7, r7, r11
18379	subs	r1, r1, #1
18380	bne	L_AES_ECB_decrypt_block_nr_128
18381#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18382#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18383	lsl	r8, r7, #8
18384	lsr	r8, r8, #24
18385#else
18386	uxtb	r8, r7, ror #16
18387#endif
18388#else
18389	ubfx	r8, r7, #16, #8
18390#endif
18391	lsr	r11, r4, #24
18392#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18393#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18394	lsl	r12, r6, #16
18395	lsr	r12, r12, #24
18396#else
18397	uxtb	r12, r6, ror #8
18398#endif
18399#else
18400	ubfx	r12, r6, #8, #8
18401#endif
18402#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18403#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18404	lsl	lr, r5, #24
18405	lsr	lr, lr, #24
18406#else
18407	uxtb	lr, r5
18408#endif
18409#else
18410	ubfx	lr, r5, #0, #8
18411#endif
18412	ldr	r8, [r0, r8, lsl #2]
18413	ldr	r11, [r0, r11, lsl #2]
18414	ldr	r12, [r0, r12, lsl #2]
18415	ldr	lr, [r0, lr, lsl #2]
18416#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18417#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18418	lsl	r9, r4, #8
18419	lsr	r9, r9, #24
18420#else
18421	uxtb	r9, r4, ror #16
18422#endif
18423#else
18424	ubfx	r9, r4, #16, #8
18425#endif
18426	eor	r8, r8, r11, ror #24
18427	lsr	r11, r5, #24
18428	eor	r8, r8, r12, ror #8
18429#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18430#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18431	lsl	r12, r7, #16
18432	lsr	r12, r12, #24
18433#else
18434	uxtb	r12, r7, ror #8
18435#endif
18436#else
18437	ubfx	r12, r7, #8, #8
18438#endif
18439	eor	r8, r8, lr, ror #16
18440#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18441#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18442	lsl	lr, r6, #24
18443	lsr	lr, lr, #24
18444#else
18445	uxtb	lr, r6
18446#endif
18447#else
18448	ubfx	lr, r6, #0, #8
18449#endif
18450	ldr	r9, [r0, r9, lsl #2]
18451	ldr	r11, [r0, r11, lsl #2]
18452	ldr	r12, [r0, r12, lsl #2]
18453	ldr	lr, [r0, lr, lsl #2]
18454#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18455#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18456	lsl	r10, r5, #8
18457	lsr	r10, r10, #24
18458#else
18459	uxtb	r10, r5, ror #16
18460#endif
18461#else
18462	ubfx	r10, r5, #16, #8
18463#endif
18464	eor	r9, r9, r11, ror #24
18465	lsr	r11, r6, #24
18466	eor	r9, r9, r12, ror #8
18467#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18468#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18469	lsl	r12, r4, #16
18470	lsr	r12, r12, #24
18471#else
18472	uxtb	r12, r4, ror #8
18473#endif
18474#else
18475	ubfx	r12, r4, #8, #8
18476#endif
18477	eor	r9, r9, lr, ror #16
18478#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18479#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18480	lsl	lr, r7, #24
18481	lsr	lr, lr, #24
18482#else
18483	uxtb	lr, r7
18484#endif
18485#else
18486	ubfx	lr, r7, #0, #8
18487#endif
18488	ldr	r10, [r0, r10, lsl #2]
18489	ldr	r11, [r0, r11, lsl #2]
18490	ldr	r12, [r0, r12, lsl #2]
18491	ldr	lr, [r0, lr, lsl #2]
18492#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18493#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18494	lsl	r4, r4, #24
18495	lsr	r4, r4, #24
18496#else
18497	uxtb	r4, r4
18498#endif
18499#else
18500	ubfx	r4, r4, #0, #8
18501#endif
18502	eor	r10, r10, r11, ror #24
18503#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18504#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18505	lsl	r11, r6, #8
18506	lsr	r11, r11, #24
18507#else
18508	uxtb	r11, r6, ror #16
18509#endif
18510#else
18511	ubfx	r11, r6, #16, #8
18512#endif
18513	eor	r10, r10, r12, ror #8
18514	lsr	r12, r7, #24
18515	eor	r10, r10, lr, ror #16
18516#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18517#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18518	lsl	lr, r5, #16
18519	lsr	lr, lr, #24
18520#else
18521	uxtb	lr, r5, ror #8
18522#endif
18523#else
18524	ubfx	lr, r5, #8, #8
18525#endif
18526	ldr	r4, [r0, r4, lsl #2]
18527	ldr	r12, [r0, r12, lsl #2]
18528	ldr	r11, [r0, r11, lsl #2]
18529	ldr	lr, [r0, lr, lsl #2]
18530	eor	r12, r12, r4, ror #24
18531	ldm	r3!, {r4, r5, r6, r7}
18532	eor	r11, r11, lr, ror #8
18533	eor	r11, r11, r12, ror #24
18534	#   XOR in Key Schedule
18535	eor	r8, r8, r4
18536	eor	r9, r9, r5
18537	eor	r10, r10, r6
18538	eor	r11, r11, r7
18539#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18540#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18541	lsl	r4, r9, #24
18542	lsr	r4, r4, #24
18543#else
18544	uxtb	r4, r9
18545#endif
18546#else
18547	ubfx	r4, r9, #0, #8
18548#endif
18549#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18550#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18551	lsl	r7, r10, #16
18552	lsr	r7, r7, #24
18553#else
18554	uxtb	r7, r10, ror #8
18555#endif
18556#else
18557	ubfx	r7, r10, #8, #8
18558#endif
18559#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18560#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18561	lsl	r12, r11, #8
18562	lsr	r12, r12, #24
18563#else
18564	uxtb	r12, r11, ror #16
18565#endif
18566#else
18567	ubfx	r12, r11, #16, #8
18568#endif
18569	lsr	lr, r8, #24
18570	ldrb	r4, [r2, r4]
18571	ldrb	r7, [r2, r7]
18572	ldrb	r12, [r2, r12]
18573	ldrb	lr, [r2, lr]
18574#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18575#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18576	lsl	r5, r10, #24
18577	lsr	r5, r5, #24
18578#else
18579	uxtb	r5, r10
18580#endif
18581#else
18582	ubfx	r5, r10, #0, #8
18583#endif
18584	eor	r4, r4, r7, lsl #8
18585#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18586#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18587	lsl	r7, r11, #16
18588	lsr	r7, r7, #24
18589#else
18590	uxtb	r7, r11, ror #8
18591#endif
18592#else
18593	ubfx	r7, r11, #8, #8
18594#endif
18595	eor	r4, r4, r12, lsl #16
18596#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18597#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18598	lsl	r12, r8, #8
18599	lsr	r12, r12, #24
18600#else
18601	uxtb	r12, r8, ror #16
18602#endif
18603#else
18604	ubfx	r12, r8, #16, #8
18605#endif
18606	eor	r4, r4, lr, lsl #24
18607	lsr	lr, r9, #24
18608	ldrb	r7, [r2, r7]
18609	ldrb	lr, [r2, lr]
18610	ldrb	r5, [r2, r5]
18611	ldrb	r12, [r2, r12]
18612#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18613#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18614	lsl	r6, r11, #24
18615	lsr	r6, r6, #24
18616#else
18617	uxtb	r6, r11
18618#endif
18619#else
18620	ubfx	r6, r11, #0, #8
18621#endif
18622	eor	r5, r5, r7, lsl #8
18623#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18624#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18625	lsl	r7, r8, #16
18626	lsr	r7, r7, #24
18627#else
18628	uxtb	r7, r8, ror #8
18629#endif
18630#else
18631	ubfx	r7, r8, #8, #8
18632#endif
18633	eor	r5, r5, r12, lsl #16
18634#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18635#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18636	lsl	r12, r9, #8
18637	lsr	r12, r12, #24
18638#else
18639	uxtb	r12, r9, ror #16
18640#endif
18641#else
18642	ubfx	r12, r9, #16, #8
18643#endif
18644	eor	r5, r5, lr, lsl #24
18645	lsr	lr, r10, #24
18646	ldrb	r7, [r2, r7]
18647	ldrb	lr, [r2, lr]
18648	ldrb	r6, [r2, r6]
18649	ldrb	r12, [r2, r12]
18650	lsr	r11, r11, #24
18651	eor	r6, r6, r7, lsl #8
18652#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18653#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18654	lsl	r7, r8, #24
18655	lsr	r7, r7, #24
18656#else
18657	uxtb	r7, r8
18658#endif
18659#else
18660	ubfx	r7, r8, #0, #8
18661#endif
18662	eor	r6, r6, r12, lsl #16
18663#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18664#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18665	lsl	r12, r9, #16
18666	lsr	r12, r12, #24
18667#else
18668	uxtb	r12, r9, ror #8
18669#endif
18670#else
18671	ubfx	r12, r9, #8, #8
18672#endif
18673	eor	r6, r6, lr, lsl #24
18674#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18675#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18676	lsl	lr, r10, #8
18677	lsr	lr, lr, #24
18678#else
18679	uxtb	lr, r10, ror #16
18680#endif
18681#else
18682	ubfx	lr, r10, #16, #8
18683#endif
18684	ldrb	r11, [r2, r11]
18685	ldrb	r12, [r2, r12]
18686	ldrb	r7, [r2, r7]
18687	ldrb	lr, [r2, lr]
18688	eor	r12, r12, r11, lsl #16
18689	ldm	r3, {r8, r9, r10, r11}
18690	eor	r7, r7, r12, lsl #8
18691	eor	r7, r7, lr, lsl #16
18692	#   XOR in Key Schedule
18693	eor	r4, r4, r8
18694	eor	r5, r5, r9
18695	eor	r6, r6, r10
18696	eor	r7, r7, r11
18697#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
18698	pop	{r1, r3, r12, lr}
18699#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18700	eor	r8, r4, r4, ror #16
18701	eor	r9, r5, r5, ror #16
18702	eor	r10, r6, r6, ror #16
18703	eor	r11, r7, r7, ror #16
18704	bic	r8, r8, #0xff0000
18705	bic	r9, r9, #0xff0000
18706	bic	r10, r10, #0xff0000
18707	bic	r11, r11, #0xff0000
18708	ror	r4, r4, #8
18709	ror	r5, r5, #8
18710	ror	r6, r6, #8
18711	ror	r7, r7, #8
18712	eor	r4, r4, r8, lsr #8
18713	eor	r5, r5, r9, lsr #8
18714	eor	r6, r6, r10, lsr #8
18715	eor	r7, r7, r11, lsr #8
18716#else
18717	rev	r4, r4
18718	rev	r5, r5
18719	rev	r6, r6
18720	rev	r7, r7
18721#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
18722	str	r4, [r1]
18723	str	r5, [r1, #4]
18724	str	r6, [r1, #8]
18725	str	r7, [r1, #12]
18726	subs	r12, r12, #16
18727	add	lr, lr, #16
18728	add	r1, r1, #16
18729	bne	L_AES_ECB_decrypt_loop_block_128
18730L_AES_ECB_decrypt_end:
18731	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
18732	.size	AES_ECB_decrypt,.-AES_ECB_decrypt
18733#endif /* WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER || defined(HAVE_AES_ECB) */
18734#ifdef HAVE_AES_CBC
18735#ifndef __APPLE__
18736	.text
18737	.type	L_AES_ARM32_cbc_td4, %object
18738	.size	L_AES_ARM32_cbc_td4, 256
18739#else
18740	.section	__DATA,__data
18741#endif /* __APPLE__ */
18742	# 4-byte aligned, 32-bit aligned
18743#ifndef __APPLE__
18744	.align	2
18745#else
18746	.p2align	2
18747#endif /* __APPLE__ */
18748L_AES_ARM32_cbc_td4:
18749	.byte	0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
18750	.byte	0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
18751	.byte	0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
18752	.byte	0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
18753	.byte	0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
18754	.byte	0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
18755	.byte	0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
18756	.byte	0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
18757	.byte	0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
18758	.byte	0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
18759	.byte	0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
18760	.byte	0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
18761	.byte	0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
18762	.byte	0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
18763	.byte	0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
18764	.byte	0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
18765	.byte	0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
18766	.byte	0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
18767	.byte	0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
18768	.byte	0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
18769	.byte	0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
18770	.byte	0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
18771	.byte	0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
18772	.byte	0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
18773	.byte	0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
18774	.byte	0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
18775	.byte	0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
18776	.byte	0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
18777	.byte	0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
18778	.byte	0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
18779	.byte	0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
18780	.byte	0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
18781	.text
18782	.align	4
18783	.globl	AES_CBC_decrypt
18784	.type	AES_CBC_decrypt, %function
18785AES_CBC_decrypt:
18786	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
18787	mov	lr, r0
18788	adr	r0, L_AES_ARM32_td_ecb
18789	ldr	r0, [r0]
18790	mov	r12, r2
18791	adr	r2, L_AES_ARM32_cbc_td4
18792	ldr	r8, [sp, #36]
18793	ldr	r4, [sp, #40]
18794	push	{r3-r4}
18795	cmp	r8, #10
18796	beq	L_AES_CBC_decrypt_loop_block_128
18797	cmp	r8, #12
18798	beq	L_AES_CBC_decrypt_loop_block_192
18799L_AES_CBC_decrypt_loop_block_256:
18800	push	{r1, r12, lr}
18801	ldr	r4, [lr]
18802	ldr	r5, [lr, #4]
18803	ldr	r6, [lr, #8]
18804	ldr	r7, [lr, #12]
18805	ldr	lr, [sp, #16]
18806#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18807	str	r4, [lr, #16]
18808	str	r5, [lr, #20]
18809#else
18810	strd	r4, r5, [lr, #16]
18811#endif
18812#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18813	str	r6, [lr, #24]
18814	str	r7, [lr, #28]
18815#else
18816	strd	r6, r7, [lr, #24]
18817#endif
18818#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18819	eor	r8, r4, r4, ror #16
18820	eor	r9, r5, r5, ror #16
18821	eor	r10, r6, r6, ror #16
18822	eor	r11, r7, r7, ror #16
18823	bic	r8, r8, #0xff0000
18824	bic	r9, r9, #0xff0000
18825	bic	r10, r10, #0xff0000
18826	bic	r11, r11, #0xff0000
18827	ror	r4, r4, #8
18828	ror	r5, r5, #8
18829	ror	r6, r6, #8
18830	ror	r7, r7, #8
18831	eor	r4, r4, r8, lsr #8
18832	eor	r5, r5, r9, lsr #8
18833	eor	r6, r6, r10, lsr #8
18834	eor	r7, r7, r11, lsr #8
18835#else
18836	rev	r4, r4
18837	rev	r5, r5
18838	rev	r6, r6
18839	rev	r7, r7
18840#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
18841	ldm	r3!, {r8, r9, r10, r11}
18842	# Round: 0 - XOR in key schedule
18843	eor	r4, r4, r8
18844	eor	r5, r5, r9
18845	eor	r6, r6, r10
18846	eor	r7, r7, r11
18847	mov	r1, #6
18848#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
18849	bl	AES_decrypt_block
18850#else
18851L_AES_CBC_decrypt_block_nr_256_odd:
18852#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18853#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18854	lsl	r8, r7, #8
18855	lsr	r8, r8, #24
18856#else
18857	uxtb	r8, r7, ror #16
18858#endif
18859#else
18860	ubfx	r8, r7, #16, #8
18861#endif
18862	lsr	r11, r4, #24
18863#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18864#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18865	lsl	r12, r6, #16
18866	lsr	r12, r12, #24
18867#else
18868	uxtb	r12, r6, ror #8
18869#endif
18870#else
18871	ubfx	r12, r6, #8, #8
18872#endif
18873#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18874#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18875	lsl	lr, r5, #24
18876	lsr	lr, lr, #24
18877#else
18878	uxtb	lr, r5
18879#endif
18880#else
18881	ubfx	lr, r5, #0, #8
18882#endif
18883	ldr	r8, [r0, r8, lsl #2]
18884	ldr	r11, [r0, r11, lsl #2]
18885	ldr	r12, [r0, r12, lsl #2]
18886	ldr	lr, [r0, lr, lsl #2]
18887#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18888#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18889	lsl	r9, r4, #8
18890	lsr	r9, r9, #24
18891#else
18892	uxtb	r9, r4, ror #16
18893#endif
18894#else
18895	ubfx	r9, r4, #16, #8
18896#endif
18897	eor	r8, r8, r11, ror #24
18898	lsr	r11, r5, #24
18899	eor	r8, r8, r12, ror #8
18900#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18901#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18902	lsl	r12, r7, #16
18903	lsr	r12, r12, #24
18904#else
18905	uxtb	r12, r7, ror #8
18906#endif
18907#else
18908	ubfx	r12, r7, #8, #8
18909#endif
18910	eor	r8, r8, lr, ror #16
18911#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18912#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18913	lsl	lr, r6, #24
18914	lsr	lr, lr, #24
18915#else
18916	uxtb	lr, r6
18917#endif
18918#else
18919	ubfx	lr, r6, #0, #8
18920#endif
18921	ldr	r9, [r0, r9, lsl #2]
18922	ldr	r11, [r0, r11, lsl #2]
18923	ldr	r12, [r0, r12, lsl #2]
18924	ldr	lr, [r0, lr, lsl #2]
18925#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18926#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18927	lsl	r10, r5, #8
18928	lsr	r10, r10, #24
18929#else
18930	uxtb	r10, r5, ror #16
18931#endif
18932#else
18933	ubfx	r10, r5, #16, #8
18934#endif
18935	eor	r9, r9, r11, ror #24
18936	lsr	r11, r6, #24
18937	eor	r9, r9, r12, ror #8
18938#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18939#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18940	lsl	r12, r4, #16
18941	lsr	r12, r12, #24
18942#else
18943	uxtb	r12, r4, ror #8
18944#endif
18945#else
18946	ubfx	r12, r4, #8, #8
18947#endif
18948	eor	r9, r9, lr, ror #16
18949#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18950#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18951	lsl	lr, r7, #24
18952	lsr	lr, lr, #24
18953#else
18954	uxtb	lr, r7
18955#endif
18956#else
18957	ubfx	lr, r7, #0, #8
18958#endif
18959	ldr	r10, [r0, r10, lsl #2]
18960	ldr	r11, [r0, r11, lsl #2]
18961	ldr	r12, [r0, r12, lsl #2]
18962	ldr	lr, [r0, lr, lsl #2]
18963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18964#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18965	lsl	r4, r4, #24
18966	lsr	r4, r4, #24
18967#else
18968	uxtb	r4, r4
18969#endif
18970#else
18971	ubfx	r4, r4, #0, #8
18972#endif
18973	eor	r10, r10, r11, ror #24
18974#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18975#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18976	lsl	r11, r6, #8
18977	lsr	r11, r11, #24
18978#else
18979	uxtb	r11, r6, ror #16
18980#endif
18981#else
18982	ubfx	r11, r6, #16, #8
18983#endif
18984	eor	r10, r10, r12, ror #8
18985	lsr	r12, r7, #24
18986	eor	r10, r10, lr, ror #16
18987#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18988#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18989	lsl	lr, r5, #16
18990	lsr	lr, lr, #24
18991#else
18992	uxtb	lr, r5, ror #8
18993#endif
18994#else
18995	ubfx	lr, r5, #8, #8
18996#endif
18997	ldr	r4, [r0, r4, lsl #2]
18998	ldr	r12, [r0, r12, lsl #2]
18999	ldr	r11, [r0, r11, lsl #2]
19000	ldr	lr, [r0, lr, lsl #2]
19001	eor	r12, r12, r4, ror #24
19002	ldm	r3!, {r4, r5, r6, r7}
19003	eor	r11, r11, lr, ror #8
19004	eor	r11, r11, r12, ror #24
19005	#   XOR in Key Schedule
19006	eor	r8, r8, r4
19007	eor	r9, r9, r5
19008	eor	r10, r10, r6
19009	eor	r11, r11, r7
19010#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19011#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19012	lsl	r4, r11, #8
19013	lsr	r4, r4, #24
19014#else
19015	uxtb	r4, r11, ror #16
19016#endif
19017#else
19018	ubfx	r4, r11, #16, #8
19019#endif
19020	lsr	r7, r8, #24
19021#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19022#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19023	lsl	r12, r10, #16
19024	lsr	r12, r12, #24
19025#else
19026	uxtb	r12, r10, ror #8
19027#endif
19028#else
19029	ubfx	r12, r10, #8, #8
19030#endif
19031#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19032#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19033	lsl	lr, r9, #24
19034	lsr	lr, lr, #24
19035#else
19036	uxtb	lr, r9
19037#endif
19038#else
19039	ubfx	lr, r9, #0, #8
19040#endif
19041	ldr	r4, [r0, r4, lsl #2]
19042	ldr	r7, [r0, r7, lsl #2]
19043	ldr	r12, [r0, r12, lsl #2]
19044	ldr	lr, [r0, lr, lsl #2]
19045#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19046#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19047	lsl	r5, r8, #8
19048	lsr	r5, r5, #24
19049#else
19050	uxtb	r5, r8, ror #16
19051#endif
19052#else
19053	ubfx	r5, r8, #16, #8
19054#endif
19055	eor	r4, r4, r7, ror #24
19056	lsr	r7, r9, #24
19057	eor	r4, r4, r12, ror #8
19058#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19059#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19060	lsl	r12, r11, #16
19061	lsr	r12, r12, #24
19062#else
19063	uxtb	r12, r11, ror #8
19064#endif
19065#else
19066	ubfx	r12, r11, #8, #8
19067#endif
19068	eor	r4, r4, lr, ror #16
19069#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19070#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19071	lsl	lr, r10, #24
19072	lsr	lr, lr, #24
19073#else
19074	uxtb	lr, r10
19075#endif
19076#else
19077	ubfx	lr, r10, #0, #8
19078#endif
19079	ldr	r5, [r0, r5, lsl #2]
19080	ldr	r7, [r0, r7, lsl #2]
19081	ldr	r12, [r0, r12, lsl #2]
19082	ldr	lr, [r0, lr, lsl #2]
19083#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19084#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19085	lsl	r6, r9, #8
19086	lsr	r6, r6, #24
19087#else
19088	uxtb	r6, r9, ror #16
19089#endif
19090#else
19091	ubfx	r6, r9, #16, #8
19092#endif
19093	eor	r5, r5, r7, ror #24
19094	lsr	r7, r10, #24
19095	eor	r5, r5, r12, ror #8
19096#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19097#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19098	lsl	r12, r8, #16
19099	lsr	r12, r12, #24
19100#else
19101	uxtb	r12, r8, ror #8
19102#endif
19103#else
19104	ubfx	r12, r8, #8, #8
19105#endif
19106	eor	r5, r5, lr, ror #16
19107#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19108#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19109	lsl	lr, r11, #24
19110	lsr	lr, lr, #24
19111#else
19112	uxtb	lr, r11
19113#endif
19114#else
19115	ubfx	lr, r11, #0, #8
19116#endif
19117	ldr	r6, [r0, r6, lsl #2]
19118	ldr	r7, [r0, r7, lsl #2]
19119	ldr	r12, [r0, r12, lsl #2]
19120	ldr	lr, [r0, lr, lsl #2]
19121#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19122#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19123	lsl	r8, r8, #24
19124	lsr	r8, r8, #24
19125#else
19126	uxtb	r8, r8
19127#endif
19128#else
19129	ubfx	r8, r8, #0, #8
19130#endif
19131	eor	r6, r6, r7, ror #24
19132#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19133#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19134	lsl	r7, r10, #8
19135	lsr	r7, r7, #24
19136#else
19137	uxtb	r7, r10, ror #16
19138#endif
19139#else
19140	ubfx	r7, r10, #16, #8
19141#endif
19142	eor	r6, r6, r12, ror #8
19143	lsr	r12, r11, #24
19144	eor	r6, r6, lr, ror #16
19145#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19146#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19147	lsl	lr, r9, #16
19148	lsr	lr, lr, #24
19149#else
19150	uxtb	lr, r9, ror #8
19151#endif
19152#else
19153	ubfx	lr, r9, #8, #8
19154#endif
19155	ldr	r8, [r0, r8, lsl #2]
19156	ldr	r12, [r0, r12, lsl #2]
19157	ldr	r7, [r0, r7, lsl #2]
19158	ldr	lr, [r0, lr, lsl #2]
19159	eor	r12, r12, r8, ror #24
19160	ldm	r3!, {r8, r9, r10, r11}
19161	eor	r7, r7, lr, ror #8
19162	eor	r7, r7, r12, ror #24
19163	#   XOR in Key Schedule
19164	eor	r4, r4, r8
19165	eor	r5, r5, r9
19166	eor	r6, r6, r10
19167	eor	r7, r7, r11
19168	subs	r1, r1, #1
19169	bne	L_AES_CBC_decrypt_block_nr_256_odd
19170#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19171#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19172	lsl	r8, r7, #8
19173	lsr	r8, r8, #24
19174#else
19175	uxtb	r8, r7, ror #16
19176#endif
19177#else
19178	ubfx	r8, r7, #16, #8
19179#endif
19180	lsr	r11, r4, #24
19181#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19182#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19183	lsl	r12, r6, #16
19184	lsr	r12, r12, #24
19185#else
19186	uxtb	r12, r6, ror #8
19187#endif
19188#else
19189	ubfx	r12, r6, #8, #8
19190#endif
19191#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19192#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19193	lsl	lr, r5, #24
19194	lsr	lr, lr, #24
19195#else
19196	uxtb	lr, r5
19197#endif
19198#else
19199	ubfx	lr, r5, #0, #8
19200#endif
19201	ldr	r8, [r0, r8, lsl #2]
19202	ldr	r11, [r0, r11, lsl #2]
19203	ldr	r12, [r0, r12, lsl #2]
19204	ldr	lr, [r0, lr, lsl #2]
19205#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19206#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19207	lsl	r9, r4, #8
19208	lsr	r9, r9, #24
19209#else
19210	uxtb	r9, r4, ror #16
19211#endif
19212#else
19213	ubfx	r9, r4, #16, #8
19214#endif
19215	eor	r8, r8, r11, ror #24
19216	lsr	r11, r5, #24
19217	eor	r8, r8, r12, ror #8
19218#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19219#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19220	lsl	r12, r7, #16
19221	lsr	r12, r12, #24
19222#else
19223	uxtb	r12, r7, ror #8
19224#endif
19225#else
19226	ubfx	r12, r7, #8, #8
19227#endif
19228	eor	r8, r8, lr, ror #16
19229#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19230#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19231	lsl	lr, r6, #24
19232	lsr	lr, lr, #24
19233#else
19234	uxtb	lr, r6
19235#endif
19236#else
19237	ubfx	lr, r6, #0, #8
19238#endif
19239	ldr	r9, [r0, r9, lsl #2]
19240	ldr	r11, [r0, r11, lsl #2]
19241	ldr	r12, [r0, r12, lsl #2]
19242	ldr	lr, [r0, lr, lsl #2]
19243#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19244#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19245	lsl	r10, r5, #8
19246	lsr	r10, r10, #24
19247#else
19248	uxtb	r10, r5, ror #16
19249#endif
19250#else
19251	ubfx	r10, r5, #16, #8
19252#endif
19253	eor	r9, r9, r11, ror #24
19254	lsr	r11, r6, #24
19255	eor	r9, r9, r12, ror #8
19256#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19257#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19258	lsl	r12, r4, #16
19259	lsr	r12, r12, #24
19260#else
19261	uxtb	r12, r4, ror #8
19262#endif
19263#else
19264	ubfx	r12, r4, #8, #8
19265#endif
19266	eor	r9, r9, lr, ror #16
19267#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19268#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19269	lsl	lr, r7, #24
19270	lsr	lr, lr, #24
19271#else
19272	uxtb	lr, r7
19273#endif
19274#else
19275	ubfx	lr, r7, #0, #8
19276#endif
19277	ldr	r10, [r0, r10, lsl #2]
19278	ldr	r11, [r0, r11, lsl #2]
19279	ldr	r12, [r0, r12, lsl #2]
19280	ldr	lr, [r0, lr, lsl #2]
19281#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19282#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19283	lsl	r4, r4, #24
19284	lsr	r4, r4, #24
19285#else
19286	uxtb	r4, r4
19287#endif
19288#else
19289	ubfx	r4, r4, #0, #8
19290#endif
19291	eor	r10, r10, r11, ror #24
19292#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19293#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19294	lsl	r11, r6, #8
19295	lsr	r11, r11, #24
19296#else
19297	uxtb	r11, r6, ror #16
19298#endif
19299#else
19300	ubfx	r11, r6, #16, #8
19301#endif
19302	eor	r10, r10, r12, ror #8
19303	lsr	r12, r7, #24
19304	eor	r10, r10, lr, ror #16
19305#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19306#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19307	lsl	lr, r5, #16
19308	lsr	lr, lr, #24
19309#else
19310	uxtb	lr, r5, ror #8
19311#endif
19312#else
19313	ubfx	lr, r5, #8, #8
19314#endif
19315	ldr	r4, [r0, r4, lsl #2]
19316	ldr	r12, [r0, r12, lsl #2]
19317	ldr	r11, [r0, r11, lsl #2]
19318	ldr	lr, [r0, lr, lsl #2]
19319	eor	r12, r12, r4, ror #24
19320	ldm	r3!, {r4, r5, r6, r7}
19321	eor	r11, r11, lr, ror #8
19322	eor	r11, r11, r12, ror #24
19323	#   XOR in Key Schedule
19324	eor	r8, r8, r4
19325	eor	r9, r9, r5
19326	eor	r10, r10, r6
19327	eor	r11, r11, r7
19328#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19329#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19330	lsl	r4, r9, #24
19331	lsr	r4, r4, #24
19332#else
19333	uxtb	r4, r9
19334#endif
19335#else
19336	ubfx	r4, r9, #0, #8
19337#endif
19338#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19339#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19340	lsl	r7, r10, #16
19341	lsr	r7, r7, #24
19342#else
19343	uxtb	r7, r10, ror #8
19344#endif
19345#else
19346	ubfx	r7, r10, #8, #8
19347#endif
19348#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19349#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19350	lsl	r12, r11, #8
19351	lsr	r12, r12, #24
19352#else
19353	uxtb	r12, r11, ror #16
19354#endif
19355#else
19356	ubfx	r12, r11, #16, #8
19357#endif
19358	lsr	lr, r8, #24
19359	ldrb	r4, [r2, r4]
19360	ldrb	r7, [r2, r7]
19361	ldrb	r12, [r2, r12]
19362	ldrb	lr, [r2, lr]
19363#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19364#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19365	lsl	r5, r10, #24
19366	lsr	r5, r5, #24
19367#else
19368	uxtb	r5, r10
19369#endif
19370#else
19371	ubfx	r5, r10, #0, #8
19372#endif
19373	eor	r4, r4, r7, lsl #8
19374#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19375#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19376	lsl	r7, r11, #16
19377	lsr	r7, r7, #24
19378#else
19379	uxtb	r7, r11, ror #8
19380#endif
19381#else
19382	ubfx	r7, r11, #8, #8
19383#endif
19384	eor	r4, r4, r12, lsl #16
19385#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19386#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19387	lsl	r12, r8, #8
19388	lsr	r12, r12, #24
19389#else
19390	uxtb	r12, r8, ror #16
19391#endif
19392#else
19393	ubfx	r12, r8, #16, #8
19394#endif
19395	eor	r4, r4, lr, lsl #24
19396	lsr	lr, r9, #24
19397	ldrb	r7, [r2, r7]
19398	ldrb	lr, [r2, lr]
19399	ldrb	r5, [r2, r5]
19400	ldrb	r12, [r2, r12]
19401#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19402#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19403	lsl	r6, r11, #24
19404	lsr	r6, r6, #24
19405#else
19406	uxtb	r6, r11
19407#endif
19408#else
19409	ubfx	r6, r11, #0, #8
19410#endif
19411	eor	r5, r5, r7, lsl #8
19412#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19413#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19414	lsl	r7, r8, #16
19415	lsr	r7, r7, #24
19416#else
19417	uxtb	r7, r8, ror #8
19418#endif
19419#else
19420	ubfx	r7, r8, #8, #8
19421#endif
19422	eor	r5, r5, r12, lsl #16
19423#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19425	lsl	r12, r9, #8
19426	lsr	r12, r12, #24
19427#else
19428	uxtb	r12, r9, ror #16
19429#endif
19430#else
19431	ubfx	r12, r9, #16, #8
19432#endif
19433	eor	r5, r5, lr, lsl #24
19434	lsr	lr, r10, #24
19435	ldrb	r7, [r2, r7]
19436	ldrb	lr, [r2, lr]
19437	ldrb	r6, [r2, r6]
19438	ldrb	r12, [r2, r12]
19439	lsr	r11, r11, #24
19440	eor	r6, r6, r7, lsl #8
19441#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19442#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19443	lsl	r7, r8, #24
19444	lsr	r7, r7, #24
19445#else
19446	uxtb	r7, r8
19447#endif
19448#else
19449	ubfx	r7, r8, #0, #8
19450#endif
19451	eor	r6, r6, r12, lsl #16
19452#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19453#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19454	lsl	r12, r9, #16
19455	lsr	r12, r12, #24
19456#else
19457	uxtb	r12, r9, ror #8
19458#endif
19459#else
19460	ubfx	r12, r9, #8, #8
19461#endif
19462	eor	r6, r6, lr, lsl #24
19463#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19464#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19465	lsl	lr, r10, #8
19466	lsr	lr, lr, #24
19467#else
19468	uxtb	lr, r10, ror #16
19469#endif
19470#else
19471	ubfx	lr, r10, #16, #8
19472#endif
19473	ldrb	r11, [r2, r11]
19474	ldrb	r12, [r2, r12]
19475	ldrb	r7, [r2, r7]
19476	ldrb	lr, [r2, lr]
19477	eor	r12, r12, r11, lsl #16
19478	ldm	r3, {r8, r9, r10, r11}
19479	eor	r7, r7, r12, lsl #8
19480	eor	r7, r7, lr, lsl #16
19481	#   XOR in Key Schedule
19482	eor	r4, r4, r8
19483	eor	r5, r5, r9
19484	eor	r6, r6, r10
19485	eor	r7, r7, r11
19486#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
19487	ldr	lr, [sp, #16]
19488#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19489	eor	r8, r4, r4, ror #16
19490	eor	r9, r5, r5, ror #16
19491	eor	r10, r6, r6, ror #16
19492	eor	r11, r7, r7, ror #16
19493	bic	r8, r8, #0xff0000
19494	bic	r9, r9, #0xff0000
19495	bic	r10, r10, #0xff0000
19496	bic	r11, r11, #0xff0000
19497	ror	r4, r4, #8
19498	ror	r5, r5, #8
19499	ror	r6, r6, #8
19500	ror	r7, r7, #8
19501	eor	r4, r4, r8, lsr #8
19502	eor	r5, r5, r9, lsr #8
19503	eor	r6, r6, r10, lsr #8
19504	eor	r7, r7, r11, lsr #8
19505#else
19506	rev	r4, r4
19507	rev	r5, r5
19508	rev	r6, r6
19509	rev	r7, r7
19510#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
19511	ldm	lr, {r8, r9, r10, r11}
19512	pop	{r1, r12, lr}
19513	ldr	r3, [sp]
19514	eor	r4, r4, r8
19515	eor	r5, r5, r9
19516	eor	r6, r6, r10
19517	eor	r7, r7, r11
19518	str	r4, [r1]
19519	str	r5, [r1, #4]
19520	str	r6, [r1, #8]
19521	str	r7, [r1, #12]
19522	subs	r12, r12, #16
19523	add	lr, lr, #16
19524	add	r1, r1, #16
19525	beq	L_AES_CBC_decrypt_end_odd
19526	push	{r1, r12, lr}
19527	ldr	r4, [lr]
19528	ldr	r5, [lr, #4]
19529	ldr	r6, [lr, #8]
19530	ldr	r7, [lr, #12]
19531	ldr	lr, [sp, #16]
19532#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19533	stm	lr, {r4, r5}
19534#else
19535	strd	r4, r5, [lr]
19536#endif
19537#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19538	str	r6, [lr, #8]
19539	str	r7, [lr, #12]
19540#else
19541	strd	r6, r7, [lr, #8]
19542#endif
19543#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19544	eor	r8, r4, r4, ror #16
19545	eor	r9, r5, r5, ror #16
19546	eor	r10, r6, r6, ror #16
19547	eor	r11, r7, r7, ror #16
19548	bic	r8, r8, #0xff0000
19549	bic	r9, r9, #0xff0000
19550	bic	r10, r10, #0xff0000
19551	bic	r11, r11, #0xff0000
19552	ror	r4, r4, #8
19553	ror	r5, r5, #8
19554	ror	r6, r6, #8
19555	ror	r7, r7, #8
19556	eor	r4, r4, r8, lsr #8
19557	eor	r5, r5, r9, lsr #8
19558	eor	r6, r6, r10, lsr #8
19559	eor	r7, r7, r11, lsr #8
19560#else
19561	rev	r4, r4
19562	rev	r5, r5
19563	rev	r6, r6
19564	rev	r7, r7
19565#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
19566	ldm	r3!, {r8, r9, r10, r11}
19567	# Round: 0 - XOR in key schedule
19568	eor	r4, r4, r8
19569	eor	r5, r5, r9
19570	eor	r6, r6, r10
19571	eor	r7, r7, r11
19572	mov	r1, #6
19573#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
19574	bl	AES_decrypt_block
19575#else
19576L_AES_CBC_decrypt_block_nr_256_even:
19577#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19578#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19579	lsl	r8, r7, #8
19580	lsr	r8, r8, #24
19581#else
19582	uxtb	r8, r7, ror #16
19583#endif
19584#else
19585	ubfx	r8, r7, #16, #8
19586#endif
19587	lsr	r11, r4, #24
19588#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19589#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19590	lsl	r12, r6, #16
19591	lsr	r12, r12, #24
19592#else
19593	uxtb	r12, r6, ror #8
19594#endif
19595#else
19596	ubfx	r12, r6, #8, #8
19597#endif
19598#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19599#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19600	lsl	lr, r5, #24
19601	lsr	lr, lr, #24
19602#else
19603	uxtb	lr, r5
19604#endif
19605#else
19606	ubfx	lr, r5, #0, #8
19607#endif
19608	ldr	r8, [r0, r8, lsl #2]
19609	ldr	r11, [r0, r11, lsl #2]
19610	ldr	r12, [r0, r12, lsl #2]
19611	ldr	lr, [r0, lr, lsl #2]
19612#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19613#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19614	lsl	r9, r4, #8
19615	lsr	r9, r9, #24
19616#else
19617	uxtb	r9, r4, ror #16
19618#endif
19619#else
19620	ubfx	r9, r4, #16, #8
19621#endif
19622	eor	r8, r8, r11, ror #24
19623	lsr	r11, r5, #24
19624	eor	r8, r8, r12, ror #8
19625#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19626#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19627	lsl	r12, r7, #16
19628	lsr	r12, r12, #24
19629#else
19630	uxtb	r12, r7, ror #8
19631#endif
19632#else
19633	ubfx	r12, r7, #8, #8
19634#endif
19635	eor	r8, r8, lr, ror #16
19636#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19637#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19638	lsl	lr, r6, #24
19639	lsr	lr, lr, #24
19640#else
19641	uxtb	lr, r6
19642#endif
19643#else
19644	ubfx	lr, r6, #0, #8
19645#endif
19646	ldr	r9, [r0, r9, lsl #2]
19647	ldr	r11, [r0, r11, lsl #2]
19648	ldr	r12, [r0, r12, lsl #2]
19649	ldr	lr, [r0, lr, lsl #2]
19650#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19651#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19652	lsl	r10, r5, #8
19653	lsr	r10, r10, #24
19654#else
19655	uxtb	r10, r5, ror #16
19656#endif
19657#else
19658	ubfx	r10, r5, #16, #8
19659#endif
19660	eor	r9, r9, r11, ror #24
19661	lsr	r11, r6, #24
19662	eor	r9, r9, r12, ror #8
19663#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19664#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19665	lsl	r12, r4, #16
19666	lsr	r12, r12, #24
19667#else
19668	uxtb	r12, r4, ror #8
19669#endif
19670#else
19671	ubfx	r12, r4, #8, #8
19672#endif
19673	eor	r9, r9, lr, ror #16
19674#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19675#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19676	lsl	lr, r7, #24
19677	lsr	lr, lr, #24
19678#else
19679	uxtb	lr, r7
19680#endif
19681#else
19682	ubfx	lr, r7, #0, #8
19683#endif
19684	ldr	r10, [r0, r10, lsl #2]
19685	ldr	r11, [r0, r11, lsl #2]
19686	ldr	r12, [r0, r12, lsl #2]
19687	ldr	lr, [r0, lr, lsl #2]
19688#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19689#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19690	lsl	r4, r4, #24
19691	lsr	r4, r4, #24
19692#else
19693	uxtb	r4, r4
19694#endif
19695#else
19696	ubfx	r4, r4, #0, #8
19697#endif
19698	eor	r10, r10, r11, ror #24
19699#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19700#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19701	lsl	r11, r6, #8
19702	lsr	r11, r11, #24
19703#else
19704	uxtb	r11, r6, ror #16
19705#endif
19706#else
19707	ubfx	r11, r6, #16, #8
19708#endif
19709	eor	r10, r10, r12, ror #8
19710	lsr	r12, r7, #24
19711	eor	r10, r10, lr, ror #16
19712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19713#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19714	lsl	lr, r5, #16
19715	lsr	lr, lr, #24
19716#else
19717	uxtb	lr, r5, ror #8
19718#endif
19719#else
19720	ubfx	lr, r5, #8, #8
19721#endif
19722	ldr	r4, [r0, r4, lsl #2]
19723	ldr	r12, [r0, r12, lsl #2]
19724	ldr	r11, [r0, r11, lsl #2]
19725	ldr	lr, [r0, lr, lsl #2]
19726	eor	r12, r12, r4, ror #24
19727	ldm	r3!, {r4, r5, r6, r7}
19728	eor	r11, r11, lr, ror #8
19729	eor	r11, r11, r12, ror #24
19730	#   XOR in Key Schedule
19731	eor	r8, r8, r4
19732	eor	r9, r9, r5
19733	eor	r10, r10, r6
19734	eor	r11, r11, r7
19735#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19736#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19737	lsl	r4, r11, #8
19738	lsr	r4, r4, #24
19739#else
19740	uxtb	r4, r11, ror #16
19741#endif
19742#else
19743	ubfx	r4, r11, #16, #8
19744#endif
19745	lsr	r7, r8, #24
19746#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19747#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19748	lsl	r12, r10, #16
19749	lsr	r12, r12, #24
19750#else
19751	uxtb	r12, r10, ror #8
19752#endif
19753#else
19754	ubfx	r12, r10, #8, #8
19755#endif
19756#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19757#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19758	lsl	lr, r9, #24
19759	lsr	lr, lr, #24
19760#else
19761	uxtb	lr, r9
19762#endif
19763#else
19764	ubfx	lr, r9, #0, #8
19765#endif
19766	ldr	r4, [r0, r4, lsl #2]
19767	ldr	r7, [r0, r7, lsl #2]
19768	ldr	r12, [r0, r12, lsl #2]
19769	ldr	lr, [r0, lr, lsl #2]
19770#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19771#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19772	lsl	r5, r8, #8
19773	lsr	r5, r5, #24
19774#else
19775	uxtb	r5, r8, ror #16
19776#endif
19777#else
19778	ubfx	r5, r8, #16, #8
19779#endif
19780	eor	r4, r4, r7, ror #24
19781	lsr	r7, r9, #24
19782	eor	r4, r4, r12, ror #8
19783#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19784#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19785	lsl	r12, r11, #16
19786	lsr	r12, r12, #24
19787#else
19788	uxtb	r12, r11, ror #8
19789#endif
19790#else
19791	ubfx	r12, r11, #8, #8
19792#endif
19793	eor	r4, r4, lr, ror #16
19794#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19795#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19796	lsl	lr, r10, #24
19797	lsr	lr, lr, #24
19798#else
19799	uxtb	lr, r10
19800#endif
19801#else
19802	ubfx	lr, r10, #0, #8
19803#endif
19804	ldr	r5, [r0, r5, lsl #2]
19805	ldr	r7, [r0, r7, lsl #2]
19806	ldr	r12, [r0, r12, lsl #2]
19807	ldr	lr, [r0, lr, lsl #2]
19808#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19809#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19810	lsl	r6, r9, #8
19811	lsr	r6, r6, #24
19812#else
19813	uxtb	r6, r9, ror #16
19814#endif
19815#else
19816	ubfx	r6, r9, #16, #8
19817#endif
19818	eor	r5, r5, r7, ror #24
19819	lsr	r7, r10, #24
19820	eor	r5, r5, r12, ror #8
19821#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19822#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19823	lsl	r12, r8, #16
19824	lsr	r12, r12, #24
19825#else
19826	uxtb	r12, r8, ror #8
19827#endif
19828#else
19829	ubfx	r12, r8, #8, #8
19830#endif
19831	eor	r5, r5, lr, ror #16
19832#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19833#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19834	lsl	lr, r11, #24
19835	lsr	lr, lr, #24
19836#else
19837	uxtb	lr, r11
19838#endif
19839#else
19840	ubfx	lr, r11, #0, #8
19841#endif
19842	ldr	r6, [r0, r6, lsl #2]
19843	ldr	r7, [r0, r7, lsl #2]
19844	ldr	r12, [r0, r12, lsl #2]
19845	ldr	lr, [r0, lr, lsl #2]
19846#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19847#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19848	lsl	r8, r8, #24
19849	lsr	r8, r8, #24
19850#else
19851	uxtb	r8, r8
19852#endif
19853#else
19854	ubfx	r8, r8, #0, #8
19855#endif
19856	eor	r6, r6, r7, ror #24
19857#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19858#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19859	lsl	r7, r10, #8
19860	lsr	r7, r7, #24
19861#else
19862	uxtb	r7, r10, ror #16
19863#endif
19864#else
19865	ubfx	r7, r10, #16, #8
19866#endif
19867	eor	r6, r6, r12, ror #8
19868	lsr	r12, r11, #24
19869	eor	r6, r6, lr, ror #16
19870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19871#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19872	lsl	lr, r9, #16
19873	lsr	lr, lr, #24
19874#else
19875	uxtb	lr, r9, ror #8
19876#endif
19877#else
19878	ubfx	lr, r9, #8, #8
19879#endif
19880	ldr	r8, [r0, r8, lsl #2]
19881	ldr	r12, [r0, r12, lsl #2]
19882	ldr	r7, [r0, r7, lsl #2]
19883	ldr	lr, [r0, lr, lsl #2]
19884	eor	r12, r12, r8, ror #24
19885	ldm	r3!, {r8, r9, r10, r11}
19886	eor	r7, r7, lr, ror #8
19887	eor	r7, r7, r12, ror #24
19888	#   XOR in Key Schedule
19889	eor	r4, r4, r8
19890	eor	r5, r5, r9
19891	eor	r6, r6, r10
19892	eor	r7, r7, r11
19893	subs	r1, r1, #1
19894	bne	L_AES_CBC_decrypt_block_nr_256_even
19895#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19896#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19897	lsl	r8, r7, #8
19898	lsr	r8, r8, #24
19899#else
19900	uxtb	r8, r7, ror #16
19901#endif
19902#else
19903	ubfx	r8, r7, #16, #8
19904#endif
19905	lsr	r11, r4, #24
19906#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19907#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19908	lsl	r12, r6, #16
19909	lsr	r12, r12, #24
19910#else
19911	uxtb	r12, r6, ror #8
19912#endif
19913#else
19914	ubfx	r12, r6, #8, #8
19915#endif
19916#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19917#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19918	lsl	lr, r5, #24
19919	lsr	lr, lr, #24
19920#else
19921	uxtb	lr, r5
19922#endif
19923#else
19924	ubfx	lr, r5, #0, #8
19925#endif
19926	ldr	r8, [r0, r8, lsl #2]
19927	ldr	r11, [r0, r11, lsl #2]
19928	ldr	r12, [r0, r12, lsl #2]
19929	ldr	lr, [r0, lr, lsl #2]
19930#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19931#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19932	lsl	r9, r4, #8
19933	lsr	r9, r9, #24
19934#else
19935	uxtb	r9, r4, ror #16
19936#endif
19937#else
19938	ubfx	r9, r4, #16, #8
19939#endif
19940	eor	r8, r8, r11, ror #24
19941	lsr	r11, r5, #24
19942	eor	r8, r8, r12, ror #8
19943#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19944#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19945	lsl	r12, r7, #16
19946	lsr	r12, r12, #24
19947#else
19948	uxtb	r12, r7, ror #8
19949#endif
19950#else
19951	ubfx	r12, r7, #8, #8
19952#endif
19953	eor	r8, r8, lr, ror #16
19954#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19955#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19956	lsl	lr, r6, #24
19957	lsr	lr, lr, #24
19958#else
19959	uxtb	lr, r6
19960#endif
19961#else
19962	ubfx	lr, r6, #0, #8
19963#endif
19964	ldr	r9, [r0, r9, lsl #2]
19965	ldr	r11, [r0, r11, lsl #2]
19966	ldr	r12, [r0, r12, lsl #2]
19967	ldr	lr, [r0, lr, lsl #2]
19968#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19969#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19970	lsl	r10, r5, #8
19971	lsr	r10, r10, #24
19972#else
19973	uxtb	r10, r5, ror #16
19974#endif
19975#else
19976	ubfx	r10, r5, #16, #8
19977#endif
19978	eor	r9, r9, r11, ror #24
19979	lsr	r11, r6, #24
19980	eor	r9, r9, r12, ror #8
19981#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19982#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19983	lsl	r12, r4, #16
19984	lsr	r12, r12, #24
19985#else
19986	uxtb	r12, r4, ror #8
19987#endif
19988#else
19989	ubfx	r12, r4, #8, #8
19990#endif
19991	eor	r9, r9, lr, ror #16
19992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19993#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19994	lsl	lr, r7, #24
19995	lsr	lr, lr, #24
19996#else
19997	uxtb	lr, r7
19998#endif
19999#else
20000	ubfx	lr, r7, #0, #8
20001#endif
20002	ldr	r10, [r0, r10, lsl #2]
20003	ldr	r11, [r0, r11, lsl #2]
20004	ldr	r12, [r0, r12, lsl #2]
20005	ldr	lr, [r0, lr, lsl #2]
20006#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20007#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20008	lsl	r4, r4, #24
20009	lsr	r4, r4, #24
20010#else
20011	uxtb	r4, r4
20012#endif
20013#else
20014	ubfx	r4, r4, #0, #8
20015#endif
20016	eor	r10, r10, r11, ror #24
20017#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20018#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20019	lsl	r11, r6, #8
20020	lsr	r11, r11, #24
20021#else
20022	uxtb	r11, r6, ror #16
20023#endif
20024#else
20025	ubfx	r11, r6, #16, #8
20026#endif
20027	eor	r10, r10, r12, ror #8
20028	lsr	r12, r7, #24
20029	eor	r10, r10, lr, ror #16
20030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20031#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20032	lsl	lr, r5, #16
20033	lsr	lr, lr, #24
20034#else
20035	uxtb	lr, r5, ror #8
20036#endif
20037#else
20038	ubfx	lr, r5, #8, #8
20039#endif
20040	ldr	r4, [r0, r4, lsl #2]
20041	ldr	r12, [r0, r12, lsl #2]
20042	ldr	r11, [r0, r11, lsl #2]
20043	ldr	lr, [r0, lr, lsl #2]
20044	eor	r12, r12, r4, ror #24
20045	ldm	r3!, {r4, r5, r6, r7}
20046	eor	r11, r11, lr, ror #8
20047	eor	r11, r11, r12, ror #24
20048	#   XOR in Key Schedule
20049	eor	r8, r8, r4
20050	eor	r9, r9, r5
20051	eor	r10, r10, r6
20052	eor	r11, r11, r7
20053#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20054#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20055	lsl	r4, r9, #24
20056	lsr	r4, r4, #24
20057#else
20058	uxtb	r4, r9
20059#endif
20060#else
20061	ubfx	r4, r9, #0, #8
20062#endif
20063#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20064#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20065	lsl	r7, r10, #16
20066	lsr	r7, r7, #24
20067#else
20068	uxtb	r7, r10, ror #8
20069#endif
20070#else
20071	ubfx	r7, r10, #8, #8
20072#endif
20073#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20074#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20075	lsl	r12, r11, #8
20076	lsr	r12, r12, #24
20077#else
20078	uxtb	r12, r11, ror #16
20079#endif
20080#else
20081	ubfx	r12, r11, #16, #8
20082#endif
20083	lsr	lr, r8, #24
20084	ldrb	r4, [r2, r4]
20085	ldrb	r7, [r2, r7]
20086	ldrb	r12, [r2, r12]
20087	ldrb	lr, [r2, lr]
20088#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20089#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20090	lsl	r5, r10, #24
20091	lsr	r5, r5, #24
20092#else
20093	uxtb	r5, r10
20094#endif
20095#else
20096	ubfx	r5, r10, #0, #8
20097#endif
20098	eor	r4, r4, r7, lsl #8
20099#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20100#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20101	lsl	r7, r11, #16
20102	lsr	r7, r7, #24
20103#else
20104	uxtb	r7, r11, ror #8
20105#endif
20106#else
20107	ubfx	r7, r11, #8, #8
20108#endif
20109	eor	r4, r4, r12, lsl #16
20110#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20111#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20112	lsl	r12, r8, #8
20113	lsr	r12, r12, #24
20114#else
20115	uxtb	r12, r8, ror #16
20116#endif
20117#else
20118	ubfx	r12, r8, #16, #8
20119#endif
20120	eor	r4, r4, lr, lsl #24
20121	lsr	lr, r9, #24
20122	ldrb	r7, [r2, r7]
20123	ldrb	lr, [r2, lr]
20124	ldrb	r5, [r2, r5]
20125	ldrb	r12, [r2, r12]
20126#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20127#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20128	lsl	r6, r11, #24
20129	lsr	r6, r6, #24
20130#else
20131	uxtb	r6, r11
20132#endif
20133#else
20134	ubfx	r6, r11, #0, #8
20135#endif
20136	eor	r5, r5, r7, lsl #8
20137#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20138#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20139	lsl	r7, r8, #16
20140	lsr	r7, r7, #24
20141#else
20142	uxtb	r7, r8, ror #8
20143#endif
20144#else
20145	ubfx	r7, r8, #8, #8
20146#endif
20147	eor	r5, r5, r12, lsl #16
20148#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20149#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20150	lsl	r12, r9, #8
20151	lsr	r12, r12, #24
20152#else
20153	uxtb	r12, r9, ror #16
20154#endif
20155#else
20156	ubfx	r12, r9, #16, #8
20157#endif
20158	eor	r5, r5, lr, lsl #24
20159	lsr	lr, r10, #24
20160	ldrb	r7, [r2, r7]
20161	ldrb	lr, [r2, lr]
20162	ldrb	r6, [r2, r6]
20163	ldrb	r12, [r2, r12]
20164	lsr	r11, r11, #24
20165	eor	r6, r6, r7, lsl #8
20166#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20167#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20168	lsl	r7, r8, #24
20169	lsr	r7, r7, #24
20170#else
20171	uxtb	r7, r8
20172#endif
20173#else
20174	ubfx	r7, r8, #0, #8
20175#endif
20176	eor	r6, r6, r12, lsl #16
20177#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20178#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20179	lsl	r12, r9, #16
20180	lsr	r12, r12, #24
20181#else
20182	uxtb	r12, r9, ror #8
20183#endif
20184#else
20185	ubfx	r12, r9, #8, #8
20186#endif
20187	eor	r6, r6, lr, lsl #24
20188#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20189#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20190	lsl	lr, r10, #8
20191	lsr	lr, lr, #24
20192#else
20193	uxtb	lr, r10, ror #16
20194#endif
20195#else
20196	ubfx	lr, r10, #16, #8
20197#endif
20198	ldrb	r11, [r2, r11]
20199	ldrb	r12, [r2, r12]
20200	ldrb	r7, [r2, r7]
20201	ldrb	lr, [r2, lr]
20202	eor	r12, r12, r11, lsl #16
20203	ldm	r3, {r8, r9, r10, r11}
20204	eor	r7, r7, r12, lsl #8
20205	eor	r7, r7, lr, lsl #16
20206	#   XOR in Key Schedule
20207	eor	r4, r4, r8
20208	eor	r5, r5, r9
20209	eor	r6, r6, r10
20210	eor	r7, r7, r11
20211#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
20212	ldr	lr, [sp, #16]
20213#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20214	eor	r8, r4, r4, ror #16
20215	eor	r9, r5, r5, ror #16
20216	eor	r10, r6, r6, ror #16
20217	eor	r11, r7, r7, ror #16
20218	bic	r8, r8, #0xff0000
20219	bic	r9, r9, #0xff0000
20220	bic	r10, r10, #0xff0000
20221	bic	r11, r11, #0xff0000
20222	ror	r4, r4, #8
20223	ror	r5, r5, #8
20224	ror	r6, r6, #8
20225	ror	r7, r7, #8
20226	eor	r4, r4, r8, lsr #8
20227	eor	r5, r5, r9, lsr #8
20228	eor	r6, r6, r10, lsr #8
20229	eor	r7, r7, r11, lsr #8
20230#else
20231	rev	r4, r4
20232	rev	r5, r5
20233	rev	r6, r6
20234	rev	r7, r7
20235#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
20236#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20237	ldr	r8, [lr, #16]
20238	ldr	r9, [lr, #20]
20239#else
20240	ldrd	r8, r9, [lr, #16]
20241#endif
20242#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20243	ldr	r10, [lr, #24]
20244	ldr	r11, [lr, #28]
20245#else
20246	ldrd	r10, r11, [lr, #24]
20247#endif
20248	pop	{r1, r12, lr}
20249	ldr	r3, [sp]
20250	eor	r4, r4, r8
20251	eor	r5, r5, r9
20252	eor	r6, r6, r10
20253	eor	r7, r7, r11
20254	str	r4, [r1]
20255	str	r5, [r1, #4]
20256	str	r6, [r1, #8]
20257	str	r7, [r1, #12]
20258	subs	r12, r12, #16
20259	add	lr, lr, #16
20260	add	r1, r1, #16
20261	bne	L_AES_CBC_decrypt_loop_block_256
20262	b	L_AES_CBC_decrypt_end
20263L_AES_CBC_decrypt_loop_block_192:
20264	push	{r1, r12, lr}
20265	ldr	r4, [lr]
20266	ldr	r5, [lr, #4]
20267	ldr	r6, [lr, #8]
20268	ldr	r7, [lr, #12]
20269	ldr	lr, [sp, #16]
20270#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20271	str	r4, [lr, #16]
20272	str	r5, [lr, #20]
20273#else
20274	strd	r4, r5, [lr, #16]
20275#endif
20276#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20277	str	r6, [lr, #24]
20278	str	r7, [lr, #28]
20279#else
20280	strd	r6, r7, [lr, #24]
20281#endif
20282#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20283	eor	r8, r4, r4, ror #16
20284	eor	r9, r5, r5, ror #16
20285	eor	r10, r6, r6, ror #16
20286	eor	r11, r7, r7, ror #16
20287	bic	r8, r8, #0xff0000
20288	bic	r9, r9, #0xff0000
20289	bic	r10, r10, #0xff0000
20290	bic	r11, r11, #0xff0000
20291	ror	r4, r4, #8
20292	ror	r5, r5, #8
20293	ror	r6, r6, #8
20294	ror	r7, r7, #8
20295	eor	r4, r4, r8, lsr #8
20296	eor	r5, r5, r9, lsr #8
20297	eor	r6, r6, r10, lsr #8
20298	eor	r7, r7, r11, lsr #8
20299#else
20300	rev	r4, r4
20301	rev	r5, r5
20302	rev	r6, r6
20303	rev	r7, r7
20304#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
20305	ldm	r3!, {r8, r9, r10, r11}
20306	# Round: 0 - XOR in key schedule
20307	eor	r4, r4, r8
20308	eor	r5, r5, r9
20309	eor	r6, r6, r10
20310	eor	r7, r7, r11
20311	mov	r1, #5
20312#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
20313	bl	AES_decrypt_block
20314#else
20315L_AES_CBC_decrypt_block_nr_192_odd:
20316#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20317#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20318	lsl	r8, r7, #8
20319	lsr	r8, r8, #24
20320#else
20321	uxtb	r8, r7, ror #16
20322#endif
20323#else
20324	ubfx	r8, r7, #16, #8
20325#endif
20326	lsr	r11, r4, #24
20327#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20328#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20329	lsl	r12, r6, #16
20330	lsr	r12, r12, #24
20331#else
20332	uxtb	r12, r6, ror #8
20333#endif
20334#else
20335	ubfx	r12, r6, #8, #8
20336#endif
20337#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20338#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20339	lsl	lr, r5, #24
20340	lsr	lr, lr, #24
20341#else
20342	uxtb	lr, r5
20343#endif
20344#else
20345	ubfx	lr, r5, #0, #8
20346#endif
20347	ldr	r8, [r0, r8, lsl #2]
20348	ldr	r11, [r0, r11, lsl #2]
20349	ldr	r12, [r0, r12, lsl #2]
20350	ldr	lr, [r0, lr, lsl #2]
20351#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20352#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20353	lsl	r9, r4, #8
20354	lsr	r9, r9, #24
20355#else
20356	uxtb	r9, r4, ror #16
20357#endif
20358#else
20359	ubfx	r9, r4, #16, #8
20360#endif
20361	eor	r8, r8, r11, ror #24
20362	lsr	r11, r5, #24
20363	eor	r8, r8, r12, ror #8
20364#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20365#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20366	lsl	r12, r7, #16
20367	lsr	r12, r12, #24
20368#else
20369	uxtb	r12, r7, ror #8
20370#endif
20371#else
20372	ubfx	r12, r7, #8, #8
20373#endif
20374	eor	r8, r8, lr, ror #16
20375#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20376#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20377	lsl	lr, r6, #24
20378	lsr	lr, lr, #24
20379#else
20380	uxtb	lr, r6
20381#endif
20382#else
20383	ubfx	lr, r6, #0, #8
20384#endif
20385	ldr	r9, [r0, r9, lsl #2]
20386	ldr	r11, [r0, r11, lsl #2]
20387	ldr	r12, [r0, r12, lsl #2]
20388	ldr	lr, [r0, lr, lsl #2]
20389#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20390#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20391	lsl	r10, r5, #8
20392	lsr	r10, r10, #24
20393#else
20394	uxtb	r10, r5, ror #16
20395#endif
20396#else
20397	ubfx	r10, r5, #16, #8
20398#endif
20399	eor	r9, r9, r11, ror #24
20400	lsr	r11, r6, #24
20401	eor	r9, r9, r12, ror #8
20402#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20403#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20404	lsl	r12, r4, #16
20405	lsr	r12, r12, #24
20406#else
20407	uxtb	r12, r4, ror #8
20408#endif
20409#else
20410	ubfx	r12, r4, #8, #8
20411#endif
20412	eor	r9, r9, lr, ror #16
20413#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20414#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20415	lsl	lr, r7, #24
20416	lsr	lr, lr, #24
20417#else
20418	uxtb	lr, r7
20419#endif
20420#else
20421	ubfx	lr, r7, #0, #8
20422#endif
20423	ldr	r10, [r0, r10, lsl #2]
20424	ldr	r11, [r0, r11, lsl #2]
20425	ldr	r12, [r0, r12, lsl #2]
20426	ldr	lr, [r0, lr, lsl #2]
20427#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20428#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20429	lsl	r4, r4, #24
20430	lsr	r4, r4, #24
20431#else
20432	uxtb	r4, r4
20433#endif
20434#else
20435	ubfx	r4, r4, #0, #8
20436#endif
20437	eor	r10, r10, r11, ror #24
20438#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20439#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20440	lsl	r11, r6, #8
20441	lsr	r11, r11, #24
20442#else
20443	uxtb	r11, r6, ror #16
20444#endif
20445#else
20446	ubfx	r11, r6, #16, #8
20447#endif
20448	eor	r10, r10, r12, ror #8
20449	lsr	r12, r7, #24
20450	eor	r10, r10, lr, ror #16
20451#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20452#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20453	lsl	lr, r5, #16
20454	lsr	lr, lr, #24
20455#else
20456	uxtb	lr, r5, ror #8
20457#endif
20458#else
20459	ubfx	lr, r5, #8, #8
20460#endif
20461	ldr	r4, [r0, r4, lsl #2]
20462	ldr	r12, [r0, r12, lsl #2]
20463	ldr	r11, [r0, r11, lsl #2]
20464	ldr	lr, [r0, lr, lsl #2]
20465	eor	r12, r12, r4, ror #24
20466	ldm	r3!, {r4, r5, r6, r7}
20467	eor	r11, r11, lr, ror #8
20468	eor	r11, r11, r12, ror #24
20469	#   XOR in Key Schedule
20470	eor	r8, r8, r4
20471	eor	r9, r9, r5
20472	eor	r10, r10, r6
20473	eor	r11, r11, r7
20474#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20475#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20476	lsl	r4, r11, #8
20477	lsr	r4, r4, #24
20478#else
20479	uxtb	r4, r11, ror #16
20480#endif
20481#else
20482	ubfx	r4, r11, #16, #8
20483#endif
20484	lsr	r7, r8, #24
20485#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20486#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20487	lsl	r12, r10, #16
20488	lsr	r12, r12, #24
20489#else
20490	uxtb	r12, r10, ror #8
20491#endif
20492#else
20493	ubfx	r12, r10, #8, #8
20494#endif
20495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20496#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20497	lsl	lr, r9, #24
20498	lsr	lr, lr, #24
20499#else
20500	uxtb	lr, r9
20501#endif
20502#else
20503	ubfx	lr, r9, #0, #8
20504#endif
20505	ldr	r4, [r0, r4, lsl #2]
20506	ldr	r7, [r0, r7, lsl #2]
20507	ldr	r12, [r0, r12, lsl #2]
20508	ldr	lr, [r0, lr, lsl #2]
20509#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20510#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20511	lsl	r5, r8, #8
20512	lsr	r5, r5, #24
20513#else
20514	uxtb	r5, r8, ror #16
20515#endif
20516#else
20517	ubfx	r5, r8, #16, #8
20518#endif
20519	eor	r4, r4, r7, ror #24
20520	lsr	r7, r9, #24
20521	eor	r4, r4, r12, ror #8
20522#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20523#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20524	lsl	r12, r11, #16
20525	lsr	r12, r12, #24
20526#else
20527	uxtb	r12, r11, ror #8
20528#endif
20529#else
20530	ubfx	r12, r11, #8, #8
20531#endif
20532	eor	r4, r4, lr, ror #16
20533#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20534#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20535	lsl	lr, r10, #24
20536	lsr	lr, lr, #24
20537#else
20538	uxtb	lr, r10
20539#endif
20540#else
20541	ubfx	lr, r10, #0, #8
20542#endif
20543	ldr	r5, [r0, r5, lsl #2]
20544	ldr	r7, [r0, r7, lsl #2]
20545	ldr	r12, [r0, r12, lsl #2]
20546	ldr	lr, [r0, lr, lsl #2]
20547#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20548#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20549	lsl	r6, r9, #8
20550	lsr	r6, r6, #24
20551#else
20552	uxtb	r6, r9, ror #16
20553#endif
20554#else
20555	ubfx	r6, r9, #16, #8
20556#endif
20557	eor	r5, r5, r7, ror #24
20558	lsr	r7, r10, #24
20559	eor	r5, r5, r12, ror #8
20560#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20561#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20562	lsl	r12, r8, #16
20563	lsr	r12, r12, #24
20564#else
20565	uxtb	r12, r8, ror #8
20566#endif
20567#else
20568	ubfx	r12, r8, #8, #8
20569#endif
20570	eor	r5, r5, lr, ror #16
20571#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20572#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20573	lsl	lr, r11, #24
20574	lsr	lr, lr, #24
20575#else
20576	uxtb	lr, r11
20577#endif
20578#else
20579	ubfx	lr, r11, #0, #8
20580#endif
20581	ldr	r6, [r0, r6, lsl #2]
20582	ldr	r7, [r0, r7, lsl #2]
20583	ldr	r12, [r0, r12, lsl #2]
20584	ldr	lr, [r0, lr, lsl #2]
20585#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20586#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20587	lsl	r8, r8, #24
20588	lsr	r8, r8, #24
20589#else
20590	uxtb	r8, r8
20591#endif
20592#else
20593	ubfx	r8, r8, #0, #8
20594#endif
20595	eor	r6, r6, r7, ror #24
20596#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20597#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20598	lsl	r7, r10, #8
20599	lsr	r7, r7, #24
20600#else
20601	uxtb	r7, r10, ror #16
20602#endif
20603#else
20604	ubfx	r7, r10, #16, #8
20605#endif
20606	eor	r6, r6, r12, ror #8
20607	lsr	r12, r11, #24
20608	eor	r6, r6, lr, ror #16
20609#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20610#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20611	lsl	lr, r9, #16
20612	lsr	lr, lr, #24
20613#else
20614	uxtb	lr, r9, ror #8
20615#endif
20616#else
20617	ubfx	lr, r9, #8, #8
20618#endif
20619	ldr	r8, [r0, r8, lsl #2]
20620	ldr	r12, [r0, r12, lsl #2]
20621	ldr	r7, [r0, r7, lsl #2]
20622	ldr	lr, [r0, lr, lsl #2]
20623	eor	r12, r12, r8, ror #24
20624	ldm	r3!, {r8, r9, r10, r11}
20625	eor	r7, r7, lr, ror #8
20626	eor	r7, r7, r12, ror #24
20627	#   XOR in Key Schedule
20628	eor	r4, r4, r8
20629	eor	r5, r5, r9
20630	eor	r6, r6, r10
20631	eor	r7, r7, r11
20632	subs	r1, r1, #1
20633	bne	L_AES_CBC_decrypt_block_nr_192_odd
20634#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20635#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20636	lsl	r8, r7, #8
20637	lsr	r8, r8, #24
20638#else
20639	uxtb	r8, r7, ror #16
20640#endif
20641#else
20642	ubfx	r8, r7, #16, #8
20643#endif
20644	lsr	r11, r4, #24
20645#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20647	lsl	r12, r6, #16
20648	lsr	r12, r12, #24
20649#else
20650	uxtb	r12, r6, ror #8
20651#endif
20652#else
20653	ubfx	r12, r6, #8, #8
20654#endif
20655#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20656#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20657	lsl	lr, r5, #24
20658	lsr	lr, lr, #24
20659#else
20660	uxtb	lr, r5
20661#endif
20662#else
20663	ubfx	lr, r5, #0, #8
20664#endif
20665	ldr	r8, [r0, r8, lsl #2]
20666	ldr	r11, [r0, r11, lsl #2]
20667	ldr	r12, [r0, r12, lsl #2]
20668	ldr	lr, [r0, lr, lsl #2]
20669#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20670#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20671	lsl	r9, r4, #8
20672	lsr	r9, r9, #24
20673#else
20674	uxtb	r9, r4, ror #16
20675#endif
20676#else
20677	ubfx	r9, r4, #16, #8
20678#endif
20679	eor	r8, r8, r11, ror #24
20680	lsr	r11, r5, #24
20681	eor	r8, r8, r12, ror #8
20682#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20683#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20684	lsl	r12, r7, #16
20685	lsr	r12, r12, #24
20686#else
20687	uxtb	r12, r7, ror #8
20688#endif
20689#else
20690	ubfx	r12, r7, #8, #8
20691#endif
20692	eor	r8, r8, lr, ror #16
20693#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20694#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20695	lsl	lr, r6, #24
20696	lsr	lr, lr, #24
20697#else
20698	uxtb	lr, r6
20699#endif
20700#else
20701	ubfx	lr, r6, #0, #8
20702#endif
20703	ldr	r9, [r0, r9, lsl #2]
20704	ldr	r11, [r0, r11, lsl #2]
20705	ldr	r12, [r0, r12, lsl #2]
20706	ldr	lr, [r0, lr, lsl #2]
20707#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20708#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20709	lsl	r10, r5, #8
20710	lsr	r10, r10, #24
20711#else
20712	uxtb	r10, r5, ror #16
20713#endif
20714#else
20715	ubfx	r10, r5, #16, #8
20716#endif
20717	eor	r9, r9, r11, ror #24
20718	lsr	r11, r6, #24
20719	eor	r9, r9, r12, ror #8
20720#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20721#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20722	lsl	r12, r4, #16
20723	lsr	r12, r12, #24
20724#else
20725	uxtb	r12, r4, ror #8
20726#endif
20727#else
20728	ubfx	r12, r4, #8, #8
20729#endif
20730	eor	r9, r9, lr, ror #16
20731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20733	lsl	lr, r7, #24
20734	lsr	lr, lr, #24
20735#else
20736	uxtb	lr, r7
20737#endif
20738#else
20739	ubfx	lr, r7, #0, #8
20740#endif
20741	ldr	r10, [r0, r10, lsl #2]
20742	ldr	r11, [r0, r11, lsl #2]
20743	ldr	r12, [r0, r12, lsl #2]
20744	ldr	lr, [r0, lr, lsl #2]
20745#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20746#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20747	lsl	r4, r4, #24
20748	lsr	r4, r4, #24
20749#else
20750	uxtb	r4, r4
20751#endif
20752#else
20753	ubfx	r4, r4, #0, #8
20754#endif
20755	eor	r10, r10, r11, ror #24
20756#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20757#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20758	lsl	r11, r6, #8
20759	lsr	r11, r11, #24
20760#else
20761	uxtb	r11, r6, ror #16
20762#endif
20763#else
20764	ubfx	r11, r6, #16, #8
20765#endif
20766	eor	r10, r10, r12, ror #8
20767	lsr	r12, r7, #24
20768	eor	r10, r10, lr, ror #16
20769#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20770#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20771	lsl	lr, r5, #16
20772	lsr	lr, lr, #24
20773#else
20774	uxtb	lr, r5, ror #8
20775#endif
20776#else
20777	ubfx	lr, r5, #8, #8
20778#endif
20779	ldr	r4, [r0, r4, lsl #2]
20780	ldr	r12, [r0, r12, lsl #2]
20781	ldr	r11, [r0, r11, lsl #2]
20782	ldr	lr, [r0, lr, lsl #2]
20783	eor	r12, r12, r4, ror #24
20784	ldm	r3!, {r4, r5, r6, r7}
20785	eor	r11, r11, lr, ror #8
20786	eor	r11, r11, r12, ror #24
20787	#   XOR in Key Schedule
20788	eor	r8, r8, r4
20789	eor	r9, r9, r5
20790	eor	r10, r10, r6
20791	eor	r11, r11, r7
20792#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20793#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20794	lsl	r4, r9, #24
20795	lsr	r4, r4, #24
20796#else
20797	uxtb	r4, r9
20798#endif
20799#else
20800	ubfx	r4, r9, #0, #8
20801#endif
20802#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20803#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20804	lsl	r7, r10, #16
20805	lsr	r7, r7, #24
20806#else
20807	uxtb	r7, r10, ror #8
20808#endif
20809#else
20810	ubfx	r7, r10, #8, #8
20811#endif
20812#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20813#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20814	lsl	r12, r11, #8
20815	lsr	r12, r12, #24
20816#else
20817	uxtb	r12, r11, ror #16
20818#endif
20819#else
20820	ubfx	r12, r11, #16, #8
20821#endif
20822	lsr	lr, r8, #24
20823	ldrb	r4, [r2, r4]
20824	ldrb	r7, [r2, r7]
20825	ldrb	r12, [r2, r12]
20826	ldrb	lr, [r2, lr]
20827#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20828#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20829	lsl	r5, r10, #24
20830	lsr	r5, r5, #24
20831#else
20832	uxtb	r5, r10
20833#endif
20834#else
20835	ubfx	r5, r10, #0, #8
20836#endif
20837	eor	r4, r4, r7, lsl #8
20838#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20839#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20840	lsl	r7, r11, #16
20841	lsr	r7, r7, #24
20842#else
20843	uxtb	r7, r11, ror #8
20844#endif
20845#else
20846	ubfx	r7, r11, #8, #8
20847#endif
20848	eor	r4, r4, r12, lsl #16
20849#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20850#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20851	lsl	r12, r8, #8
20852	lsr	r12, r12, #24
20853#else
20854	uxtb	r12, r8, ror #16
20855#endif
20856#else
20857	ubfx	r12, r8, #16, #8
20858#endif
20859	eor	r4, r4, lr, lsl #24
20860	lsr	lr, r9, #24
20861	ldrb	r7, [r2, r7]
20862	ldrb	lr, [r2, lr]
20863	ldrb	r5, [r2, r5]
20864	ldrb	r12, [r2, r12]
20865#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20866#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20867	lsl	r6, r11, #24
20868	lsr	r6, r6, #24
20869#else
20870	uxtb	r6, r11
20871#endif
20872#else
20873	ubfx	r6, r11, #0, #8
20874#endif
20875	eor	r5, r5, r7, lsl #8
20876#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20877#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20878	lsl	r7, r8, #16
20879	lsr	r7, r7, #24
20880#else
20881	uxtb	r7, r8, ror #8
20882#endif
20883#else
20884	ubfx	r7, r8, #8, #8
20885#endif
20886	eor	r5, r5, r12, lsl #16
20887#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20888#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20889	lsl	r12, r9, #8
20890	lsr	r12, r12, #24
20891#else
20892	uxtb	r12, r9, ror #16
20893#endif
20894#else
20895	ubfx	r12, r9, #16, #8
20896#endif
20897	eor	r5, r5, lr, lsl #24
20898	lsr	lr, r10, #24
20899	ldrb	r7, [r2, r7]
20900	ldrb	lr, [r2, lr]
20901	ldrb	r6, [r2, r6]
20902	ldrb	r12, [r2, r12]
20903	lsr	r11, r11, #24
20904	eor	r6, r6, r7, lsl #8
20905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20906#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20907	lsl	r7, r8, #24
20908	lsr	r7, r7, #24
20909#else
20910	uxtb	r7, r8
20911#endif
20912#else
20913	ubfx	r7, r8, #0, #8
20914#endif
20915	eor	r6, r6, r12, lsl #16
20916#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20917#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20918	lsl	r12, r9, #16
20919	lsr	r12, r12, #24
20920#else
20921	uxtb	r12, r9, ror #8
20922#endif
20923#else
20924	ubfx	r12, r9, #8, #8
20925#endif
20926	eor	r6, r6, lr, lsl #24
20927#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20928#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20929	lsl	lr, r10, #8
20930	lsr	lr, lr, #24
20931#else
20932	uxtb	lr, r10, ror #16
20933#endif
20934#else
20935	ubfx	lr, r10, #16, #8
20936#endif
20937	ldrb	r11, [r2, r11]
20938	ldrb	r12, [r2, r12]
20939	ldrb	r7, [r2, r7]
20940	ldrb	lr, [r2, lr]
20941	eor	r12, r12, r11, lsl #16
20942	ldm	r3, {r8, r9, r10, r11}
20943	eor	r7, r7, r12, lsl #8
20944	eor	r7, r7, lr, lsl #16
20945	#   XOR in Key Schedule
20946	eor	r4, r4, r8
20947	eor	r5, r5, r9
20948	eor	r6, r6, r10
20949	eor	r7, r7, r11
20950#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
20951	ldr	lr, [sp, #16]
20952#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20953	eor	r8, r4, r4, ror #16
20954	eor	r9, r5, r5, ror #16
20955	eor	r10, r6, r6, ror #16
20956	eor	r11, r7, r7, ror #16
20957	bic	r8, r8, #0xff0000
20958	bic	r9, r9, #0xff0000
20959	bic	r10, r10, #0xff0000
20960	bic	r11, r11, #0xff0000
20961	ror	r4, r4, #8
20962	ror	r5, r5, #8
20963	ror	r6, r6, #8
20964	ror	r7, r7, #8
20965	eor	r4, r4, r8, lsr #8
20966	eor	r5, r5, r9, lsr #8
20967	eor	r6, r6, r10, lsr #8
20968	eor	r7, r7, r11, lsr #8
20969#else
20970	rev	r4, r4
20971	rev	r5, r5
20972	rev	r6, r6
20973	rev	r7, r7
20974#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
20975	ldm	lr, {r8, r9, r10, r11}
20976	pop	{r1, r12, lr}
20977	ldr	r3, [sp]
20978	eor	r4, r4, r8
20979	eor	r5, r5, r9
20980	eor	r6, r6, r10
20981	eor	r7, r7, r11
20982	str	r4, [r1]
20983	str	r5, [r1, #4]
20984	str	r6, [r1, #8]
20985	str	r7, [r1, #12]
20986	subs	r12, r12, #16
20987	add	lr, lr, #16
20988	add	r1, r1, #16
20989	beq	L_AES_CBC_decrypt_end_odd
20990	push	{r1, r12, lr}
20991	ldr	r4, [lr]
20992	ldr	r5, [lr, #4]
20993	ldr	r6, [lr, #8]
20994	ldr	r7, [lr, #12]
20995	ldr	lr, [sp, #16]
20996#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20997	stm	lr, {r4, r5}
20998#else
20999	strd	r4, r5, [lr]
21000#endif
21001#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21002	str	r6, [lr, #8]
21003	str	r7, [lr, #12]
21004#else
21005	strd	r6, r7, [lr, #8]
21006#endif
21007#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21008	eor	r8, r4, r4, ror #16
21009	eor	r9, r5, r5, ror #16
21010	eor	r10, r6, r6, ror #16
21011	eor	r11, r7, r7, ror #16
21012	bic	r8, r8, #0xff0000
21013	bic	r9, r9, #0xff0000
21014	bic	r10, r10, #0xff0000
21015	bic	r11, r11, #0xff0000
21016	ror	r4, r4, #8
21017	ror	r5, r5, #8
21018	ror	r6, r6, #8
21019	ror	r7, r7, #8
21020	eor	r4, r4, r8, lsr #8
21021	eor	r5, r5, r9, lsr #8
21022	eor	r6, r6, r10, lsr #8
21023	eor	r7, r7, r11, lsr #8
21024#else
21025	rev	r4, r4
21026	rev	r5, r5
21027	rev	r6, r6
21028	rev	r7, r7
21029#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
21030	ldm	r3!, {r8, r9, r10, r11}
21031	# Round: 0 - XOR in key schedule
21032	eor	r4, r4, r8
21033	eor	r5, r5, r9
21034	eor	r6, r6, r10
21035	eor	r7, r7, r11
21036	mov	r1, #5
21037#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
21038	bl	AES_decrypt_block
21039#else
21040L_AES_CBC_decrypt_block_nr_192_even:
21041#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21042#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21043	lsl	r8, r7, #8
21044	lsr	r8, r8, #24
21045#else
21046	uxtb	r8, r7, ror #16
21047#endif
21048#else
21049	ubfx	r8, r7, #16, #8
21050#endif
21051	lsr	r11, r4, #24
21052#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21053#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21054	lsl	r12, r6, #16
21055	lsr	r12, r12, #24
21056#else
21057	uxtb	r12, r6, ror #8
21058#endif
21059#else
21060	ubfx	r12, r6, #8, #8
21061#endif
21062#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21063#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21064	lsl	lr, r5, #24
21065	lsr	lr, lr, #24
21066#else
21067	uxtb	lr, r5
21068#endif
21069#else
21070	ubfx	lr, r5, #0, #8
21071#endif
21072	ldr	r8, [r0, r8, lsl #2]
21073	ldr	r11, [r0, r11, lsl #2]
21074	ldr	r12, [r0, r12, lsl #2]
21075	ldr	lr, [r0, lr, lsl #2]
21076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21077#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21078	lsl	r9, r4, #8
21079	lsr	r9, r9, #24
21080#else
21081	uxtb	r9, r4, ror #16
21082#endif
21083#else
21084	ubfx	r9, r4, #16, #8
21085#endif
21086	eor	r8, r8, r11, ror #24
21087	lsr	r11, r5, #24
21088	eor	r8, r8, r12, ror #8
21089#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21090#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21091	lsl	r12, r7, #16
21092	lsr	r12, r12, #24
21093#else
21094	uxtb	r12, r7, ror #8
21095#endif
21096#else
21097	ubfx	r12, r7, #8, #8
21098#endif
21099	eor	r8, r8, lr, ror #16
21100#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21101#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21102	lsl	lr, r6, #24
21103	lsr	lr, lr, #24
21104#else
21105	uxtb	lr, r6
21106#endif
21107#else
21108	ubfx	lr, r6, #0, #8
21109#endif
21110	ldr	r9, [r0, r9, lsl #2]
21111	ldr	r11, [r0, r11, lsl #2]
21112	ldr	r12, [r0, r12, lsl #2]
21113	ldr	lr, [r0, lr, lsl #2]
21114#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21115#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21116	lsl	r10, r5, #8
21117	lsr	r10, r10, #24
21118#else
21119	uxtb	r10, r5, ror #16
21120#endif
21121#else
21122	ubfx	r10, r5, #16, #8
21123#endif
21124	eor	r9, r9, r11, ror #24
21125	lsr	r11, r6, #24
21126	eor	r9, r9, r12, ror #8
21127#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21128#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21129	lsl	r12, r4, #16
21130	lsr	r12, r12, #24
21131#else
21132	uxtb	r12, r4, ror #8
21133#endif
21134#else
21135	ubfx	r12, r4, #8, #8
21136#endif
21137	eor	r9, r9, lr, ror #16
21138#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21139#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21140	lsl	lr, r7, #24
21141	lsr	lr, lr, #24
21142#else
21143	uxtb	lr, r7
21144#endif
21145#else
21146	ubfx	lr, r7, #0, #8
21147#endif
21148	ldr	r10, [r0, r10, lsl #2]
21149	ldr	r11, [r0, r11, lsl #2]
21150	ldr	r12, [r0, r12, lsl #2]
21151	ldr	lr, [r0, lr, lsl #2]
21152#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21153#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21154	lsl	r4, r4, #24
21155	lsr	r4, r4, #24
21156#else
21157	uxtb	r4, r4
21158#endif
21159#else
21160	ubfx	r4, r4, #0, #8
21161#endif
21162	eor	r10, r10, r11, ror #24
21163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21164#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21165	lsl	r11, r6, #8
21166	lsr	r11, r11, #24
21167#else
21168	uxtb	r11, r6, ror #16
21169#endif
21170#else
21171	ubfx	r11, r6, #16, #8
21172#endif
21173	eor	r10, r10, r12, ror #8
21174	lsr	r12, r7, #24
21175	eor	r10, r10, lr, ror #16
21176#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21177#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21178	lsl	lr, r5, #16
21179	lsr	lr, lr, #24
21180#else
21181	uxtb	lr, r5, ror #8
21182#endif
21183#else
21184	ubfx	lr, r5, #8, #8
21185#endif
21186	ldr	r4, [r0, r4, lsl #2]
21187	ldr	r12, [r0, r12, lsl #2]
21188	ldr	r11, [r0, r11, lsl #2]
21189	ldr	lr, [r0, lr, lsl #2]
21190	eor	r12, r12, r4, ror #24
21191	ldm	r3!, {r4, r5, r6, r7}
21192	eor	r11, r11, lr, ror #8
21193	eor	r11, r11, r12, ror #24
21194	#   XOR in Key Schedule
21195	eor	r8, r8, r4
21196	eor	r9, r9, r5
21197	eor	r10, r10, r6
21198	eor	r11, r11, r7
21199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21200#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21201	lsl	r4, r11, #8
21202	lsr	r4, r4, #24
21203#else
21204	uxtb	r4, r11, ror #16
21205#endif
21206#else
21207	ubfx	r4, r11, #16, #8
21208#endif
21209	lsr	r7, r8, #24
21210#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21211#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21212	lsl	r12, r10, #16
21213	lsr	r12, r12, #24
21214#else
21215	uxtb	r12, r10, ror #8
21216#endif
21217#else
21218	ubfx	r12, r10, #8, #8
21219#endif
21220#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21221#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21222	lsl	lr, r9, #24
21223	lsr	lr, lr, #24
21224#else
21225	uxtb	lr, r9
21226#endif
21227#else
21228	ubfx	lr, r9, #0, #8
21229#endif
21230	ldr	r4, [r0, r4, lsl #2]
21231	ldr	r7, [r0, r7, lsl #2]
21232	ldr	r12, [r0, r12, lsl #2]
21233	ldr	lr, [r0, lr, lsl #2]
21234#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21235#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21236	lsl	r5, r8, #8
21237	lsr	r5, r5, #24
21238#else
21239	uxtb	r5, r8, ror #16
21240#endif
21241#else
21242	ubfx	r5, r8, #16, #8
21243#endif
21244	eor	r4, r4, r7, ror #24
21245	lsr	r7, r9, #24
21246	eor	r4, r4, r12, ror #8
21247#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21248#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21249	lsl	r12, r11, #16
21250	lsr	r12, r12, #24
21251#else
21252	uxtb	r12, r11, ror #8
21253#endif
21254#else
21255	ubfx	r12, r11, #8, #8
21256#endif
21257	eor	r4, r4, lr, ror #16
21258#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21259#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21260	lsl	lr, r10, #24
21261	lsr	lr, lr, #24
21262#else
21263	uxtb	lr, r10
21264#endif
21265#else
21266	ubfx	lr, r10, #0, #8
21267#endif
21268	ldr	r5, [r0, r5, lsl #2]
21269	ldr	r7, [r0, r7, lsl #2]
21270	ldr	r12, [r0, r12, lsl #2]
21271	ldr	lr, [r0, lr, lsl #2]
21272#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21273#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21274	lsl	r6, r9, #8
21275	lsr	r6, r6, #24
21276#else
21277	uxtb	r6, r9, ror #16
21278#endif
21279#else
21280	ubfx	r6, r9, #16, #8
21281#endif
21282	eor	r5, r5, r7, ror #24
21283	lsr	r7, r10, #24
21284	eor	r5, r5, r12, ror #8
21285#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21286#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21287	lsl	r12, r8, #16
21288	lsr	r12, r12, #24
21289#else
21290	uxtb	r12, r8, ror #8
21291#endif
21292#else
21293	ubfx	r12, r8, #8, #8
21294#endif
21295	eor	r5, r5, lr, ror #16
21296#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21297#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21298	lsl	lr, r11, #24
21299	lsr	lr, lr, #24
21300#else
21301	uxtb	lr, r11
21302#endif
21303#else
21304	ubfx	lr, r11, #0, #8
21305#endif
21306	ldr	r6, [r0, r6, lsl #2]
21307	ldr	r7, [r0, r7, lsl #2]
21308	ldr	r12, [r0, r12, lsl #2]
21309	ldr	lr, [r0, lr, lsl #2]
21310#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21311#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21312	lsl	r8, r8, #24
21313	lsr	r8, r8, #24
21314#else
21315	uxtb	r8, r8
21316#endif
21317#else
21318	ubfx	r8, r8, #0, #8
21319#endif
21320	eor	r6, r6, r7, ror #24
21321#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21322#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21323	lsl	r7, r10, #8
21324	lsr	r7, r7, #24
21325#else
21326	uxtb	r7, r10, ror #16
21327#endif
21328#else
21329	ubfx	r7, r10, #16, #8
21330#endif
21331	eor	r6, r6, r12, ror #8
21332	lsr	r12, r11, #24
21333	eor	r6, r6, lr, ror #16
21334#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21335#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21336	lsl	lr, r9, #16
21337	lsr	lr, lr, #24
21338#else
21339	uxtb	lr, r9, ror #8
21340#endif
21341#else
21342	ubfx	lr, r9, #8, #8
21343#endif
21344	ldr	r8, [r0, r8, lsl #2]
21345	ldr	r12, [r0, r12, lsl #2]
21346	ldr	r7, [r0, r7, lsl #2]
21347	ldr	lr, [r0, lr, lsl #2]
21348	eor	r12, r12, r8, ror #24
21349	ldm	r3!, {r8, r9, r10, r11}
21350	eor	r7, r7, lr, ror #8
21351	eor	r7, r7, r12, ror #24
21352	#   XOR in Key Schedule
21353	eor	r4, r4, r8
21354	eor	r5, r5, r9
21355	eor	r6, r6, r10
21356	eor	r7, r7, r11
21357	subs	r1, r1, #1
21358	bne	L_AES_CBC_decrypt_block_nr_192_even
21359#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21360#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21361	lsl	r8, r7, #8
21362	lsr	r8, r8, #24
21363#else
21364	uxtb	r8, r7, ror #16
21365#endif
21366#else
21367	ubfx	r8, r7, #16, #8
21368#endif
21369	lsr	r11, r4, #24
21370#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21371#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21372	lsl	r12, r6, #16
21373	lsr	r12, r12, #24
21374#else
21375	uxtb	r12, r6, ror #8
21376#endif
21377#else
21378	ubfx	r12, r6, #8, #8
21379#endif
21380#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21381#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21382	lsl	lr, r5, #24
21383	lsr	lr, lr, #24
21384#else
21385	uxtb	lr, r5
21386#endif
21387#else
21388	ubfx	lr, r5, #0, #8
21389#endif
21390	ldr	r8, [r0, r8, lsl #2]
21391	ldr	r11, [r0, r11, lsl #2]
21392	ldr	r12, [r0, r12, lsl #2]
21393	ldr	lr, [r0, lr, lsl #2]
21394#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21395#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21396	lsl	r9, r4, #8
21397	lsr	r9, r9, #24
21398#else
21399	uxtb	r9, r4, ror #16
21400#endif
21401#else
21402	ubfx	r9, r4, #16, #8
21403#endif
21404	eor	r8, r8, r11, ror #24
21405	lsr	r11, r5, #24
21406	eor	r8, r8, r12, ror #8
21407#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21408#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21409	lsl	r12, r7, #16
21410	lsr	r12, r12, #24
21411#else
21412	uxtb	r12, r7, ror #8
21413#endif
21414#else
21415	ubfx	r12, r7, #8, #8
21416#endif
21417	eor	r8, r8, lr, ror #16
21418#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21419#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21420	lsl	lr, r6, #24
21421	lsr	lr, lr, #24
21422#else
21423	uxtb	lr, r6
21424#endif
21425#else
21426	ubfx	lr, r6, #0, #8
21427#endif
21428	ldr	r9, [r0, r9, lsl #2]
21429	ldr	r11, [r0, r11, lsl #2]
21430	ldr	r12, [r0, r12, lsl #2]
21431	ldr	lr, [r0, lr, lsl #2]
21432#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21433#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21434	lsl	r10, r5, #8
21435	lsr	r10, r10, #24
21436#else
21437	uxtb	r10, r5, ror #16
21438#endif
21439#else
21440	ubfx	r10, r5, #16, #8
21441#endif
21442	eor	r9, r9, r11, ror #24
21443	lsr	r11, r6, #24
21444	eor	r9, r9, r12, ror #8
21445#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21446#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21447	lsl	r12, r4, #16
21448	lsr	r12, r12, #24
21449#else
21450	uxtb	r12, r4, ror #8
21451#endif
21452#else
21453	ubfx	r12, r4, #8, #8
21454#endif
21455	eor	r9, r9, lr, ror #16
21456#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21457#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21458	lsl	lr, r7, #24
21459	lsr	lr, lr, #24
21460#else
21461	uxtb	lr, r7
21462#endif
21463#else
21464	ubfx	lr, r7, #0, #8
21465#endif
21466	ldr	r10, [r0, r10, lsl #2]
21467	ldr	r11, [r0, r11, lsl #2]
21468	ldr	r12, [r0, r12, lsl #2]
21469	ldr	lr, [r0, lr, lsl #2]
21470#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21471#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21472	lsl	r4, r4, #24
21473	lsr	r4, r4, #24
21474#else
21475	uxtb	r4, r4
21476#endif
21477#else
21478	ubfx	r4, r4, #0, #8
21479#endif
21480	eor	r10, r10, r11, ror #24
21481#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21482#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21483	lsl	r11, r6, #8
21484	lsr	r11, r11, #24
21485#else
21486	uxtb	r11, r6, ror #16
21487#endif
21488#else
21489	ubfx	r11, r6, #16, #8
21490#endif
21491	eor	r10, r10, r12, ror #8
21492	lsr	r12, r7, #24
21493	eor	r10, r10, lr, ror #16
21494#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21496	lsl	lr, r5, #16
21497	lsr	lr, lr, #24
21498#else
21499	uxtb	lr, r5, ror #8
21500#endif
21501#else
21502	ubfx	lr, r5, #8, #8
21503#endif
21504	ldr	r4, [r0, r4, lsl #2]
21505	ldr	r12, [r0, r12, lsl #2]
21506	ldr	r11, [r0, r11, lsl #2]
21507	ldr	lr, [r0, lr, lsl #2]
21508	eor	r12, r12, r4, ror #24
21509	ldm	r3!, {r4, r5, r6, r7}
21510	eor	r11, r11, lr, ror #8
21511	eor	r11, r11, r12, ror #24
21512	#   XOR in Key Schedule
21513	eor	r8, r8, r4
21514	eor	r9, r9, r5
21515	eor	r10, r10, r6
21516	eor	r11, r11, r7
21517#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21518#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21519	lsl	r4, r9, #24
21520	lsr	r4, r4, #24
21521#else
21522	uxtb	r4, r9
21523#endif
21524#else
21525	ubfx	r4, r9, #0, #8
21526#endif
21527#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21528#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21529	lsl	r7, r10, #16
21530	lsr	r7, r7, #24
21531#else
21532	uxtb	r7, r10, ror #8
21533#endif
21534#else
21535	ubfx	r7, r10, #8, #8
21536#endif
21537#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21538#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21539	lsl	r12, r11, #8
21540	lsr	r12, r12, #24
21541#else
21542	uxtb	r12, r11, ror #16
21543#endif
21544#else
21545	ubfx	r12, r11, #16, #8
21546#endif
21547	lsr	lr, r8, #24
21548	ldrb	r4, [r2, r4]
21549	ldrb	r7, [r2, r7]
21550	ldrb	r12, [r2, r12]
21551	ldrb	lr, [r2, lr]
21552#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21553#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21554	lsl	r5, r10, #24
21555	lsr	r5, r5, #24
21556#else
21557	uxtb	r5, r10
21558#endif
21559#else
21560	ubfx	r5, r10, #0, #8
21561#endif
21562	eor	r4, r4, r7, lsl #8
21563#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21564#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21565	lsl	r7, r11, #16
21566	lsr	r7, r7, #24
21567#else
21568	uxtb	r7, r11, ror #8
21569#endif
21570#else
21571	ubfx	r7, r11, #8, #8
21572#endif
21573	eor	r4, r4, r12, lsl #16
21574#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21575#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21576	lsl	r12, r8, #8
21577	lsr	r12, r12, #24
21578#else
21579	uxtb	r12, r8, ror #16
21580#endif
21581#else
21582	ubfx	r12, r8, #16, #8
21583#endif
21584	eor	r4, r4, lr, lsl #24
21585	lsr	lr, r9, #24
21586	ldrb	r7, [r2, r7]
21587	ldrb	lr, [r2, lr]
21588	ldrb	r5, [r2, r5]
21589	ldrb	r12, [r2, r12]
21590#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21591#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21592	lsl	r6, r11, #24
21593	lsr	r6, r6, #24
21594#else
21595	uxtb	r6, r11
21596#endif
21597#else
21598	ubfx	r6, r11, #0, #8
21599#endif
21600	eor	r5, r5, r7, lsl #8
21601#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21602#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21603	lsl	r7, r8, #16
21604	lsr	r7, r7, #24
21605#else
21606	uxtb	r7, r8, ror #8
21607#endif
21608#else
21609	ubfx	r7, r8, #8, #8
21610#endif
21611	eor	r5, r5, r12, lsl #16
21612#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21613#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21614	lsl	r12, r9, #8
21615	lsr	r12, r12, #24
21616#else
21617	uxtb	r12, r9, ror #16
21618#endif
21619#else
21620	ubfx	r12, r9, #16, #8
21621#endif
21622	eor	r5, r5, lr, lsl #24
21623	lsr	lr, r10, #24
21624	ldrb	r7, [r2, r7]
21625	ldrb	lr, [r2, lr]
21626	ldrb	r6, [r2, r6]
21627	ldrb	r12, [r2, r12]
21628	lsr	r11, r11, #24
21629	eor	r6, r6, r7, lsl #8
21630#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21631#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21632	lsl	r7, r8, #24
21633	lsr	r7, r7, #24
21634#else
21635	uxtb	r7, r8
21636#endif
21637#else
21638	ubfx	r7, r8, #0, #8
21639#endif
21640	eor	r6, r6, r12, lsl #16
21641#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21642#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21643	lsl	r12, r9, #16
21644	lsr	r12, r12, #24
21645#else
21646	uxtb	r12, r9, ror #8
21647#endif
21648#else
21649	ubfx	r12, r9, #8, #8
21650#endif
21651	eor	r6, r6, lr, lsl #24
21652#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21653#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21654	lsl	lr, r10, #8
21655	lsr	lr, lr, #24
21656#else
21657	uxtb	lr, r10, ror #16
21658#endif
21659#else
21660	ubfx	lr, r10, #16, #8
21661#endif
21662	ldrb	r11, [r2, r11]
21663	ldrb	r12, [r2, r12]
21664	ldrb	r7, [r2, r7]
21665	ldrb	lr, [r2, lr]
21666	eor	r12, r12, r11, lsl #16
21667	ldm	r3, {r8, r9, r10, r11}
21668	eor	r7, r7, r12, lsl #8
21669	eor	r7, r7, lr, lsl #16
21670	#   XOR in Key Schedule
21671	eor	r4, r4, r8
21672	eor	r5, r5, r9
21673	eor	r6, r6, r10
21674	eor	r7, r7, r11
21675#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
21676	ldr	lr, [sp, #16]
21677#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21678	eor	r8, r4, r4, ror #16
21679	eor	r9, r5, r5, ror #16
21680	eor	r10, r6, r6, ror #16
21681	eor	r11, r7, r7, ror #16
21682	bic	r8, r8, #0xff0000
21683	bic	r9, r9, #0xff0000
21684	bic	r10, r10, #0xff0000
21685	bic	r11, r11, #0xff0000
21686	ror	r4, r4, #8
21687	ror	r5, r5, #8
21688	ror	r6, r6, #8
21689	ror	r7, r7, #8
21690	eor	r4, r4, r8, lsr #8
21691	eor	r5, r5, r9, lsr #8
21692	eor	r6, r6, r10, lsr #8
21693	eor	r7, r7, r11, lsr #8
21694#else
21695	rev	r4, r4
21696	rev	r5, r5
21697	rev	r6, r6
21698	rev	r7, r7
21699#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
21700#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21701	ldr	r8, [lr, #16]
21702	ldr	r9, [lr, #20]
21703#else
21704	ldrd	r8, r9, [lr, #16]
21705#endif
21706#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21707	ldr	r10, [lr, #24]
21708	ldr	r11, [lr, #28]
21709#else
21710	ldrd	r10, r11, [lr, #24]
21711#endif
21712	pop	{r1, r12, lr}
21713	ldr	r3, [sp]
21714	eor	r4, r4, r8
21715	eor	r5, r5, r9
21716	eor	r6, r6, r10
21717	eor	r7, r7, r11
21718	str	r4, [r1]
21719	str	r5, [r1, #4]
21720	str	r6, [r1, #8]
21721	str	r7, [r1, #12]
21722	subs	r12, r12, #16
21723	add	lr, lr, #16
21724	add	r1, r1, #16
21725	bne	L_AES_CBC_decrypt_loop_block_192
21726	b	L_AES_CBC_decrypt_end
21727L_AES_CBC_decrypt_loop_block_128:
21728	push	{r1, r12, lr}
21729	ldr	r4, [lr]
21730	ldr	r5, [lr, #4]
21731	ldr	r6, [lr, #8]
21732	ldr	r7, [lr, #12]
21733	ldr	lr, [sp, #16]
21734#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21735	str	r4, [lr, #16]
21736	str	r5, [lr, #20]
21737#else
21738	strd	r4, r5, [lr, #16]
21739#endif
21740#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21741	str	r6, [lr, #24]
21742	str	r7, [lr, #28]
21743#else
21744	strd	r6, r7, [lr, #24]
21745#endif
21746#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21747	eor	r8, r4, r4, ror #16
21748	eor	r9, r5, r5, ror #16
21749	eor	r10, r6, r6, ror #16
21750	eor	r11, r7, r7, ror #16
21751	bic	r8, r8, #0xff0000
21752	bic	r9, r9, #0xff0000
21753	bic	r10, r10, #0xff0000
21754	bic	r11, r11, #0xff0000
21755	ror	r4, r4, #8
21756	ror	r5, r5, #8
21757	ror	r6, r6, #8
21758	ror	r7, r7, #8
21759	eor	r4, r4, r8, lsr #8
21760	eor	r5, r5, r9, lsr #8
21761	eor	r6, r6, r10, lsr #8
21762	eor	r7, r7, r11, lsr #8
21763#else
21764	rev	r4, r4
21765	rev	r5, r5
21766	rev	r6, r6
21767	rev	r7, r7
21768#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
21769	ldm	r3!, {r8, r9, r10, r11}
21770	# Round: 0 - XOR in key schedule
21771	eor	r4, r4, r8
21772	eor	r5, r5, r9
21773	eor	r6, r6, r10
21774	eor	r7, r7, r11
21775	mov	r1, #4
21776#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
21777	bl	AES_decrypt_block
21778#else
21779L_AES_CBC_decrypt_block_nr_128_odd:
21780#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21781#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21782	lsl	r8, r7, #8
21783	lsr	r8, r8, #24
21784#else
21785	uxtb	r8, r7, ror #16
21786#endif
21787#else
21788	ubfx	r8, r7, #16, #8
21789#endif
21790	lsr	r11, r4, #24
21791#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21792#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21793	lsl	r12, r6, #16
21794	lsr	r12, r12, #24
21795#else
21796	uxtb	r12, r6, ror #8
21797#endif
21798#else
21799	ubfx	r12, r6, #8, #8
21800#endif
21801#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21802#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21803	lsl	lr, r5, #24
21804	lsr	lr, lr, #24
21805#else
21806	uxtb	lr, r5
21807#endif
21808#else
21809	ubfx	lr, r5, #0, #8
21810#endif
21811	ldr	r8, [r0, r8, lsl #2]
21812	ldr	r11, [r0, r11, lsl #2]
21813	ldr	r12, [r0, r12, lsl #2]
21814	ldr	lr, [r0, lr, lsl #2]
21815#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21816#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21817	lsl	r9, r4, #8
21818	lsr	r9, r9, #24
21819#else
21820	uxtb	r9, r4, ror #16
21821#endif
21822#else
21823	ubfx	r9, r4, #16, #8
21824#endif
21825	eor	r8, r8, r11, ror #24
21826	lsr	r11, r5, #24
21827	eor	r8, r8, r12, ror #8
21828#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21829#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21830	lsl	r12, r7, #16
21831	lsr	r12, r12, #24
21832#else
21833	uxtb	r12, r7, ror #8
21834#endif
21835#else
21836	ubfx	r12, r7, #8, #8
21837#endif
21838	eor	r8, r8, lr, ror #16
21839#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21840#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21841	lsl	lr, r6, #24
21842	lsr	lr, lr, #24
21843#else
21844	uxtb	lr, r6
21845#endif
21846#else
21847	ubfx	lr, r6, #0, #8
21848#endif
21849	ldr	r9, [r0, r9, lsl #2]
21850	ldr	r11, [r0, r11, lsl #2]
21851	ldr	r12, [r0, r12, lsl #2]
21852	ldr	lr, [r0, lr, lsl #2]
21853#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21854#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21855	lsl	r10, r5, #8
21856	lsr	r10, r10, #24
21857#else
21858	uxtb	r10, r5, ror #16
21859#endif
21860#else
21861	ubfx	r10, r5, #16, #8
21862#endif
21863	eor	r9, r9, r11, ror #24
21864	lsr	r11, r6, #24
21865	eor	r9, r9, r12, ror #8
21866#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21867#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21868	lsl	r12, r4, #16
21869	lsr	r12, r12, #24
21870#else
21871	uxtb	r12, r4, ror #8
21872#endif
21873#else
21874	ubfx	r12, r4, #8, #8
21875#endif
21876	eor	r9, r9, lr, ror #16
21877#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21878#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21879	lsl	lr, r7, #24
21880	lsr	lr, lr, #24
21881#else
21882	uxtb	lr, r7
21883#endif
21884#else
21885	ubfx	lr, r7, #0, #8
21886#endif
21887	ldr	r10, [r0, r10, lsl #2]
21888	ldr	r11, [r0, r11, lsl #2]
21889	ldr	r12, [r0, r12, lsl #2]
21890	ldr	lr, [r0, lr, lsl #2]
21891#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21892#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21893	lsl	r4, r4, #24
21894	lsr	r4, r4, #24
21895#else
21896	uxtb	r4, r4
21897#endif
21898#else
21899	ubfx	r4, r4, #0, #8
21900#endif
21901	eor	r10, r10, r11, ror #24
21902#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21903#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21904	lsl	r11, r6, #8
21905	lsr	r11, r11, #24
21906#else
21907	uxtb	r11, r6, ror #16
21908#endif
21909#else
21910	ubfx	r11, r6, #16, #8
21911#endif
21912	eor	r10, r10, r12, ror #8
21913	lsr	r12, r7, #24
21914	eor	r10, r10, lr, ror #16
21915#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21916#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21917	lsl	lr, r5, #16
21918	lsr	lr, lr, #24
21919#else
21920	uxtb	lr, r5, ror #8
21921#endif
21922#else
21923	ubfx	lr, r5, #8, #8
21924#endif
21925	ldr	r4, [r0, r4, lsl #2]
21926	ldr	r12, [r0, r12, lsl #2]
21927	ldr	r11, [r0, r11, lsl #2]
21928	ldr	lr, [r0, lr, lsl #2]
21929	eor	r12, r12, r4, ror #24
21930	ldm	r3!, {r4, r5, r6, r7}
21931	eor	r11, r11, lr, ror #8
21932	eor	r11, r11, r12, ror #24
21933	#   XOR in Key Schedule
21934	eor	r8, r8, r4
21935	eor	r9, r9, r5
21936	eor	r10, r10, r6
21937	eor	r11, r11, r7
21938#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21939#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21940	lsl	r4, r11, #8
21941	lsr	r4, r4, #24
21942#else
21943	uxtb	r4, r11, ror #16
21944#endif
21945#else
21946	ubfx	r4, r11, #16, #8
21947#endif
21948	lsr	r7, r8, #24
21949#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21950#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21951	lsl	r12, r10, #16
21952	lsr	r12, r12, #24
21953#else
21954	uxtb	r12, r10, ror #8
21955#endif
21956#else
21957	ubfx	r12, r10, #8, #8
21958#endif
21959#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21960#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21961	lsl	lr, r9, #24
21962	lsr	lr, lr, #24
21963#else
21964	uxtb	lr, r9
21965#endif
21966#else
21967	ubfx	lr, r9, #0, #8
21968#endif
21969	ldr	r4, [r0, r4, lsl #2]
21970	ldr	r7, [r0, r7, lsl #2]
21971	ldr	r12, [r0, r12, lsl #2]
21972	ldr	lr, [r0, lr, lsl #2]
21973#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21974#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21975	lsl	r5, r8, #8
21976	lsr	r5, r5, #24
21977#else
21978	uxtb	r5, r8, ror #16
21979#endif
21980#else
21981	ubfx	r5, r8, #16, #8
21982#endif
21983	eor	r4, r4, r7, ror #24
21984	lsr	r7, r9, #24
21985	eor	r4, r4, r12, ror #8
21986#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21987#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21988	lsl	r12, r11, #16
21989	lsr	r12, r12, #24
21990#else
21991	uxtb	r12, r11, ror #8
21992#endif
21993#else
21994	ubfx	r12, r11, #8, #8
21995#endif
21996	eor	r4, r4, lr, ror #16
21997#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21998#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21999	lsl	lr, r10, #24
22000	lsr	lr, lr, #24
22001#else
22002	uxtb	lr, r10
22003#endif
22004#else
22005	ubfx	lr, r10, #0, #8
22006#endif
22007	ldr	r5, [r0, r5, lsl #2]
22008	ldr	r7, [r0, r7, lsl #2]
22009	ldr	r12, [r0, r12, lsl #2]
22010	ldr	lr, [r0, lr, lsl #2]
22011#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22012#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22013	lsl	r6, r9, #8
22014	lsr	r6, r6, #24
22015#else
22016	uxtb	r6, r9, ror #16
22017#endif
22018#else
22019	ubfx	r6, r9, #16, #8
22020#endif
22021	eor	r5, r5, r7, ror #24
22022	lsr	r7, r10, #24
22023	eor	r5, r5, r12, ror #8
22024#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22025#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22026	lsl	r12, r8, #16
22027	lsr	r12, r12, #24
22028#else
22029	uxtb	r12, r8, ror #8
22030#endif
22031#else
22032	ubfx	r12, r8, #8, #8
22033#endif
22034	eor	r5, r5, lr, ror #16
22035#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22036#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22037	lsl	lr, r11, #24
22038	lsr	lr, lr, #24
22039#else
22040	uxtb	lr, r11
22041#endif
22042#else
22043	ubfx	lr, r11, #0, #8
22044#endif
22045	ldr	r6, [r0, r6, lsl #2]
22046	ldr	r7, [r0, r7, lsl #2]
22047	ldr	r12, [r0, r12, lsl #2]
22048	ldr	lr, [r0, lr, lsl #2]
22049#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22050#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22051	lsl	r8, r8, #24
22052	lsr	r8, r8, #24
22053#else
22054	uxtb	r8, r8
22055#endif
22056#else
22057	ubfx	r8, r8, #0, #8
22058#endif
22059	eor	r6, r6, r7, ror #24
22060#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22061#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22062	lsl	r7, r10, #8
22063	lsr	r7, r7, #24
22064#else
22065	uxtb	r7, r10, ror #16
22066#endif
22067#else
22068	ubfx	r7, r10, #16, #8
22069#endif
22070	eor	r6, r6, r12, ror #8
22071	lsr	r12, r11, #24
22072	eor	r6, r6, lr, ror #16
22073#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22074#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22075	lsl	lr, r9, #16
22076	lsr	lr, lr, #24
22077#else
22078	uxtb	lr, r9, ror #8
22079#endif
22080#else
22081	ubfx	lr, r9, #8, #8
22082#endif
22083	ldr	r8, [r0, r8, lsl #2]
22084	ldr	r12, [r0, r12, lsl #2]
22085	ldr	r7, [r0, r7, lsl #2]
22086	ldr	lr, [r0, lr, lsl #2]
22087	eor	r12, r12, r8, ror #24
22088	ldm	r3!, {r8, r9, r10, r11}
22089	eor	r7, r7, lr, ror #8
22090	eor	r7, r7, r12, ror #24
22091	#   XOR in Key Schedule
22092	eor	r4, r4, r8
22093	eor	r5, r5, r9
22094	eor	r6, r6, r10
22095	eor	r7, r7, r11
22096	subs	r1, r1, #1
22097	bne	L_AES_CBC_decrypt_block_nr_128_odd
22098#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22099#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22100	lsl	r8, r7, #8
22101	lsr	r8, r8, #24
22102#else
22103	uxtb	r8, r7, ror #16
22104#endif
22105#else
22106	ubfx	r8, r7, #16, #8
22107#endif
22108	lsr	r11, r4, #24
22109#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22110#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22111	lsl	r12, r6, #16
22112	lsr	r12, r12, #24
22113#else
22114	uxtb	r12, r6, ror #8
22115#endif
22116#else
22117	ubfx	r12, r6, #8, #8
22118#endif
22119#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22120#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22121	lsl	lr, r5, #24
22122	lsr	lr, lr, #24
22123#else
22124	uxtb	lr, r5
22125#endif
22126#else
22127	ubfx	lr, r5, #0, #8
22128#endif
22129	ldr	r8, [r0, r8, lsl #2]
22130	ldr	r11, [r0, r11, lsl #2]
22131	ldr	r12, [r0, r12, lsl #2]
22132	ldr	lr, [r0, lr, lsl #2]
22133#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22134#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22135	lsl	r9, r4, #8
22136	lsr	r9, r9, #24
22137#else
22138	uxtb	r9, r4, ror #16
22139#endif
22140#else
22141	ubfx	r9, r4, #16, #8
22142#endif
22143	eor	r8, r8, r11, ror #24
22144	lsr	r11, r5, #24
22145	eor	r8, r8, r12, ror #8
22146#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22147#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22148	lsl	r12, r7, #16
22149	lsr	r12, r12, #24
22150#else
22151	uxtb	r12, r7, ror #8
22152#endif
22153#else
22154	ubfx	r12, r7, #8, #8
22155#endif
22156	eor	r8, r8, lr, ror #16
22157#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22158#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22159	lsl	lr, r6, #24
22160	lsr	lr, lr, #24
22161#else
22162	uxtb	lr, r6
22163#endif
22164#else
22165	ubfx	lr, r6, #0, #8
22166#endif
22167	ldr	r9, [r0, r9, lsl #2]
22168	ldr	r11, [r0, r11, lsl #2]
22169	ldr	r12, [r0, r12, lsl #2]
22170	ldr	lr, [r0, lr, lsl #2]
22171#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22172#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22173	lsl	r10, r5, #8
22174	lsr	r10, r10, #24
22175#else
22176	uxtb	r10, r5, ror #16
22177#endif
22178#else
22179	ubfx	r10, r5, #16, #8
22180#endif
22181	eor	r9, r9, r11, ror #24
22182	lsr	r11, r6, #24
22183	eor	r9, r9, r12, ror #8
22184#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22185#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22186	lsl	r12, r4, #16
22187	lsr	r12, r12, #24
22188#else
22189	uxtb	r12, r4, ror #8
22190#endif
22191#else
22192	ubfx	r12, r4, #8, #8
22193#endif
22194	eor	r9, r9, lr, ror #16
22195#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22196#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22197	lsl	lr, r7, #24
22198	lsr	lr, lr, #24
22199#else
22200	uxtb	lr, r7
22201#endif
22202#else
22203	ubfx	lr, r7, #0, #8
22204#endif
22205	ldr	r10, [r0, r10, lsl #2]
22206	ldr	r11, [r0, r11, lsl #2]
22207	ldr	r12, [r0, r12, lsl #2]
22208	ldr	lr, [r0, lr, lsl #2]
22209#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22210#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22211	lsl	r4, r4, #24
22212	lsr	r4, r4, #24
22213#else
22214	uxtb	r4, r4
22215#endif
22216#else
22217	ubfx	r4, r4, #0, #8
22218#endif
22219	eor	r10, r10, r11, ror #24
22220#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22221#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22222	lsl	r11, r6, #8
22223	lsr	r11, r11, #24
22224#else
22225	uxtb	r11, r6, ror #16
22226#endif
22227#else
22228	ubfx	r11, r6, #16, #8
22229#endif
22230	eor	r10, r10, r12, ror #8
22231	lsr	r12, r7, #24
22232	eor	r10, r10, lr, ror #16
22233#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22234#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22235	lsl	lr, r5, #16
22236	lsr	lr, lr, #24
22237#else
22238	uxtb	lr, r5, ror #8
22239#endif
22240#else
22241	ubfx	lr, r5, #8, #8
22242#endif
22243	ldr	r4, [r0, r4, lsl #2]
22244	ldr	r12, [r0, r12, lsl #2]
22245	ldr	r11, [r0, r11, lsl #2]
22246	ldr	lr, [r0, lr, lsl #2]
22247	eor	r12, r12, r4, ror #24
22248	ldm	r3!, {r4, r5, r6, r7}
22249	eor	r11, r11, lr, ror #8
22250	eor	r11, r11, r12, ror #24
22251	#   XOR in Key Schedule
22252	eor	r8, r8, r4
22253	eor	r9, r9, r5
22254	eor	r10, r10, r6
22255	eor	r11, r11, r7
22256#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22257#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22258	lsl	r4, r9, #24
22259	lsr	r4, r4, #24
22260#else
22261	uxtb	r4, r9
22262#endif
22263#else
22264	ubfx	r4, r9, #0, #8
22265#endif
22266#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22267#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22268	lsl	r7, r10, #16
22269	lsr	r7, r7, #24
22270#else
22271	uxtb	r7, r10, ror #8
22272#endif
22273#else
22274	ubfx	r7, r10, #8, #8
22275#endif
22276#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22277#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22278	lsl	r12, r11, #8
22279	lsr	r12, r12, #24
22280#else
22281	uxtb	r12, r11, ror #16
22282#endif
22283#else
22284	ubfx	r12, r11, #16, #8
22285#endif
22286	lsr	lr, r8, #24
22287	ldrb	r4, [r2, r4]
22288	ldrb	r7, [r2, r7]
22289	ldrb	r12, [r2, r12]
22290	ldrb	lr, [r2, lr]
22291#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22292#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22293	lsl	r5, r10, #24
22294	lsr	r5, r5, #24
22295#else
22296	uxtb	r5, r10
22297#endif
22298#else
22299	ubfx	r5, r10, #0, #8
22300#endif
22301	eor	r4, r4, r7, lsl #8
22302#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22303#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22304	lsl	r7, r11, #16
22305	lsr	r7, r7, #24
22306#else
22307	uxtb	r7, r11, ror #8
22308#endif
22309#else
22310	ubfx	r7, r11, #8, #8
22311#endif
22312	eor	r4, r4, r12, lsl #16
22313#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22314#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22315	lsl	r12, r8, #8
22316	lsr	r12, r12, #24
22317#else
22318	uxtb	r12, r8, ror #16
22319#endif
22320#else
22321	ubfx	r12, r8, #16, #8
22322#endif
22323	eor	r4, r4, lr, lsl #24
22324	lsr	lr, r9, #24
22325	ldrb	r7, [r2, r7]
22326	ldrb	lr, [r2, lr]
22327	ldrb	r5, [r2, r5]
22328	ldrb	r12, [r2, r12]
22329#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22330#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22331	lsl	r6, r11, #24
22332	lsr	r6, r6, #24
22333#else
22334	uxtb	r6, r11
22335#endif
22336#else
22337	ubfx	r6, r11, #0, #8
22338#endif
22339	eor	r5, r5, r7, lsl #8
22340#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22341#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22342	lsl	r7, r8, #16
22343	lsr	r7, r7, #24
22344#else
22345	uxtb	r7, r8, ror #8
22346#endif
22347#else
22348	ubfx	r7, r8, #8, #8
22349#endif
22350	eor	r5, r5, r12, lsl #16
22351#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22352#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22353	lsl	r12, r9, #8
22354	lsr	r12, r12, #24
22355#else
22356	uxtb	r12, r9, ror #16
22357#endif
22358#else
22359	ubfx	r12, r9, #16, #8
22360#endif
22361	eor	r5, r5, lr, lsl #24
22362	lsr	lr, r10, #24
22363	ldrb	r7, [r2, r7]
22364	ldrb	lr, [r2, lr]
22365	ldrb	r6, [r2, r6]
22366	ldrb	r12, [r2, r12]
22367	lsr	r11, r11, #24
22368	eor	r6, r6, r7, lsl #8
22369#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22370#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22371	lsl	r7, r8, #24
22372	lsr	r7, r7, #24
22373#else
22374	uxtb	r7, r8
22375#endif
22376#else
22377	ubfx	r7, r8, #0, #8
22378#endif
22379	eor	r6, r6, r12, lsl #16
22380#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22381#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22382	lsl	r12, r9, #16
22383	lsr	r12, r12, #24
22384#else
22385	uxtb	r12, r9, ror #8
22386#endif
22387#else
22388	ubfx	r12, r9, #8, #8
22389#endif
22390	eor	r6, r6, lr, lsl #24
22391#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22392#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22393	lsl	lr, r10, #8
22394	lsr	lr, lr, #24
22395#else
22396	uxtb	lr, r10, ror #16
22397#endif
22398#else
22399	ubfx	lr, r10, #16, #8
22400#endif
22401	ldrb	r11, [r2, r11]
22402	ldrb	r12, [r2, r12]
22403	ldrb	r7, [r2, r7]
22404	ldrb	lr, [r2, lr]
22405	eor	r12, r12, r11, lsl #16
22406	ldm	r3, {r8, r9, r10, r11}
22407	eor	r7, r7, r12, lsl #8
22408	eor	r7, r7, lr, lsl #16
22409	#   XOR in Key Schedule
22410	eor	r4, r4, r8
22411	eor	r5, r5, r9
22412	eor	r6, r6, r10
22413	eor	r7, r7, r11
22414#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
22415	ldr	lr, [sp, #16]
22416#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22417	eor	r8, r4, r4, ror #16
22418	eor	r9, r5, r5, ror #16
22419	eor	r10, r6, r6, ror #16
22420	eor	r11, r7, r7, ror #16
22421	bic	r8, r8, #0xff0000
22422	bic	r9, r9, #0xff0000
22423	bic	r10, r10, #0xff0000
22424	bic	r11, r11, #0xff0000
22425	ror	r4, r4, #8
22426	ror	r5, r5, #8
22427	ror	r6, r6, #8
22428	ror	r7, r7, #8
22429	eor	r4, r4, r8, lsr #8
22430	eor	r5, r5, r9, lsr #8
22431	eor	r6, r6, r10, lsr #8
22432	eor	r7, r7, r11, lsr #8
22433#else
22434	rev	r4, r4
22435	rev	r5, r5
22436	rev	r6, r6
22437	rev	r7, r7
22438#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
22439	ldm	lr, {r8, r9, r10, r11}
22440	pop	{r1, r12, lr}
22441	ldr	r3, [sp]
22442	eor	r4, r4, r8
22443	eor	r5, r5, r9
22444	eor	r6, r6, r10
22445	eor	r7, r7, r11
22446	str	r4, [r1]
22447	str	r5, [r1, #4]
22448	str	r6, [r1, #8]
22449	str	r7, [r1, #12]
22450	subs	r12, r12, #16
22451	add	lr, lr, #16
22452	add	r1, r1, #16
22453	beq	L_AES_CBC_decrypt_end_odd
22454	push	{r1, r12, lr}
22455	ldr	r4, [lr]
22456	ldr	r5, [lr, #4]
22457	ldr	r6, [lr, #8]
22458	ldr	r7, [lr, #12]
22459	ldr	lr, [sp, #16]
22460#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22461	stm	lr, {r4, r5}
22462#else
22463	strd	r4, r5, [lr]
22464#endif
22465#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22466	str	r6, [lr, #8]
22467	str	r7, [lr, #12]
22468#else
22469	strd	r6, r7, [lr, #8]
22470#endif
22471#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22472	eor	r8, r4, r4, ror #16
22473	eor	r9, r5, r5, ror #16
22474	eor	r10, r6, r6, ror #16
22475	eor	r11, r7, r7, ror #16
22476	bic	r8, r8, #0xff0000
22477	bic	r9, r9, #0xff0000
22478	bic	r10, r10, #0xff0000
22479	bic	r11, r11, #0xff0000
22480	ror	r4, r4, #8
22481	ror	r5, r5, #8
22482	ror	r6, r6, #8
22483	ror	r7, r7, #8
22484	eor	r4, r4, r8, lsr #8
22485	eor	r5, r5, r9, lsr #8
22486	eor	r6, r6, r10, lsr #8
22487	eor	r7, r7, r11, lsr #8
22488#else
22489	rev	r4, r4
22490	rev	r5, r5
22491	rev	r6, r6
22492	rev	r7, r7
22493#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
22494	ldm	r3!, {r8, r9, r10, r11}
22495	# Round: 0 - XOR in key schedule
22496	eor	r4, r4, r8
22497	eor	r5, r5, r9
22498	eor	r6, r6, r10
22499	eor	r7, r7, r11
22500	mov	r1, #4
22501#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
22502	bl	AES_decrypt_block
22503#else
22504L_AES_CBC_decrypt_block_nr_128_even:
22505#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22506#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22507	lsl	r8, r7, #8
22508	lsr	r8, r8, #24
22509#else
22510	uxtb	r8, r7, ror #16
22511#endif
22512#else
22513	ubfx	r8, r7, #16, #8
22514#endif
22515	lsr	r11, r4, #24
22516#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22517#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22518	lsl	r12, r6, #16
22519	lsr	r12, r12, #24
22520#else
22521	uxtb	r12, r6, ror #8
22522#endif
22523#else
22524	ubfx	r12, r6, #8, #8
22525#endif
22526#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22527#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22528	lsl	lr, r5, #24
22529	lsr	lr, lr, #24
22530#else
22531	uxtb	lr, r5
22532#endif
22533#else
22534	ubfx	lr, r5, #0, #8
22535#endif
22536	ldr	r8, [r0, r8, lsl #2]
22537	ldr	r11, [r0, r11, lsl #2]
22538	ldr	r12, [r0, r12, lsl #2]
22539	ldr	lr, [r0, lr, lsl #2]
22540#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22541#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22542	lsl	r9, r4, #8
22543	lsr	r9, r9, #24
22544#else
22545	uxtb	r9, r4, ror #16
22546#endif
22547#else
22548	ubfx	r9, r4, #16, #8
22549#endif
22550	eor	r8, r8, r11, ror #24
22551	lsr	r11, r5, #24
22552	eor	r8, r8, r12, ror #8
22553#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22554#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22555	lsl	r12, r7, #16
22556	lsr	r12, r12, #24
22557#else
22558	uxtb	r12, r7, ror #8
22559#endif
22560#else
22561	ubfx	r12, r7, #8, #8
22562#endif
22563	eor	r8, r8, lr, ror #16
22564#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22565#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22566	lsl	lr, r6, #24
22567	lsr	lr, lr, #24
22568#else
22569	uxtb	lr, r6
22570#endif
22571#else
22572	ubfx	lr, r6, #0, #8
22573#endif
22574	ldr	r9, [r0, r9, lsl #2]
22575	ldr	r11, [r0, r11, lsl #2]
22576	ldr	r12, [r0, r12, lsl #2]
22577	ldr	lr, [r0, lr, lsl #2]
22578#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22579#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22580	lsl	r10, r5, #8
22581	lsr	r10, r10, #24
22582#else
22583	uxtb	r10, r5, ror #16
22584#endif
22585#else
22586	ubfx	r10, r5, #16, #8
22587#endif
22588	eor	r9, r9, r11, ror #24
22589	lsr	r11, r6, #24
22590	eor	r9, r9, r12, ror #8
22591#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22592#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22593	lsl	r12, r4, #16
22594	lsr	r12, r12, #24
22595#else
22596	uxtb	r12, r4, ror #8
22597#endif
22598#else
22599	ubfx	r12, r4, #8, #8
22600#endif
22601	eor	r9, r9, lr, ror #16
22602#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22603#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22604	lsl	lr, r7, #24
22605	lsr	lr, lr, #24
22606#else
22607	uxtb	lr, r7
22608#endif
22609#else
22610	ubfx	lr, r7, #0, #8
22611#endif
22612	ldr	r10, [r0, r10, lsl #2]
22613	ldr	r11, [r0, r11, lsl #2]
22614	ldr	r12, [r0, r12, lsl #2]
22615	ldr	lr, [r0, lr, lsl #2]
22616#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22617#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22618	lsl	r4, r4, #24
22619	lsr	r4, r4, #24
22620#else
22621	uxtb	r4, r4
22622#endif
22623#else
22624	ubfx	r4, r4, #0, #8
22625#endif
22626	eor	r10, r10, r11, ror #24
22627#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22628#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22629	lsl	r11, r6, #8
22630	lsr	r11, r11, #24
22631#else
22632	uxtb	r11, r6, ror #16
22633#endif
22634#else
22635	ubfx	r11, r6, #16, #8
22636#endif
22637	eor	r10, r10, r12, ror #8
22638	lsr	r12, r7, #24
22639	eor	r10, r10, lr, ror #16
22640#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22641#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22642	lsl	lr, r5, #16
22643	lsr	lr, lr, #24
22644#else
22645	uxtb	lr, r5, ror #8
22646#endif
22647#else
22648	ubfx	lr, r5, #8, #8
22649#endif
22650	ldr	r4, [r0, r4, lsl #2]
22651	ldr	r12, [r0, r12, lsl #2]
22652	ldr	r11, [r0, r11, lsl #2]
22653	ldr	lr, [r0, lr, lsl #2]
22654	eor	r12, r12, r4, ror #24
22655	ldm	r3!, {r4, r5, r6, r7}
22656	eor	r11, r11, lr, ror #8
22657	eor	r11, r11, r12, ror #24
22658	#   XOR in Key Schedule
22659	eor	r8, r8, r4
22660	eor	r9, r9, r5
22661	eor	r10, r10, r6
22662	eor	r11, r11, r7
22663#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22664#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22665	lsl	r4, r11, #8
22666	lsr	r4, r4, #24
22667#else
22668	uxtb	r4, r11, ror #16
22669#endif
22670#else
22671	ubfx	r4, r11, #16, #8
22672#endif
22673	lsr	r7, r8, #24
22674#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22675#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22676	lsl	r12, r10, #16
22677	lsr	r12, r12, #24
22678#else
22679	uxtb	r12, r10, ror #8
22680#endif
22681#else
22682	ubfx	r12, r10, #8, #8
22683#endif
22684#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22685#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22686	lsl	lr, r9, #24
22687	lsr	lr, lr, #24
22688#else
22689	uxtb	lr, r9
22690#endif
22691#else
22692	ubfx	lr, r9, #0, #8
22693#endif
22694	ldr	r4, [r0, r4, lsl #2]
22695	ldr	r7, [r0, r7, lsl #2]
22696	ldr	r12, [r0, r12, lsl #2]
22697	ldr	lr, [r0, lr, lsl #2]
22698#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22699#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22700	lsl	r5, r8, #8
22701	lsr	r5, r5, #24
22702#else
22703	uxtb	r5, r8, ror #16
22704#endif
22705#else
22706	ubfx	r5, r8, #16, #8
22707#endif
22708	eor	r4, r4, r7, ror #24
22709	lsr	r7, r9, #24
22710	eor	r4, r4, r12, ror #8
22711#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22713	lsl	r12, r11, #16
22714	lsr	r12, r12, #24
22715#else
22716	uxtb	r12, r11, ror #8
22717#endif
22718#else
22719	ubfx	r12, r11, #8, #8
22720#endif
22721	eor	r4, r4, lr, ror #16
22722#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22723#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22724	lsl	lr, r10, #24
22725	lsr	lr, lr, #24
22726#else
22727	uxtb	lr, r10
22728#endif
22729#else
22730	ubfx	lr, r10, #0, #8
22731#endif
22732	ldr	r5, [r0, r5, lsl #2]
22733	ldr	r7, [r0, r7, lsl #2]
22734	ldr	r12, [r0, r12, lsl #2]
22735	ldr	lr, [r0, lr, lsl #2]
22736#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22737#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22738	lsl	r6, r9, #8
22739	lsr	r6, r6, #24
22740#else
22741	uxtb	r6, r9, ror #16
22742#endif
22743#else
22744	ubfx	r6, r9, #16, #8
22745#endif
22746	eor	r5, r5, r7, ror #24
22747	lsr	r7, r10, #24
22748	eor	r5, r5, r12, ror #8
22749#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22750#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22751	lsl	r12, r8, #16
22752	lsr	r12, r12, #24
22753#else
22754	uxtb	r12, r8, ror #8
22755#endif
22756#else
22757	ubfx	r12, r8, #8, #8
22758#endif
22759	eor	r5, r5, lr, ror #16
22760#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22761#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22762	lsl	lr, r11, #24
22763	lsr	lr, lr, #24
22764#else
22765	uxtb	lr, r11
22766#endif
22767#else
22768	ubfx	lr, r11, #0, #8
22769#endif
22770	ldr	r6, [r0, r6, lsl #2]
22771	ldr	r7, [r0, r7, lsl #2]
22772	ldr	r12, [r0, r12, lsl #2]
22773	ldr	lr, [r0, lr, lsl #2]
22774#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22775#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22776	lsl	r8, r8, #24
22777	lsr	r8, r8, #24
22778#else
22779	uxtb	r8, r8
22780#endif
22781#else
22782	ubfx	r8, r8, #0, #8
22783#endif
22784	eor	r6, r6, r7, ror #24
22785#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22786#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22787	lsl	r7, r10, #8
22788	lsr	r7, r7, #24
22789#else
22790	uxtb	r7, r10, ror #16
22791#endif
22792#else
22793	ubfx	r7, r10, #16, #8
22794#endif
22795	eor	r6, r6, r12, ror #8
22796	lsr	r12, r11, #24
22797	eor	r6, r6, lr, ror #16
22798#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22799#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22800	lsl	lr, r9, #16
22801	lsr	lr, lr, #24
22802#else
22803	uxtb	lr, r9, ror #8
22804#endif
22805#else
22806	ubfx	lr, r9, #8, #8
22807#endif
22808	ldr	r8, [r0, r8, lsl #2]
22809	ldr	r12, [r0, r12, lsl #2]
22810	ldr	r7, [r0, r7, lsl #2]
22811	ldr	lr, [r0, lr, lsl #2]
22812	eor	r12, r12, r8, ror #24
22813	ldm	r3!, {r8, r9, r10, r11}
22814	eor	r7, r7, lr, ror #8
22815	eor	r7, r7, r12, ror #24
22816	#   XOR in Key Schedule
22817	eor	r4, r4, r8
22818	eor	r5, r5, r9
22819	eor	r6, r6, r10
22820	eor	r7, r7, r11
22821	subs	r1, r1, #1
22822	bne	L_AES_CBC_decrypt_block_nr_128_even
22823#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22824#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22825	lsl	r8, r7, #8
22826	lsr	r8, r8, #24
22827#else
22828	uxtb	r8, r7, ror #16
22829#endif
22830#else
22831	ubfx	r8, r7, #16, #8
22832#endif
22833	lsr	r11, r4, #24
22834#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22835#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22836	lsl	r12, r6, #16
22837	lsr	r12, r12, #24
22838#else
22839	uxtb	r12, r6, ror #8
22840#endif
22841#else
22842	ubfx	r12, r6, #8, #8
22843#endif
22844#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22845#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22846	lsl	lr, r5, #24
22847	lsr	lr, lr, #24
22848#else
22849	uxtb	lr, r5
22850#endif
22851#else
22852	ubfx	lr, r5, #0, #8
22853#endif
22854	ldr	r8, [r0, r8, lsl #2]
22855	ldr	r11, [r0, r11, lsl #2]
22856	ldr	r12, [r0, r12, lsl #2]
22857	ldr	lr, [r0, lr, lsl #2]
22858#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22859#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22860	lsl	r9, r4, #8
22861	lsr	r9, r9, #24
22862#else
22863	uxtb	r9, r4, ror #16
22864#endif
22865#else
22866	ubfx	r9, r4, #16, #8
22867#endif
22868	eor	r8, r8, r11, ror #24
22869	lsr	r11, r5, #24
22870	eor	r8, r8, r12, ror #8
22871#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22872#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22873	lsl	r12, r7, #16
22874	lsr	r12, r12, #24
22875#else
22876	uxtb	r12, r7, ror #8
22877#endif
22878#else
22879	ubfx	r12, r7, #8, #8
22880#endif
22881	eor	r8, r8, lr, ror #16
22882#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22883#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22884	lsl	lr, r6, #24
22885	lsr	lr, lr, #24
22886#else
22887	uxtb	lr, r6
22888#endif
22889#else
22890	ubfx	lr, r6, #0, #8
22891#endif
22892	ldr	r9, [r0, r9, lsl #2]
22893	ldr	r11, [r0, r11, lsl #2]
22894	ldr	r12, [r0, r12, lsl #2]
22895	ldr	lr, [r0, lr, lsl #2]
22896#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22897#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22898	lsl	r10, r5, #8
22899	lsr	r10, r10, #24
22900#else
22901	uxtb	r10, r5, ror #16
22902#endif
22903#else
22904	ubfx	r10, r5, #16, #8
22905#endif
22906	eor	r9, r9, r11, ror #24
22907	lsr	r11, r6, #24
22908	eor	r9, r9, r12, ror #8
22909#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22910#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22911	lsl	r12, r4, #16
22912	lsr	r12, r12, #24
22913#else
22914	uxtb	r12, r4, ror #8
22915#endif
22916#else
22917	ubfx	r12, r4, #8, #8
22918#endif
22919	eor	r9, r9, lr, ror #16
22920#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22921#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22922	lsl	lr, r7, #24
22923	lsr	lr, lr, #24
22924#else
22925	uxtb	lr, r7
22926#endif
22927#else
22928	ubfx	lr, r7, #0, #8
22929#endif
22930	ldr	r10, [r0, r10, lsl #2]
22931	ldr	r11, [r0, r11, lsl #2]
22932	ldr	r12, [r0, r12, lsl #2]
22933	ldr	lr, [r0, lr, lsl #2]
22934#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22935#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22936	lsl	r4, r4, #24
22937	lsr	r4, r4, #24
22938#else
22939	uxtb	r4, r4
22940#endif
22941#else
22942	ubfx	r4, r4, #0, #8
22943#endif
22944	eor	r10, r10, r11, ror #24
22945#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22946#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22947	lsl	r11, r6, #8
22948	lsr	r11, r11, #24
22949#else
22950	uxtb	r11, r6, ror #16
22951#endif
22952#else
22953	ubfx	r11, r6, #16, #8
22954#endif
22955	eor	r10, r10, r12, ror #8
22956	lsr	r12, r7, #24
22957	eor	r10, r10, lr, ror #16
22958#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22959#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22960	lsl	lr, r5, #16
22961	lsr	lr, lr, #24
22962#else
22963	uxtb	lr, r5, ror #8
22964#endif
22965#else
22966	ubfx	lr, r5, #8, #8
22967#endif
22968	ldr	r4, [r0, r4, lsl #2]
22969	ldr	r12, [r0, r12, lsl #2]
22970	ldr	r11, [r0, r11, lsl #2]
22971	ldr	lr, [r0, lr, lsl #2]
22972	eor	r12, r12, r4, ror #24
22973	ldm	r3!, {r4, r5, r6, r7}
22974	eor	r11, r11, lr, ror #8
22975	eor	r11, r11, r12, ror #24
22976	#   XOR in Key Schedule
22977	eor	r8, r8, r4
22978	eor	r9, r9, r5
22979	eor	r10, r10, r6
22980	eor	r11, r11, r7
22981#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22982#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22983	lsl	r4, r9, #24
22984	lsr	r4, r4, #24
22985#else
22986	uxtb	r4, r9
22987#endif
22988#else
22989	ubfx	r4, r9, #0, #8
22990#endif
22991#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22993	lsl	r7, r10, #16
22994	lsr	r7, r7, #24
22995#else
22996	uxtb	r7, r10, ror #8
22997#endif
22998#else
22999	ubfx	r7, r10, #8, #8
23000#endif
23001#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23002#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23003	lsl	r12, r11, #8
23004	lsr	r12, r12, #24
23005#else
23006	uxtb	r12, r11, ror #16
23007#endif
23008#else
23009	ubfx	r12, r11, #16, #8
23010#endif
23011	lsr	lr, r8, #24
23012	ldrb	r4, [r2, r4]
23013	ldrb	r7, [r2, r7]
23014	ldrb	r12, [r2, r12]
23015	ldrb	lr, [r2, lr]
23016#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23017#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23018	lsl	r5, r10, #24
23019	lsr	r5, r5, #24
23020#else
23021	uxtb	r5, r10
23022#endif
23023#else
23024	ubfx	r5, r10, #0, #8
23025#endif
23026	eor	r4, r4, r7, lsl #8
23027#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23028#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23029	lsl	r7, r11, #16
23030	lsr	r7, r7, #24
23031#else
23032	uxtb	r7, r11, ror #8
23033#endif
23034#else
23035	ubfx	r7, r11, #8, #8
23036#endif
23037	eor	r4, r4, r12, lsl #16
23038#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23039#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23040	lsl	r12, r8, #8
23041	lsr	r12, r12, #24
23042#else
23043	uxtb	r12, r8, ror #16
23044#endif
23045#else
23046	ubfx	r12, r8, #16, #8
23047#endif
23048	eor	r4, r4, lr, lsl #24
23049	lsr	lr, r9, #24
23050	ldrb	r7, [r2, r7]
23051	ldrb	lr, [r2, lr]
23052	ldrb	r5, [r2, r5]
23053	ldrb	r12, [r2, r12]
23054#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23055#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23056	lsl	r6, r11, #24
23057	lsr	r6, r6, #24
23058#else
23059	uxtb	r6, r11
23060#endif
23061#else
23062	ubfx	r6, r11, #0, #8
23063#endif
23064	eor	r5, r5, r7, lsl #8
23065#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23066#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23067	lsl	r7, r8, #16
23068	lsr	r7, r7, #24
23069#else
23070	uxtb	r7, r8, ror #8
23071#endif
23072#else
23073	ubfx	r7, r8, #8, #8
23074#endif
23075	eor	r5, r5, r12, lsl #16
23076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23077#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23078	lsl	r12, r9, #8
23079	lsr	r12, r12, #24
23080#else
23081	uxtb	r12, r9, ror #16
23082#endif
23083#else
23084	ubfx	r12, r9, #16, #8
23085#endif
23086	eor	r5, r5, lr, lsl #24
23087	lsr	lr, r10, #24
23088	ldrb	r7, [r2, r7]
23089	ldrb	lr, [r2, lr]
23090	ldrb	r6, [r2, r6]
23091	ldrb	r12, [r2, r12]
23092	lsr	r11, r11, #24
23093	eor	r6, r6, r7, lsl #8
23094#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23095#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23096	lsl	r7, r8, #24
23097	lsr	r7, r7, #24
23098#else
23099	uxtb	r7, r8
23100#endif
23101#else
23102	ubfx	r7, r8, #0, #8
23103#endif
23104	eor	r6, r6, r12, lsl #16
23105#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23107	lsl	r12, r9, #16
23108	lsr	r12, r12, #24
23109#else
23110	uxtb	r12, r9, ror #8
23111#endif
23112#else
23113	ubfx	r12, r9, #8, #8
23114#endif
23115	eor	r6, r6, lr, lsl #24
23116#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23117#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23118	lsl	lr, r10, #8
23119	lsr	lr, lr, #24
23120#else
23121	uxtb	lr, r10, ror #16
23122#endif
23123#else
23124	ubfx	lr, r10, #16, #8
23125#endif
23126	ldrb	r11, [r2, r11]
23127	ldrb	r12, [r2, r12]
23128	ldrb	r7, [r2, r7]
23129	ldrb	lr, [r2, lr]
23130	eor	r12, r12, r11, lsl #16
23131	ldm	r3, {r8, r9, r10, r11}
23132	eor	r7, r7, r12, lsl #8
23133	eor	r7, r7, lr, lsl #16
23134	#   XOR in Key Schedule
23135	eor	r4, r4, r8
23136	eor	r5, r5, r9
23137	eor	r6, r6, r10
23138	eor	r7, r7, r11
23139#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
23140	ldr	lr, [sp, #16]
23141#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23142	eor	r8, r4, r4, ror #16
23143	eor	r9, r5, r5, ror #16
23144	eor	r10, r6, r6, ror #16
23145	eor	r11, r7, r7, ror #16
23146	bic	r8, r8, #0xff0000
23147	bic	r9, r9, #0xff0000
23148	bic	r10, r10, #0xff0000
23149	bic	r11, r11, #0xff0000
23150	ror	r4, r4, #8
23151	ror	r5, r5, #8
23152	ror	r6, r6, #8
23153	ror	r7, r7, #8
23154	eor	r4, r4, r8, lsr #8
23155	eor	r5, r5, r9, lsr #8
23156	eor	r6, r6, r10, lsr #8
23157	eor	r7, r7, r11, lsr #8
23158#else
23159	rev	r4, r4
23160	rev	r5, r5
23161	rev	r6, r6
23162	rev	r7, r7
23163#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
23164#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23165	ldr	r8, [lr, #16]
23166	ldr	r9, [lr, #20]
23167#else
23168	ldrd	r8, r9, [lr, #16]
23169#endif
23170#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23171	ldr	r10, [lr, #24]
23172	ldr	r11, [lr, #28]
23173#else
23174	ldrd	r10, r11, [lr, #24]
23175#endif
23176	pop	{r1, r12, lr}
23177	ldr	r3, [sp]
23178	eor	r4, r4, r8
23179	eor	r5, r5, r9
23180	eor	r6, r6, r10
23181	eor	r7, r7, r11
23182	str	r4, [r1]
23183	str	r5, [r1, #4]
23184	str	r6, [r1, #8]
23185	str	r7, [r1, #12]
23186	subs	r12, r12, #16
23187	add	lr, lr, #16
23188	add	r1, r1, #16
23189	bne	L_AES_CBC_decrypt_loop_block_128
23190	b	L_AES_CBC_decrypt_end
23191L_AES_CBC_decrypt_end_odd:
23192	ldr	r4, [sp, #4]
23193#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23194	ldr	r8, [r4, #16]
23195	ldr	r9, [r4, #20]
23196#else
23197	ldrd	r8, r9, [r4, #16]
23198#endif
23199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23200	ldr	r10, [r4, #24]
23201	ldr	r11, [r4, #28]
23202#else
23203	ldrd	r10, r11, [r4, #24]
23204#endif
23205#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23206	stm	r4, {r8, r9}
23207#else
23208	strd	r8, r9, [r4]
23209#endif
23210#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23211	str	r10, [r4, #8]
23212	str	r11, [r4, #12]
23213#else
23214	strd	r10, r11, [r4, #8]
23215#endif
23216L_AES_CBC_decrypt_end:
23217	pop	{r3-r4}
23218	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
23219	.size	AES_CBC_decrypt,.-AES_CBC_decrypt
23220#endif /* HAVE_AES_CBC */
23221#endif /* WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER || HAVE_AES_CBC
23222        * HAVE_AES_ECB */
23223#endif /* HAVE_AES_DECRYPT */
23224#ifdef HAVE_AESGCM
23225#ifndef __APPLE__
23226	.text
23227	.type	L_GCM_gmult_len_r, %object
23228	.size	L_GCM_gmult_len_r, 64
23229#else
23230	.section	__DATA,__data
23231#endif /* __APPLE__ */
23232	# 8-byte aligned, 64-bit aligned
23233#ifndef __APPLE__
23234	.align	3
23235#else
23236	.p2align	3
23237#endif /* __APPLE__ */
23238L_GCM_gmult_len_r:
23239	.long	0x00000000,0x1c200000,0x38400000,0x24600000
23240	.long	0x70800000,0x6ca00000,0x48c00000,0x54e00000
23241	.long	0xe1000000,0xfd200000,0xd9400000,0xc5600000
23242	.long	0x91800000,0x8da00000,0xa9c00000,0xb5e00000
23243	.text
23244	.align	4
23245	.globl	GCM_gmult_len
23246	.type	GCM_gmult_len, %function
23247GCM_gmult_len:
23248	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
23249	adr	lr, L_GCM_gmult_len_r
23250L_GCM_gmult_len_start_block:
23251	push	{r3}
23252	ldr	r12, [r0, #12]
23253	ldr	r3, [r2, #12]
23254	eor	r12, r12, r3
23255	lsr	r3, r12, #24
23256	and	r3, r3, #15
23257	add	r3, r1, r3, lsl #4
23258	ldm	r3, {r8, r9, r10, r11}
23259	lsr	r6, r10, #4
23260	and	r3, r11, #15
23261	lsr	r11, r11, #4
23262	lsr	r4, r12, #28
23263	eor	r11, r11, r10, lsl #28
23264	ldr	r3, [lr, r3, lsl #2]
23265	add	r4, r1, r4, lsl #4
23266	eor	r10, r6, r9, lsl #28
23267	lsr	r9, r9, #4
23268	ldm	r4, {r4, r5, r6, r7}
23269	eor	r9, r9, r8, lsl #28
23270	eor	r8, r3, r8, lsr #4
23271	eor	r8, r8, r4
23272	eor	r9, r9, r5
23273	eor	r10, r10, r6
23274	eor	r11, r11, r7
23275	lsr	r6, r10, #4
23276	and	r3, r11, #15
23277	lsr	r11, r11, #4
23278	lsr	r4, r12, #16
23279	eor	r11, r11, r10, lsl #28
23280	and	r4, r4, #15
23281	ldr	r3, [lr, r3, lsl #2]
23282	add	r4, r1, r4, lsl #4
23283	eor	r10, r6, r9, lsl #28
23284	lsr	r9, r9, #4
23285	ldm	r4, {r4, r5, r6, r7}
23286	eor	r9, r9, r8, lsl #28
23287	eor	r8, r3, r8, lsr #4
23288	eor	r8, r8, r4
23289	eor	r9, r9, r5
23290	eor	r10, r10, r6
23291	eor	r11, r11, r7
23292	lsr	r6, r10, #4
23293	and	r3, r11, #15
23294	lsr	r11, r11, #4
23295	lsr	r4, r12, #20
23296	eor	r11, r11, r10, lsl #28
23297	and	r4, r4, #15
23298	ldr	r3, [lr, r3, lsl #2]
23299	add	r4, r1, r4, lsl #4
23300	eor	r10, r6, r9, lsl #28
23301	lsr	r9, r9, #4
23302	ldm	r4, {r4, r5, r6, r7}
23303	eor	r9, r9, r8, lsl #28
23304	eor	r8, r3, r8, lsr #4
23305	eor	r8, r8, r4
23306	eor	r9, r9, r5
23307	eor	r10, r10, r6
23308	eor	r11, r11, r7
23309	lsr	r6, r10, #4
23310	and	r3, r11, #15
23311	lsr	r11, r11, #4
23312	lsr	r4, r12, #8
23313	eor	r11, r11, r10, lsl #28
23314	and	r4, r4, #15
23315	ldr	r3, [lr, r3, lsl #2]
23316	add	r4, r1, r4, lsl #4
23317	eor	r10, r6, r9, lsl #28
23318	lsr	r9, r9, #4
23319	ldm	r4, {r4, r5, r6, r7}
23320	eor	r9, r9, r8, lsl #28
23321	eor	r8, r3, r8, lsr #4
23322	eor	r8, r8, r4
23323	eor	r9, r9, r5
23324	eor	r10, r10, r6
23325	eor	r11, r11, r7
23326	lsr	r6, r10, #4
23327	and	r3, r11, #15
23328	lsr	r11, r11, #4
23329	lsr	r4, r12, #12
23330	eor	r11, r11, r10, lsl #28
23331	and	r4, r4, #15
23332	ldr	r3, [lr, r3, lsl #2]
23333	add	r4, r1, r4, lsl #4
23334	eor	r10, r6, r9, lsl #28
23335	lsr	r9, r9, #4
23336	ldm	r4, {r4, r5, r6, r7}
23337	eor	r9, r9, r8, lsl #28
23338	eor	r8, r3, r8, lsr #4
23339	eor	r8, r8, r4
23340	eor	r9, r9, r5
23341	eor	r10, r10, r6
23342	eor	r11, r11, r7
23343	lsr	r6, r10, #4
23344	and	r3, r11, #15
23345	lsr	r11, r11, #4
23346	and	r4, r12, #15
23347	eor	r11, r11, r10, lsl #28
23348	ldr	r3, [lr, r3, lsl #2]
23349	add	r4, r1, r4, lsl #4
23350	eor	r10, r6, r9, lsl #28
23351	lsr	r9, r9, #4
23352	ldm	r4, {r4, r5, r6, r7}
23353	eor	r9, r9, r8, lsl #28
23354	eor	r8, r3, r8, lsr #4
23355	eor	r8, r8, r4
23356	eor	r9, r9, r5
23357	eor	r10, r10, r6
23358	eor	r11, r11, r7
23359	lsr	r6, r10, #4
23360	and	r3, r11, #15
23361	lsr	r11, r11, #4
23362	lsr	r4, r12, #4
23363	eor	r11, r11, r10, lsl #28
23364	and	r4, r4, #15
23365	ldr	r3, [lr, r3, lsl #2]
23366	add	r4, r1, r4, lsl #4
23367	eor	r10, r6, r9, lsl #28
23368	lsr	r9, r9, #4
23369	ldm	r4, {r4, r5, r6, r7}
23370	eor	r9, r9, r8, lsl #28
23371	eor	r8, r3, r8, lsr #4
23372	eor	r8, r8, r4
23373	eor	r9, r9, r5
23374	eor	r10, r10, r6
23375	eor	r11, r11, r7
23376	lsr	r6, r10, #4
23377	and	r3, r11, #15
23378	lsr	r11, r11, #4
23379	eor	r11, r11, r10, lsl #28
23380	ldr	r3, [lr, r3, lsl #2]
23381	eor	r10, r6, r9, lsl #28
23382	lsr	r9, r9, #4
23383	eor	r9, r9, r8, lsl #28
23384	eor	r8, r3, r8, lsr #4
23385	ldr	r12, [r0, #8]
23386	ldr	r3, [r2, #8]
23387	eor	r12, r12, r3
23388	lsr	r3, r12, #24
23389	and	r3, r3, #15
23390	add	r3, r1, r3, lsl #4
23391	ldm	r3, {r4, r5, r6, r7}
23392	eor	r8, r8, r4
23393	eor	r9, r9, r5
23394	eor	r10, r10, r6
23395	eor	r11, r11, r7
23396	lsr	r6, r10, #4
23397	and	r3, r11, #15
23398	lsr	r11, r11, #4
23399	lsr	r4, r12, #28
23400	eor	r11, r11, r10, lsl #28
23401	ldr	r3, [lr, r3, lsl #2]
23402	add	r4, r1, r4, lsl #4
23403	eor	r10, r6, r9, lsl #28
23404	lsr	r9, r9, #4
23405	ldm	r4, {r4, r5, r6, r7}
23406	eor	r9, r9, r8, lsl #28
23407	eor	r8, r3, r8, lsr #4
23408	eor	r8, r8, r4
23409	eor	r9, r9, r5
23410	eor	r10, r10, r6
23411	eor	r11, r11, r7
23412	lsr	r6, r10, #4
23413	and	r3, r11, #15
23414	lsr	r11, r11, #4
23415	lsr	r4, r12, #16
23416	eor	r11, r11, r10, lsl #28
23417	and	r4, r4, #15
23418	ldr	r3, [lr, r3, lsl #2]
23419	add	r4, r1, r4, lsl #4
23420	eor	r10, r6, r9, lsl #28
23421	lsr	r9, r9, #4
23422	ldm	r4, {r4, r5, r6, r7}
23423	eor	r9, r9, r8, lsl #28
23424	eor	r8, r3, r8, lsr #4
23425	eor	r8, r8, r4
23426	eor	r9, r9, r5
23427	eor	r10, r10, r6
23428	eor	r11, r11, r7
23429	lsr	r6, r10, #4
23430	and	r3, r11, #15
23431	lsr	r11, r11, #4
23432	lsr	r4, r12, #20
23433	eor	r11, r11, r10, lsl #28
23434	and	r4, r4, #15
23435	ldr	r3, [lr, r3, lsl #2]
23436	add	r4, r1, r4, lsl #4
23437	eor	r10, r6, r9, lsl #28
23438	lsr	r9, r9, #4
23439	ldm	r4, {r4, r5, r6, r7}
23440	eor	r9, r9, r8, lsl #28
23441	eor	r8, r3, r8, lsr #4
23442	eor	r8, r8, r4
23443	eor	r9, r9, r5
23444	eor	r10, r10, r6
23445	eor	r11, r11, r7
23446	lsr	r6, r10, #4
23447	and	r3, r11, #15
23448	lsr	r11, r11, #4
23449	lsr	r4, r12, #8
23450	eor	r11, r11, r10, lsl #28
23451	and	r4, r4, #15
23452	ldr	r3, [lr, r3, lsl #2]
23453	add	r4, r1, r4, lsl #4
23454	eor	r10, r6, r9, lsl #28
23455	lsr	r9, r9, #4
23456	ldm	r4, {r4, r5, r6, r7}
23457	eor	r9, r9, r8, lsl #28
23458	eor	r8, r3, r8, lsr #4
23459	eor	r8, r8, r4
23460	eor	r9, r9, r5
23461	eor	r10, r10, r6
23462	eor	r11, r11, r7
23463	lsr	r6, r10, #4
23464	and	r3, r11, #15
23465	lsr	r11, r11, #4
23466	lsr	r4, r12, #12
23467	eor	r11, r11, r10, lsl #28
23468	and	r4, r4, #15
23469	ldr	r3, [lr, r3, lsl #2]
23470	add	r4, r1, r4, lsl #4
23471	eor	r10, r6, r9, lsl #28
23472	lsr	r9, r9, #4
23473	ldm	r4, {r4, r5, r6, r7}
23474	eor	r9, r9, r8, lsl #28
23475	eor	r8, r3, r8, lsr #4
23476	eor	r8, r8, r4
23477	eor	r9, r9, r5
23478	eor	r10, r10, r6
23479	eor	r11, r11, r7
23480	lsr	r6, r10, #4
23481	and	r3, r11, #15
23482	lsr	r11, r11, #4
23483	and	r4, r12, #15
23484	eor	r11, r11, r10, lsl #28
23485	ldr	r3, [lr, r3, lsl #2]
23486	add	r4, r1, r4, lsl #4
23487	eor	r10, r6, r9, lsl #28
23488	lsr	r9, r9, #4
23489	ldm	r4, {r4, r5, r6, r7}
23490	eor	r9, r9, r8, lsl #28
23491	eor	r8, r3, r8, lsr #4
23492	eor	r8, r8, r4
23493	eor	r9, r9, r5
23494	eor	r10, r10, r6
23495	eor	r11, r11, r7
23496	lsr	r6, r10, #4
23497	and	r3, r11, #15
23498	lsr	r11, r11, #4
23499	lsr	r4, r12, #4
23500	eor	r11, r11, r10, lsl #28
23501	and	r4, r4, #15
23502	ldr	r3, [lr, r3, lsl #2]
23503	add	r4, r1, r4, lsl #4
23504	eor	r10, r6, r9, lsl #28
23505	lsr	r9, r9, #4
23506	ldm	r4, {r4, r5, r6, r7}
23507	eor	r9, r9, r8, lsl #28
23508	eor	r8, r3, r8, lsr #4
23509	eor	r8, r8, r4
23510	eor	r9, r9, r5
23511	eor	r10, r10, r6
23512	eor	r11, r11, r7
23513	lsr	r6, r10, #4
23514	and	r3, r11, #15
23515	lsr	r11, r11, #4
23516	eor	r11, r11, r10, lsl #28
23517	ldr	r3, [lr, r3, lsl #2]
23518	eor	r10, r6, r9, lsl #28
23519	lsr	r9, r9, #4
23520	eor	r9, r9, r8, lsl #28
23521	eor	r8, r3, r8, lsr #4
23522	ldr	r12, [r0, #4]
23523	ldr	r3, [r2, #4]
23524	eor	r12, r12, r3
23525	lsr	r3, r12, #24
23526	and	r3, r3, #15
23527	add	r3, r1, r3, lsl #4
23528	ldm	r3, {r4, r5, r6, r7}
23529	eor	r8, r8, r4
23530	eor	r9, r9, r5
23531	eor	r10, r10, r6
23532	eor	r11, r11, r7
23533	lsr	r6, r10, #4
23534	and	r3, r11, #15
23535	lsr	r11, r11, #4
23536	lsr	r4, r12, #28
23537	eor	r11, r11, r10, lsl #28
23538	ldr	r3, [lr, r3, lsl #2]
23539	add	r4, r1, r4, lsl #4
23540	eor	r10, r6, r9, lsl #28
23541	lsr	r9, r9, #4
23542	ldm	r4, {r4, r5, r6, r7}
23543	eor	r9, r9, r8, lsl #28
23544	eor	r8, r3, r8, lsr #4
23545	eor	r8, r8, r4
23546	eor	r9, r9, r5
23547	eor	r10, r10, r6
23548	eor	r11, r11, r7
23549	lsr	r6, r10, #4
23550	and	r3, r11, #15
23551	lsr	r11, r11, #4
23552	lsr	r4, r12, #16
23553	eor	r11, r11, r10, lsl #28
23554	and	r4, r4, #15
23555	ldr	r3, [lr, r3, lsl #2]
23556	add	r4, r1, r4, lsl #4
23557	eor	r10, r6, r9, lsl #28
23558	lsr	r9, r9, #4
23559	ldm	r4, {r4, r5, r6, r7}
23560	eor	r9, r9, r8, lsl #28
23561	eor	r8, r3, r8, lsr #4
23562	eor	r8, r8, r4
23563	eor	r9, r9, r5
23564	eor	r10, r10, r6
23565	eor	r11, r11, r7
23566	lsr	r6, r10, #4
23567	and	r3, r11, #15
23568	lsr	r11, r11, #4
23569	lsr	r4, r12, #20
23570	eor	r11, r11, r10, lsl #28
23571	and	r4, r4, #15
23572	ldr	r3, [lr, r3, lsl #2]
23573	add	r4, r1, r4, lsl #4
23574	eor	r10, r6, r9, lsl #28
23575	lsr	r9, r9, #4
23576	ldm	r4, {r4, r5, r6, r7}
23577	eor	r9, r9, r8, lsl #28
23578	eor	r8, r3, r8, lsr #4
23579	eor	r8, r8, r4
23580	eor	r9, r9, r5
23581	eor	r10, r10, r6
23582	eor	r11, r11, r7
23583	lsr	r6, r10, #4
23584	and	r3, r11, #15
23585	lsr	r11, r11, #4
23586	lsr	r4, r12, #8
23587	eor	r11, r11, r10, lsl #28
23588	and	r4, r4, #15
23589	ldr	r3, [lr, r3, lsl #2]
23590	add	r4, r1, r4, lsl #4
23591	eor	r10, r6, r9, lsl #28
23592	lsr	r9, r9, #4
23593	ldm	r4, {r4, r5, r6, r7}
23594	eor	r9, r9, r8, lsl #28
23595	eor	r8, r3, r8, lsr #4
23596	eor	r8, r8, r4
23597	eor	r9, r9, r5
23598	eor	r10, r10, r6
23599	eor	r11, r11, r7
23600	lsr	r6, r10, #4
23601	and	r3, r11, #15
23602	lsr	r11, r11, #4
23603	lsr	r4, r12, #12
23604	eor	r11, r11, r10, lsl #28
23605	and	r4, r4, #15
23606	ldr	r3, [lr, r3, lsl #2]
23607	add	r4, r1, r4, lsl #4
23608	eor	r10, r6, r9, lsl #28
23609	lsr	r9, r9, #4
23610	ldm	r4, {r4, r5, r6, r7}
23611	eor	r9, r9, r8, lsl #28
23612	eor	r8, r3, r8, lsr #4
23613	eor	r8, r8, r4
23614	eor	r9, r9, r5
23615	eor	r10, r10, r6
23616	eor	r11, r11, r7
23617	lsr	r6, r10, #4
23618	and	r3, r11, #15
23619	lsr	r11, r11, #4
23620	and	r4, r12, #15
23621	eor	r11, r11, r10, lsl #28
23622	ldr	r3, [lr, r3, lsl #2]
23623	add	r4, r1, r4, lsl #4
23624	eor	r10, r6, r9, lsl #28
23625	lsr	r9, r9, #4
23626	ldm	r4, {r4, r5, r6, r7}
23627	eor	r9, r9, r8, lsl #28
23628	eor	r8, r3, r8, lsr #4
23629	eor	r8, r8, r4
23630	eor	r9, r9, r5
23631	eor	r10, r10, r6
23632	eor	r11, r11, r7
23633	lsr	r6, r10, #4
23634	and	r3, r11, #15
23635	lsr	r11, r11, #4
23636	lsr	r4, r12, #4
23637	eor	r11, r11, r10, lsl #28
23638	and	r4, r4, #15
23639	ldr	r3, [lr, r3, lsl #2]
23640	add	r4, r1, r4, lsl #4
23641	eor	r10, r6, r9, lsl #28
23642	lsr	r9, r9, #4
23643	ldm	r4, {r4, r5, r6, r7}
23644	eor	r9, r9, r8, lsl #28
23645	eor	r8, r3, r8, lsr #4
23646	eor	r8, r8, r4
23647	eor	r9, r9, r5
23648	eor	r10, r10, r6
23649	eor	r11, r11, r7
23650	lsr	r6, r10, #4
23651	and	r3, r11, #15
23652	lsr	r11, r11, #4
23653	eor	r11, r11, r10, lsl #28
23654	ldr	r3, [lr, r3, lsl #2]
23655	eor	r10, r6, r9, lsl #28
23656	lsr	r9, r9, #4
23657	eor	r9, r9, r8, lsl #28
23658	eor	r8, r3, r8, lsr #4
23659	ldr	r12, [r0]
23660	ldr	r3, [r2]
23661	eor	r12, r12, r3
23662	lsr	r3, r12, #24
23663	and	r3, r3, #15
23664	add	r3, r1, r3, lsl #4
23665	ldm	r3, {r4, r5, r6, r7}
23666	eor	r8, r8, r4
23667	eor	r9, r9, r5
23668	eor	r10, r10, r6
23669	eor	r11, r11, r7
23670	lsr	r6, r10, #4
23671	and	r3, r11, #15
23672	lsr	r11, r11, #4
23673	lsr	r4, r12, #28
23674	eor	r11, r11, r10, lsl #28
23675	ldr	r3, [lr, r3, lsl #2]
23676	add	r4, r1, r4, lsl #4
23677	eor	r10, r6, r9, lsl #28
23678	lsr	r9, r9, #4
23679	ldm	r4, {r4, r5, r6, r7}
23680	eor	r9, r9, r8, lsl #28
23681	eor	r8, r3, r8, lsr #4
23682	eor	r8, r8, r4
23683	eor	r9, r9, r5
23684	eor	r10, r10, r6
23685	eor	r11, r11, r7
23686	lsr	r6, r10, #4
23687	and	r3, r11, #15
23688	lsr	r11, r11, #4
23689	lsr	r4, r12, #16
23690	eor	r11, r11, r10, lsl #28
23691	and	r4, r4, #15
23692	ldr	r3, [lr, r3, lsl #2]
23693	add	r4, r1, r4, lsl #4
23694	eor	r10, r6, r9, lsl #28
23695	lsr	r9, r9, #4
23696	ldm	r4, {r4, r5, r6, r7}
23697	eor	r9, r9, r8, lsl #28
23698	eor	r8, r3, r8, lsr #4
23699	eor	r8, r8, r4
23700	eor	r9, r9, r5
23701	eor	r10, r10, r6
23702	eor	r11, r11, r7
23703	lsr	r6, r10, #4
23704	and	r3, r11, #15
23705	lsr	r11, r11, #4
23706	lsr	r4, r12, #20
23707	eor	r11, r11, r10, lsl #28
23708	and	r4, r4, #15
23709	ldr	r3, [lr, r3, lsl #2]
23710	add	r4, r1, r4, lsl #4
23711	eor	r10, r6, r9, lsl #28
23712	lsr	r9, r9, #4
23713	ldm	r4, {r4, r5, r6, r7}
23714	eor	r9, r9, r8, lsl #28
23715	eor	r8, r3, r8, lsr #4
23716	eor	r8, r8, r4
23717	eor	r9, r9, r5
23718	eor	r10, r10, r6
23719	eor	r11, r11, r7
23720	lsr	r6, r10, #4
23721	and	r3, r11, #15
23722	lsr	r11, r11, #4
23723	lsr	r4, r12, #8
23724	eor	r11, r11, r10, lsl #28
23725	and	r4, r4, #15
23726	ldr	r3, [lr, r3, lsl #2]
23727	add	r4, r1, r4, lsl #4
23728	eor	r10, r6, r9, lsl #28
23729	lsr	r9, r9, #4
23730	ldm	r4, {r4, r5, r6, r7}
23731	eor	r9, r9, r8, lsl #28
23732	eor	r8, r3, r8, lsr #4
23733	eor	r8, r8, r4
23734	eor	r9, r9, r5
23735	eor	r10, r10, r6
23736	eor	r11, r11, r7
23737	lsr	r6, r10, #4
23738	and	r3, r11, #15
23739	lsr	r11, r11, #4
23740	lsr	r4, r12, #12
23741	eor	r11, r11, r10, lsl #28
23742	and	r4, r4, #15
23743	ldr	r3, [lr, r3, lsl #2]
23744	add	r4, r1, r4, lsl #4
23745	eor	r10, r6, r9, lsl #28
23746	lsr	r9, r9, #4
23747	ldm	r4, {r4, r5, r6, r7}
23748	eor	r9, r9, r8, lsl #28
23749	eor	r8, r3, r8, lsr #4
23750	eor	r8, r8, r4
23751	eor	r9, r9, r5
23752	eor	r10, r10, r6
23753	eor	r11, r11, r7
23754	lsr	r6, r10, #4
23755	and	r3, r11, #15
23756	lsr	r11, r11, #4
23757	and	r4, r12, #15
23758	eor	r11, r11, r10, lsl #28
23759	ldr	r3, [lr, r3, lsl #2]
23760	add	r4, r1, r4, lsl #4
23761	eor	r10, r6, r9, lsl #28
23762	lsr	r9, r9, #4
23763	ldm	r4, {r4, r5, r6, r7}
23764	eor	r9, r9, r8, lsl #28
23765	eor	r8, r3, r8, lsr #4
23766	eor	r8, r8, r4
23767	eor	r9, r9, r5
23768	eor	r10, r10, r6
23769	eor	r11, r11, r7
23770	lsr	r6, r10, #4
23771	and	r3, r11, #15
23772	lsr	r11, r11, #4
23773	lsr	r4, r12, #4
23774	eor	r11, r11, r10, lsl #28
23775	and	r4, r4, #15
23776	ldr	r3, [lr, r3, lsl #2]
23777	add	r4, r1, r4, lsl #4
23778	eor	r10, r6, r9, lsl #28
23779	lsr	r9, r9, #4
23780	ldm	r4, {r4, r5, r6, r7}
23781	eor	r9, r9, r8, lsl #28
23782	eor	r8, r3, r8, lsr #4
23783	eor	r8, r8, r4
23784	eor	r9, r9, r5
23785	eor	r10, r10, r6
23786	eor	r11, r11, r7
23787#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23788	# REV r8, r8
23789	eor	r3, r8, r8, ror #16
23790	bic	r3, r3, #0xff0000
23791	ror	r8, r8, #8
23792	eor	r8, r8, r3, lsr #8
23793	# REV r9, r9
23794	eor	r3, r9, r9, ror #16
23795	bic	r3, r3, #0xff0000
23796	ror	r9, r9, #8
23797	eor	r9, r9, r3, lsr #8
23798	# REV r10, r10
23799	eor	r3, r10, r10, ror #16
23800	bic	r3, r3, #0xff0000
23801	ror	r10, r10, #8
23802	eor	r10, r10, r3, lsr #8
23803	# REV r11, r11
23804	eor	r3, r11, r11, ror #16
23805	bic	r3, r3, #0xff0000
23806	ror	r11, r11, #8
23807	eor	r11, r11, r3, lsr #8
23808#else
23809	rev	r8, r8
23810	rev	r9, r9
23811	rev	r10, r10
23812	rev	r11, r11
23813#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
23814	stm	r0, {r8, r9, r10, r11}
23815	pop	{r3}
23816	subs	r3, r3, #16
23817	add	r2, r2, #16
23818	bne	L_GCM_gmult_len_start_block
23819	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
23820	.size	GCM_gmult_len,.-GCM_gmult_len
23821#ifndef __APPLE__
23822	.text
23823	.type	L_AES_ARM32_te_gcm, %object
23824	.size	L_AES_ARM32_te_gcm, 12
23825#else
23826	.section	__DATA,__data
23827#endif /* __APPLE__ */
23828	# 8-byte aligned, 64-bit aligned
23829#ifndef __APPLE__
23830	.align	3
23831#else
23832	.p2align	3
23833#endif /* __APPLE__ */
23834L_AES_ARM32_te_gcm:
23835	.long	L_AES_ARM32_te_data
23836	.text
23837	.align	4
23838	.globl	AES_GCM_encrypt
23839	.type	AES_GCM_encrypt, %function
23840AES_GCM_encrypt:
23841	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
23842	ldr	r12, [sp, #36]
23843	ldr	r8, [sp, #40]
23844	mov	lr, r0
23845	adr	r0, L_AES_ARM32_te_gcm
23846	ldr	r0, [r0]
23847	ldm	r8, {r4, r5, r6, r7}
23848#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23849	eor	r10, r4, r4, ror #16
23850	eor	r11, r5, r5, ror #16
23851	bic	r10, r10, #0xff0000
23852	bic	r11, r11, #0xff0000
23853	ror	r4, r4, #8
23854	ror	r5, r5, #8
23855	eor	r4, r4, r10, lsr #8
23856	eor	r5, r5, r11, lsr #8
23857	eor	r10, r6, r6, ror #16
23858	eor	r11, r7, r7, ror #16
23859	bic	r10, r10, #0xff0000
23860	bic	r11, r11, #0xff0000
23861	ror	r6, r6, #8
23862	ror	r7, r7, #8
23863	eor	r6, r6, r10, lsr #8
23864	eor	r7, r7, r11, lsr #8
23865#else
23866	rev	r4, r4
23867	rev	r5, r5
23868	rev	r6, r6
23869	rev	r7, r7
23870#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
23871	stm	r8, {r4, r5, r6, r7}
23872	push	{r3, r8}
23873	cmp	r12, #10
23874	beq	L_AES_GCM_encrypt_start_block_128
23875	cmp	r12, #12
23876	beq	L_AES_GCM_encrypt_start_block_192
23877L_AES_GCM_encrypt_loop_block_256:
23878	push	{r1, r2, lr}
23879	ldr	lr, [sp, #16]
23880	add	r7, r7, #1
23881	ldm	r3!, {r8, r9, r10, r11}
23882	str	r7, [lr, #12]
23883	# Round: 0 - XOR in key schedule
23884	eor	r4, r4, r8
23885	eor	r5, r5, r9
23886	eor	r6, r6, r10
23887	eor	r7, r7, r11
23888	mov	r1, #6
23889#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
23890	bl	AES_encrypt_block
23891#else
23892L_AES_GCM_encrypt_block_nr_256:
23893#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23894#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23895	lsl	r8, r5, #8
23896	lsr	r8, r8, #24
23897#else
23898	uxtb	r8, r5, ror #16
23899#endif
23900#else
23901	ubfx	r8, r5, #16, #8
23902#endif
23903	lsr	r11, r4, #24
23904#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23906	lsl	lr, r6, #16
23907	lsr	lr, lr, #24
23908#else
23909	uxtb	lr, r6, ror #8
23910#endif
23911#else
23912	ubfx	lr, r6, #8, #8
23913#endif
23914#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23915#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23916	lsl	r2, r7, #24
23917	lsr	r2, r2, #24
23918#else
23919	uxtb	r2, r7
23920#endif
23921#else
23922	ubfx	r2, r7, #0, #8
23923#endif
23924	ldr	r8, [r0, r8, lsl #2]
23925	ldr	r11, [r0, r11, lsl #2]
23926	ldr	lr, [r0, lr, lsl #2]
23927	ldr	r2, [r0, r2, lsl #2]
23928#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23930	lsl	r9, r6, #8
23931	lsr	r9, r9, #24
23932#else
23933	uxtb	r9, r6, ror #16
23934#endif
23935#else
23936	ubfx	r9, r6, #16, #8
23937#endif
23938	eor	r8, r8, r11, ror #24
23939	lsr	r11, r5, #24
23940	eor	r8, r8, lr, ror #8
23941#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23942#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23943	lsl	lr, r7, #16
23944	lsr	lr, lr, #24
23945#else
23946	uxtb	lr, r7, ror #8
23947#endif
23948#else
23949	ubfx	lr, r7, #8, #8
23950#endif
23951	eor	r8, r8, r2, ror #16
23952#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23953#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23954	lsl	r2, r4, #24
23955	lsr	r2, r2, #24
23956#else
23957	uxtb	r2, r4
23958#endif
23959#else
23960	ubfx	r2, r4, #0, #8
23961#endif
23962	ldr	r9, [r0, r9, lsl #2]
23963	ldr	r11, [r0, r11, lsl #2]
23964	ldr	lr, [r0, lr, lsl #2]
23965	ldr	r2, [r0, r2, lsl #2]
23966#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23967#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23968	lsl	r10, r7, #8
23969	lsr	r10, r10, #24
23970#else
23971	uxtb	r10, r7, ror #16
23972#endif
23973#else
23974	ubfx	r10, r7, #16, #8
23975#endif
23976	eor	r9, r9, r11, ror #24
23977	lsr	r11, r6, #24
23978	eor	r9, r9, lr, ror #8
23979#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23980#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23981	lsl	lr, r4, #16
23982	lsr	lr, lr, #24
23983#else
23984	uxtb	lr, r4, ror #8
23985#endif
23986#else
23987	ubfx	lr, r4, #8, #8
23988#endif
23989	eor	r9, r9, r2, ror #16
23990#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23991#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23992	lsl	r2, r5, #24
23993	lsr	r2, r2, #24
23994#else
23995	uxtb	r2, r5
23996#endif
23997#else
23998	ubfx	r2, r5, #0, #8
23999#endif
24000	ldr	r10, [r0, r10, lsl #2]
24001	ldr	r11, [r0, r11, lsl #2]
24002	ldr	lr, [r0, lr, lsl #2]
24003	ldr	r2, [r0, r2, lsl #2]
24004#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24005#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24006	lsl	r6, r6, #24
24007	lsr	r6, r6, #24
24008#else
24009	uxtb	r6, r6
24010#endif
24011#else
24012	ubfx	r6, r6, #0, #8
24013#endif
24014	eor	r10, r10, r11, ror #24
24015#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24016#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24017	lsl	r11, r4, #8
24018	lsr	r11, r11, #24
24019#else
24020	uxtb	r11, r4, ror #16
24021#endif
24022#else
24023	ubfx	r11, r4, #16, #8
24024#endif
24025	eor	r10, r10, lr, ror #8
24026	lsr	lr, r7, #24
24027	eor	r10, r10, r2, ror #16
24028#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24029#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24030	lsl	r2, r5, #16
24031	lsr	r2, r2, #24
24032#else
24033	uxtb	r2, r5, ror #8
24034#endif
24035#else
24036	ubfx	r2, r5, #8, #8
24037#endif
24038	ldr	r6, [r0, r6, lsl #2]
24039	ldr	lr, [r0, lr, lsl #2]
24040	ldr	r11, [r0, r11, lsl #2]
24041	ldr	r2, [r0, r2, lsl #2]
24042	eor	lr, lr, r6, ror #24
24043	ldm	r3!, {r4, r5, r6, r7}
24044	eor	r11, r11, lr, ror #24
24045	eor	r11, r11, r2, ror #8
24046	#   XOR in Key Schedule
24047	eor	r8, r8, r4
24048	eor	r9, r9, r5
24049	eor	r10, r10, r6
24050	eor	r11, r11, r7
24051#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24052#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24053	lsl	r4, r9, #8
24054	lsr	r4, r4, #24
24055#else
24056	uxtb	r4, r9, ror #16
24057#endif
24058#else
24059	ubfx	r4, r9, #16, #8
24060#endif
24061	lsr	r7, r8, #24
24062#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24063#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24064	lsl	lr, r10, #16
24065	lsr	lr, lr, #24
24066#else
24067	uxtb	lr, r10, ror #8
24068#endif
24069#else
24070	ubfx	lr, r10, #8, #8
24071#endif
24072#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24073#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24074	lsl	r2, r11, #24
24075	lsr	r2, r2, #24
24076#else
24077	uxtb	r2, r11
24078#endif
24079#else
24080	ubfx	r2, r11, #0, #8
24081#endif
24082	ldr	r4, [r0, r4, lsl #2]
24083	ldr	r7, [r0, r7, lsl #2]
24084	ldr	lr, [r0, lr, lsl #2]
24085	ldr	r2, [r0, r2, lsl #2]
24086#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24087#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24088	lsl	r5, r10, #8
24089	lsr	r5, r5, #24
24090#else
24091	uxtb	r5, r10, ror #16
24092#endif
24093#else
24094	ubfx	r5, r10, #16, #8
24095#endif
24096	eor	r4, r4, r7, ror #24
24097	lsr	r7, r9, #24
24098	eor	r4, r4, lr, ror #8
24099#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24100#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24101	lsl	lr, r11, #16
24102	lsr	lr, lr, #24
24103#else
24104	uxtb	lr, r11, ror #8
24105#endif
24106#else
24107	ubfx	lr, r11, #8, #8
24108#endif
24109	eor	r4, r4, r2, ror #16
24110#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24111#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24112	lsl	r2, r8, #24
24113	lsr	r2, r2, #24
24114#else
24115	uxtb	r2, r8
24116#endif
24117#else
24118	ubfx	r2, r8, #0, #8
24119#endif
24120	ldr	r5, [r0, r5, lsl #2]
24121	ldr	r7, [r0, r7, lsl #2]
24122	ldr	lr, [r0, lr, lsl #2]
24123	ldr	r2, [r0, r2, lsl #2]
24124#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24125#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24126	lsl	r6, r11, #8
24127	lsr	r6, r6, #24
24128#else
24129	uxtb	r6, r11, ror #16
24130#endif
24131#else
24132	ubfx	r6, r11, #16, #8
24133#endif
24134	eor	r5, r5, r7, ror #24
24135	lsr	r7, r10, #24
24136	eor	r5, r5, lr, ror #8
24137#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24138#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24139	lsl	lr, r8, #16
24140	lsr	lr, lr, #24
24141#else
24142	uxtb	lr, r8, ror #8
24143#endif
24144#else
24145	ubfx	lr, r8, #8, #8
24146#endif
24147	eor	r5, r5, r2, ror #16
24148#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24149#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24150	lsl	r2, r9, #24
24151	lsr	r2, r2, #24
24152#else
24153	uxtb	r2, r9
24154#endif
24155#else
24156	ubfx	r2, r9, #0, #8
24157#endif
24158	ldr	r6, [r0, r6, lsl #2]
24159	ldr	r7, [r0, r7, lsl #2]
24160	ldr	lr, [r0, lr, lsl #2]
24161	ldr	r2, [r0, r2, lsl #2]
24162#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24164	lsl	r10, r10, #24
24165	lsr	r10, r10, #24
24166#else
24167	uxtb	r10, r10
24168#endif
24169#else
24170	ubfx	r10, r10, #0, #8
24171#endif
24172	eor	r6, r6, r7, ror #24
24173#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24174#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24175	lsl	r7, r8, #8
24176	lsr	r7, r7, #24
24177#else
24178	uxtb	r7, r8, ror #16
24179#endif
24180#else
24181	ubfx	r7, r8, #16, #8
24182#endif
24183	eor	r6, r6, lr, ror #8
24184	lsr	lr, r11, #24
24185	eor	r6, r6, r2, ror #16
24186#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24188	lsl	r2, r9, #16
24189	lsr	r2, r2, #24
24190#else
24191	uxtb	r2, r9, ror #8
24192#endif
24193#else
24194	ubfx	r2, r9, #8, #8
24195#endif
24196	ldr	r10, [r0, r10, lsl #2]
24197	ldr	lr, [r0, lr, lsl #2]
24198	ldr	r7, [r0, r7, lsl #2]
24199	ldr	r2, [r0, r2, lsl #2]
24200	eor	lr, lr, r10, ror #24
24201	ldm	r3!, {r8, r9, r10, r11}
24202	eor	r7, r7, lr, ror #24
24203	eor	r7, r7, r2, ror #8
24204	#   XOR in Key Schedule
24205	eor	r4, r4, r8
24206	eor	r5, r5, r9
24207	eor	r6, r6, r10
24208	eor	r7, r7, r11
24209	subs	r1, r1, #1
24210	bne	L_AES_GCM_encrypt_block_nr_256
24211#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24213	lsl	r8, r5, #8
24214	lsr	r8, r8, #24
24215#else
24216	uxtb	r8, r5, ror #16
24217#endif
24218#else
24219	ubfx	r8, r5, #16, #8
24220#endif
24221	lsr	r11, r4, #24
24222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24223#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24224	lsl	lr, r6, #16
24225	lsr	lr, lr, #24
24226#else
24227	uxtb	lr, r6, ror #8
24228#endif
24229#else
24230	ubfx	lr, r6, #8, #8
24231#endif
24232#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24233#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24234	lsl	r2, r7, #24
24235	lsr	r2, r2, #24
24236#else
24237	uxtb	r2, r7
24238#endif
24239#else
24240	ubfx	r2, r7, #0, #8
24241#endif
24242	ldr	r8, [r0, r8, lsl #2]
24243	ldr	r11, [r0, r11, lsl #2]
24244	ldr	lr, [r0, lr, lsl #2]
24245	ldr	r2, [r0, r2, lsl #2]
24246#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24247#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24248	lsl	r9, r6, #8
24249	lsr	r9, r9, #24
24250#else
24251	uxtb	r9, r6, ror #16
24252#endif
24253#else
24254	ubfx	r9, r6, #16, #8
24255#endif
24256	eor	r8, r8, r11, ror #24
24257	lsr	r11, r5, #24
24258	eor	r8, r8, lr, ror #8
24259#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24260#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24261	lsl	lr, r7, #16
24262	lsr	lr, lr, #24
24263#else
24264	uxtb	lr, r7, ror #8
24265#endif
24266#else
24267	ubfx	lr, r7, #8, #8
24268#endif
24269	eor	r8, r8, r2, ror #16
24270#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24271#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24272	lsl	r2, r4, #24
24273	lsr	r2, r2, #24
24274#else
24275	uxtb	r2, r4
24276#endif
24277#else
24278	ubfx	r2, r4, #0, #8
24279#endif
24280	ldr	r9, [r0, r9, lsl #2]
24281	ldr	r11, [r0, r11, lsl #2]
24282	ldr	lr, [r0, lr, lsl #2]
24283	ldr	r2, [r0, r2, lsl #2]
24284#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24285#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24286	lsl	r10, r7, #8
24287	lsr	r10, r10, #24
24288#else
24289	uxtb	r10, r7, ror #16
24290#endif
24291#else
24292	ubfx	r10, r7, #16, #8
24293#endif
24294	eor	r9, r9, r11, ror #24
24295	lsr	r11, r6, #24
24296	eor	r9, r9, lr, ror #8
24297#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24298#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24299	lsl	lr, r4, #16
24300	lsr	lr, lr, #24
24301#else
24302	uxtb	lr, r4, ror #8
24303#endif
24304#else
24305	ubfx	lr, r4, #8, #8
24306#endif
24307	eor	r9, r9, r2, ror #16
24308#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24309#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24310	lsl	r2, r5, #24
24311	lsr	r2, r2, #24
24312#else
24313	uxtb	r2, r5
24314#endif
24315#else
24316	ubfx	r2, r5, #0, #8
24317#endif
24318	ldr	r10, [r0, r10, lsl #2]
24319	ldr	r11, [r0, r11, lsl #2]
24320	ldr	lr, [r0, lr, lsl #2]
24321	ldr	r2, [r0, r2, lsl #2]
24322#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24323#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24324	lsl	r6, r6, #24
24325	lsr	r6, r6, #24
24326#else
24327	uxtb	r6, r6
24328#endif
24329#else
24330	ubfx	r6, r6, #0, #8
24331#endif
24332	eor	r10, r10, r11, ror #24
24333#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24334#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24335	lsl	r11, r4, #8
24336	lsr	r11, r11, #24
24337#else
24338	uxtb	r11, r4, ror #16
24339#endif
24340#else
24341	ubfx	r11, r4, #16, #8
24342#endif
24343	eor	r10, r10, lr, ror #8
24344	lsr	lr, r7, #24
24345	eor	r10, r10, r2, ror #16
24346#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24347#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24348	lsl	r2, r5, #16
24349	lsr	r2, r2, #24
24350#else
24351	uxtb	r2, r5, ror #8
24352#endif
24353#else
24354	ubfx	r2, r5, #8, #8
24355#endif
24356	ldr	r6, [r0, r6, lsl #2]
24357	ldr	lr, [r0, lr, lsl #2]
24358	ldr	r11, [r0, r11, lsl #2]
24359	ldr	r2, [r0, r2, lsl #2]
24360	eor	lr, lr, r6, ror #24
24361	ldm	r3!, {r4, r5, r6, r7}
24362	eor	r11, r11, lr, ror #24
24363	eor	r11, r11, r2, ror #8
24364	#   XOR in Key Schedule
24365	eor	r8, r8, r4
24366	eor	r9, r9, r5
24367	eor	r10, r10, r6
24368	eor	r11, r11, r7
24369#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24370#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24371	lsl	r4, r11, #24
24372	lsr	r4, r4, #24
24373#else
24374	uxtb	r4, r11
24375#endif
24376#else
24377	ubfx	r4, r11, #0, #8
24378#endif
24379#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24380#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24381	lsl	r7, r10, #16
24382	lsr	r7, r7, #24
24383#else
24384	uxtb	r7, r10, ror #8
24385#endif
24386#else
24387	ubfx	r7, r10, #8, #8
24388#endif
24389#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24390#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24391	lsl	lr, r9, #8
24392	lsr	lr, lr, #24
24393#else
24394	uxtb	lr, r9, ror #16
24395#endif
24396#else
24397	ubfx	lr, r9, #16, #8
24398#endif
24399	lsr	r2, r8, #24
24400	ldrb	r4, [r0, r4, lsl #2]
24401	ldrb	r7, [r0, r7, lsl #2]
24402	ldrb	lr, [r0, lr, lsl #2]
24403	ldrb	r2, [r0, r2, lsl #2]
24404#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24405#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24406	lsl	r5, r8, #24
24407	lsr	r5, r5, #24
24408#else
24409	uxtb	r5, r8
24410#endif
24411#else
24412	ubfx	r5, r8, #0, #8
24413#endif
24414	eor	r4, r4, r7, lsl #8
24415#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24416#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24417	lsl	r7, r11, #16
24418	lsr	r7, r7, #24
24419#else
24420	uxtb	r7, r11, ror #8
24421#endif
24422#else
24423	ubfx	r7, r11, #8, #8
24424#endif
24425	eor	r4, r4, lr, lsl #16
24426#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24427#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24428	lsl	lr, r10, #8
24429	lsr	lr, lr, #24
24430#else
24431	uxtb	lr, r10, ror #16
24432#endif
24433#else
24434	ubfx	lr, r10, #16, #8
24435#endif
24436	eor	r4, r4, r2, lsl #24
24437	lsr	r2, r9, #24
24438	ldrb	r5, [r0, r5, lsl #2]
24439	ldrb	r7, [r0, r7, lsl #2]
24440	ldrb	lr, [r0, lr, lsl #2]
24441	ldrb	r2, [r0, r2, lsl #2]
24442#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24443#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24444	lsl	r6, r9, #24
24445	lsr	r6, r6, #24
24446#else
24447	uxtb	r6, r9
24448#endif
24449#else
24450	ubfx	r6, r9, #0, #8
24451#endif
24452	eor	r5, r5, r7, lsl #8
24453#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24454#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24455	lsl	r7, r8, #16
24456	lsr	r7, r7, #24
24457#else
24458	uxtb	r7, r8, ror #8
24459#endif
24460#else
24461	ubfx	r7, r8, #8, #8
24462#endif
24463	eor	r5, r5, lr, lsl #16
24464#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24465#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24466	lsl	lr, r11, #8
24467	lsr	lr, lr, #24
24468#else
24469	uxtb	lr, r11, ror #16
24470#endif
24471#else
24472	ubfx	lr, r11, #16, #8
24473#endif
24474	eor	r5, r5, r2, lsl #24
24475	lsr	r2, r10, #24
24476	ldrb	r6, [r0, r6, lsl #2]
24477	ldrb	r7, [r0, r7, lsl #2]
24478	ldrb	lr, [r0, lr, lsl #2]
24479	ldrb	r2, [r0, r2, lsl #2]
24480	lsr	r11, r11, #24
24481	eor	r6, r6, r7, lsl #8
24482#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24483#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24484	lsl	r7, r10, #24
24485	lsr	r7, r7, #24
24486#else
24487	uxtb	r7, r10
24488#endif
24489#else
24490	ubfx	r7, r10, #0, #8
24491#endif
24492	eor	r6, r6, lr, lsl #16
24493#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24494#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24495	lsl	lr, r9, #16
24496	lsr	lr, lr, #24
24497#else
24498	uxtb	lr, r9, ror #8
24499#endif
24500#else
24501	ubfx	lr, r9, #8, #8
24502#endif
24503	eor	r6, r6, r2, lsl #24
24504#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24505#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24506	lsl	r2, r8, #8
24507	lsr	r2, r2, #24
24508#else
24509	uxtb	r2, r8, ror #16
24510#endif
24511#else
24512	ubfx	r2, r8, #16, #8
24513#endif
24514	ldrb	r11, [r0, r11, lsl #2]
24515	ldrb	r7, [r0, r7, lsl #2]
24516	ldrb	lr, [r0, lr, lsl #2]
24517	ldrb	r2, [r0, r2, lsl #2]
24518	eor	lr, lr, r11, lsl #16
24519	ldm	r3, {r8, r9, r10, r11}
24520	eor	r7, r7, lr, lsl #8
24521	eor	r7, r7, r2, lsl #16
24522	#   XOR in Key Schedule
24523	eor	r4, r4, r8
24524	eor	r5, r5, r9
24525	eor	r6, r6, r10
24526	eor	r7, r7, r11
24527#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
24528	pop	{r1, r2, lr}
24529	ldr	r3, [sp]
24530#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24531	eor	r8, r4, r4, ror #16
24532	eor	r9, r5, r5, ror #16
24533	eor	r10, r6, r6, ror #16
24534	eor	r11, r7, r7, ror #16
24535	bic	r8, r8, #0xff0000
24536	bic	r9, r9, #0xff0000
24537	bic	r10, r10, #0xff0000
24538	bic	r11, r11, #0xff0000
24539	ror	r4, r4, #8
24540	ror	r5, r5, #8
24541	ror	r6, r6, #8
24542	ror	r7, r7, #8
24543	eor	r4, r4, r8, lsr #8
24544	eor	r5, r5, r9, lsr #8
24545	eor	r6, r6, r10, lsr #8
24546	eor	r7, r7, r11, lsr #8
24547#else
24548	rev	r4, r4
24549	rev	r5, r5
24550	rev	r6, r6
24551	rev	r7, r7
24552#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
24553	ldr	r8, [lr]
24554	ldr	r9, [lr, #4]
24555	ldr	r10, [lr, #8]
24556	ldr	r11, [lr, #12]
24557	eor	r4, r4, r8
24558	eor	r5, r5, r9
24559	eor	r6, r6, r10
24560	eor	r7, r7, r11
24561	ldr	r8, [sp, #4]
24562	str	r4, [r1]
24563	str	r5, [r1, #4]
24564	str	r6, [r1, #8]
24565	str	r7, [r1, #12]
24566	ldm	r8, {r4, r5, r6, r7}
24567	subs	r2, r2, #16
24568	add	lr, lr, #16
24569	add	r1, r1, #16
24570	bne	L_AES_GCM_encrypt_loop_block_256
24571	b	L_AES_GCM_encrypt_end
24572L_AES_GCM_encrypt_start_block_192:
24573L_AES_GCM_encrypt_loop_block_192:
24574	push	{r1, r2, lr}
24575	ldr	lr, [sp, #16]
24576	add	r7, r7, #1
24577	ldm	r3!, {r8, r9, r10, r11}
24578	str	r7, [lr, #12]
24579	# Round: 0 - XOR in key schedule
24580	eor	r4, r4, r8
24581	eor	r5, r5, r9
24582	eor	r6, r6, r10
24583	eor	r7, r7, r11
24584	mov	r1, #5
24585#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
24586	bl	AES_encrypt_block
24587#else
24588L_AES_GCM_encrypt_block_nr_192:
24589#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24590#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24591	lsl	r8, r5, #8
24592	lsr	r8, r8, #24
24593#else
24594	uxtb	r8, r5, ror #16
24595#endif
24596#else
24597	ubfx	r8, r5, #16, #8
24598#endif
24599	lsr	r11, r4, #24
24600#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24601#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24602	lsl	lr, r6, #16
24603	lsr	lr, lr, #24
24604#else
24605	uxtb	lr, r6, ror #8
24606#endif
24607#else
24608	ubfx	lr, r6, #8, #8
24609#endif
24610#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24611#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24612	lsl	r2, r7, #24
24613	lsr	r2, r2, #24
24614#else
24615	uxtb	r2, r7
24616#endif
24617#else
24618	ubfx	r2, r7, #0, #8
24619#endif
24620	ldr	r8, [r0, r8, lsl #2]
24621	ldr	r11, [r0, r11, lsl #2]
24622	ldr	lr, [r0, lr, lsl #2]
24623	ldr	r2, [r0, r2, lsl #2]
24624#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24625#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24626	lsl	r9, r6, #8
24627	lsr	r9, r9, #24
24628#else
24629	uxtb	r9, r6, ror #16
24630#endif
24631#else
24632	ubfx	r9, r6, #16, #8
24633#endif
24634	eor	r8, r8, r11, ror #24
24635	lsr	r11, r5, #24
24636	eor	r8, r8, lr, ror #8
24637#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24638#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24639	lsl	lr, r7, #16
24640	lsr	lr, lr, #24
24641#else
24642	uxtb	lr, r7, ror #8
24643#endif
24644#else
24645	ubfx	lr, r7, #8, #8
24646#endif
24647	eor	r8, r8, r2, ror #16
24648#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24649#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24650	lsl	r2, r4, #24
24651	lsr	r2, r2, #24
24652#else
24653	uxtb	r2, r4
24654#endif
24655#else
24656	ubfx	r2, r4, #0, #8
24657#endif
24658	ldr	r9, [r0, r9, lsl #2]
24659	ldr	r11, [r0, r11, lsl #2]
24660	ldr	lr, [r0, lr, lsl #2]
24661	ldr	r2, [r0, r2, lsl #2]
24662#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24663#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24664	lsl	r10, r7, #8
24665	lsr	r10, r10, #24
24666#else
24667	uxtb	r10, r7, ror #16
24668#endif
24669#else
24670	ubfx	r10, r7, #16, #8
24671#endif
24672	eor	r9, r9, r11, ror #24
24673	lsr	r11, r6, #24
24674	eor	r9, r9, lr, ror #8
24675#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24676#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24677	lsl	lr, r4, #16
24678	lsr	lr, lr, #24
24679#else
24680	uxtb	lr, r4, ror #8
24681#endif
24682#else
24683	ubfx	lr, r4, #8, #8
24684#endif
24685	eor	r9, r9, r2, ror #16
24686#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24687#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24688	lsl	r2, r5, #24
24689	lsr	r2, r2, #24
24690#else
24691	uxtb	r2, r5
24692#endif
24693#else
24694	ubfx	r2, r5, #0, #8
24695#endif
24696	ldr	r10, [r0, r10, lsl #2]
24697	ldr	r11, [r0, r11, lsl #2]
24698	ldr	lr, [r0, lr, lsl #2]
24699	ldr	r2, [r0, r2, lsl #2]
24700#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24701#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24702	lsl	r6, r6, #24
24703	lsr	r6, r6, #24
24704#else
24705	uxtb	r6, r6
24706#endif
24707#else
24708	ubfx	r6, r6, #0, #8
24709#endif
24710	eor	r10, r10, r11, ror #24
24711#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24713	lsl	r11, r4, #8
24714	lsr	r11, r11, #24
24715#else
24716	uxtb	r11, r4, ror #16
24717#endif
24718#else
24719	ubfx	r11, r4, #16, #8
24720#endif
24721	eor	r10, r10, lr, ror #8
24722	lsr	lr, r7, #24
24723	eor	r10, r10, r2, ror #16
24724#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24725#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24726	lsl	r2, r5, #16
24727	lsr	r2, r2, #24
24728#else
24729	uxtb	r2, r5, ror #8
24730#endif
24731#else
24732	ubfx	r2, r5, #8, #8
24733#endif
24734	ldr	r6, [r0, r6, lsl #2]
24735	ldr	lr, [r0, lr, lsl #2]
24736	ldr	r11, [r0, r11, lsl #2]
24737	ldr	r2, [r0, r2, lsl #2]
24738	eor	lr, lr, r6, ror #24
24739	ldm	r3!, {r4, r5, r6, r7}
24740	eor	r11, r11, lr, ror #24
24741	eor	r11, r11, r2, ror #8
24742	#   XOR in Key Schedule
24743	eor	r8, r8, r4
24744	eor	r9, r9, r5
24745	eor	r10, r10, r6
24746	eor	r11, r11, r7
24747#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24748#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24749	lsl	r4, r9, #8
24750	lsr	r4, r4, #24
24751#else
24752	uxtb	r4, r9, ror #16
24753#endif
24754#else
24755	ubfx	r4, r9, #16, #8
24756#endif
24757	lsr	r7, r8, #24
24758#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24759#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24760	lsl	lr, r10, #16
24761	lsr	lr, lr, #24
24762#else
24763	uxtb	lr, r10, ror #8
24764#endif
24765#else
24766	ubfx	lr, r10, #8, #8
24767#endif
24768#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24769#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24770	lsl	r2, r11, #24
24771	lsr	r2, r2, #24
24772#else
24773	uxtb	r2, r11
24774#endif
24775#else
24776	ubfx	r2, r11, #0, #8
24777#endif
24778	ldr	r4, [r0, r4, lsl #2]
24779	ldr	r7, [r0, r7, lsl #2]
24780	ldr	lr, [r0, lr, lsl #2]
24781	ldr	r2, [r0, r2, lsl #2]
24782#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24783#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24784	lsl	r5, r10, #8
24785	lsr	r5, r5, #24
24786#else
24787	uxtb	r5, r10, ror #16
24788#endif
24789#else
24790	ubfx	r5, r10, #16, #8
24791#endif
24792	eor	r4, r4, r7, ror #24
24793	lsr	r7, r9, #24
24794	eor	r4, r4, lr, ror #8
24795#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24796#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24797	lsl	lr, r11, #16
24798	lsr	lr, lr, #24
24799#else
24800	uxtb	lr, r11, ror #8
24801#endif
24802#else
24803	ubfx	lr, r11, #8, #8
24804#endif
24805	eor	r4, r4, r2, ror #16
24806#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24807#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24808	lsl	r2, r8, #24
24809	lsr	r2, r2, #24
24810#else
24811	uxtb	r2, r8
24812#endif
24813#else
24814	ubfx	r2, r8, #0, #8
24815#endif
24816	ldr	r5, [r0, r5, lsl #2]
24817	ldr	r7, [r0, r7, lsl #2]
24818	ldr	lr, [r0, lr, lsl #2]
24819	ldr	r2, [r0, r2, lsl #2]
24820#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24821#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24822	lsl	r6, r11, #8
24823	lsr	r6, r6, #24
24824#else
24825	uxtb	r6, r11, ror #16
24826#endif
24827#else
24828	ubfx	r6, r11, #16, #8
24829#endif
24830	eor	r5, r5, r7, ror #24
24831	lsr	r7, r10, #24
24832	eor	r5, r5, lr, ror #8
24833#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24834#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24835	lsl	lr, r8, #16
24836	lsr	lr, lr, #24
24837#else
24838	uxtb	lr, r8, ror #8
24839#endif
24840#else
24841	ubfx	lr, r8, #8, #8
24842#endif
24843	eor	r5, r5, r2, ror #16
24844#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24845#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24846	lsl	r2, r9, #24
24847	lsr	r2, r2, #24
24848#else
24849	uxtb	r2, r9
24850#endif
24851#else
24852	ubfx	r2, r9, #0, #8
24853#endif
24854	ldr	r6, [r0, r6, lsl #2]
24855	ldr	r7, [r0, r7, lsl #2]
24856	ldr	lr, [r0, lr, lsl #2]
24857	ldr	r2, [r0, r2, lsl #2]
24858#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24859#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24860	lsl	r10, r10, #24
24861	lsr	r10, r10, #24
24862#else
24863	uxtb	r10, r10
24864#endif
24865#else
24866	ubfx	r10, r10, #0, #8
24867#endif
24868	eor	r6, r6, r7, ror #24
24869#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24871	lsl	r7, r8, #8
24872	lsr	r7, r7, #24
24873#else
24874	uxtb	r7, r8, ror #16
24875#endif
24876#else
24877	ubfx	r7, r8, #16, #8
24878#endif
24879	eor	r6, r6, lr, ror #8
24880	lsr	lr, r11, #24
24881	eor	r6, r6, r2, ror #16
24882#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24883#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24884	lsl	r2, r9, #16
24885	lsr	r2, r2, #24
24886#else
24887	uxtb	r2, r9, ror #8
24888#endif
24889#else
24890	ubfx	r2, r9, #8, #8
24891#endif
24892	ldr	r10, [r0, r10, lsl #2]
24893	ldr	lr, [r0, lr, lsl #2]
24894	ldr	r7, [r0, r7, lsl #2]
24895	ldr	r2, [r0, r2, lsl #2]
24896	eor	lr, lr, r10, ror #24
24897	ldm	r3!, {r8, r9, r10, r11}
24898	eor	r7, r7, lr, ror #24
24899	eor	r7, r7, r2, ror #8
24900	#   XOR in Key Schedule
24901	eor	r4, r4, r8
24902	eor	r5, r5, r9
24903	eor	r6, r6, r10
24904	eor	r7, r7, r11
24905	subs	r1, r1, #1
24906	bne	L_AES_GCM_encrypt_block_nr_192
24907#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24908#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24909	lsl	r8, r5, #8
24910	lsr	r8, r8, #24
24911#else
24912	uxtb	r8, r5, ror #16
24913#endif
24914#else
24915	ubfx	r8, r5, #16, #8
24916#endif
24917	lsr	r11, r4, #24
24918#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24919#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24920	lsl	lr, r6, #16
24921	lsr	lr, lr, #24
24922#else
24923	uxtb	lr, r6, ror #8
24924#endif
24925#else
24926	ubfx	lr, r6, #8, #8
24927#endif
24928#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24930	lsl	r2, r7, #24
24931	lsr	r2, r2, #24
24932#else
24933	uxtb	r2, r7
24934#endif
24935#else
24936	ubfx	r2, r7, #0, #8
24937#endif
24938	ldr	r8, [r0, r8, lsl #2]
24939	ldr	r11, [r0, r11, lsl #2]
24940	ldr	lr, [r0, lr, lsl #2]
24941	ldr	r2, [r0, r2, lsl #2]
24942#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24943#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24944	lsl	r9, r6, #8
24945	lsr	r9, r9, #24
24946#else
24947	uxtb	r9, r6, ror #16
24948#endif
24949#else
24950	ubfx	r9, r6, #16, #8
24951#endif
24952	eor	r8, r8, r11, ror #24
24953	lsr	r11, r5, #24
24954	eor	r8, r8, lr, ror #8
24955#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24956#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24957	lsl	lr, r7, #16
24958	lsr	lr, lr, #24
24959#else
24960	uxtb	lr, r7, ror #8
24961#endif
24962#else
24963	ubfx	lr, r7, #8, #8
24964#endif
24965	eor	r8, r8, r2, ror #16
24966#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24967#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24968	lsl	r2, r4, #24
24969	lsr	r2, r2, #24
24970#else
24971	uxtb	r2, r4
24972#endif
24973#else
24974	ubfx	r2, r4, #0, #8
24975#endif
24976	ldr	r9, [r0, r9, lsl #2]
24977	ldr	r11, [r0, r11, lsl #2]
24978	ldr	lr, [r0, lr, lsl #2]
24979	ldr	r2, [r0, r2, lsl #2]
24980#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24981#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24982	lsl	r10, r7, #8
24983	lsr	r10, r10, #24
24984#else
24985	uxtb	r10, r7, ror #16
24986#endif
24987#else
24988	ubfx	r10, r7, #16, #8
24989#endif
24990	eor	r9, r9, r11, ror #24
24991	lsr	r11, r6, #24
24992	eor	r9, r9, lr, ror #8
24993#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24994#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24995	lsl	lr, r4, #16
24996	lsr	lr, lr, #24
24997#else
24998	uxtb	lr, r4, ror #8
24999#endif
25000#else
25001	ubfx	lr, r4, #8, #8
25002#endif
25003	eor	r9, r9, r2, ror #16
25004#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25005#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25006	lsl	r2, r5, #24
25007	lsr	r2, r2, #24
25008#else
25009	uxtb	r2, r5
25010#endif
25011#else
25012	ubfx	r2, r5, #0, #8
25013#endif
25014	ldr	r10, [r0, r10, lsl #2]
25015	ldr	r11, [r0, r11, lsl #2]
25016	ldr	lr, [r0, lr, lsl #2]
25017	ldr	r2, [r0, r2, lsl #2]
25018#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25019#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25020	lsl	r6, r6, #24
25021	lsr	r6, r6, #24
25022#else
25023	uxtb	r6, r6
25024#endif
25025#else
25026	ubfx	r6, r6, #0, #8
25027#endif
25028	eor	r10, r10, r11, ror #24
25029#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25031	lsl	r11, r4, #8
25032	lsr	r11, r11, #24
25033#else
25034	uxtb	r11, r4, ror #16
25035#endif
25036#else
25037	ubfx	r11, r4, #16, #8
25038#endif
25039	eor	r10, r10, lr, ror #8
25040	lsr	lr, r7, #24
25041	eor	r10, r10, r2, ror #16
25042#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25043#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25044	lsl	r2, r5, #16
25045	lsr	r2, r2, #24
25046#else
25047	uxtb	r2, r5, ror #8
25048#endif
25049#else
25050	ubfx	r2, r5, #8, #8
25051#endif
25052	ldr	r6, [r0, r6, lsl #2]
25053	ldr	lr, [r0, lr, lsl #2]
25054	ldr	r11, [r0, r11, lsl #2]
25055	ldr	r2, [r0, r2, lsl #2]
25056	eor	lr, lr, r6, ror #24
25057	ldm	r3!, {r4, r5, r6, r7}
25058	eor	r11, r11, lr, ror #24
25059	eor	r11, r11, r2, ror #8
25060	#   XOR in Key Schedule
25061	eor	r8, r8, r4
25062	eor	r9, r9, r5
25063	eor	r10, r10, r6
25064	eor	r11, r11, r7
25065#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25066#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25067	lsl	r4, r11, #24
25068	lsr	r4, r4, #24
25069#else
25070	uxtb	r4, r11
25071#endif
25072#else
25073	ubfx	r4, r11, #0, #8
25074#endif
25075#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25077	lsl	r7, r10, #16
25078	lsr	r7, r7, #24
25079#else
25080	uxtb	r7, r10, ror #8
25081#endif
25082#else
25083	ubfx	r7, r10, #8, #8
25084#endif
25085#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25086#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25087	lsl	lr, r9, #8
25088	lsr	lr, lr, #24
25089#else
25090	uxtb	lr, r9, ror #16
25091#endif
25092#else
25093	ubfx	lr, r9, #16, #8
25094#endif
25095	lsr	r2, r8, #24
25096	ldrb	r4, [r0, r4, lsl #2]
25097	ldrb	r7, [r0, r7, lsl #2]
25098	ldrb	lr, [r0, lr, lsl #2]
25099	ldrb	r2, [r0, r2, lsl #2]
25100#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25101#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25102	lsl	r5, r8, #24
25103	lsr	r5, r5, #24
25104#else
25105	uxtb	r5, r8
25106#endif
25107#else
25108	ubfx	r5, r8, #0, #8
25109#endif
25110	eor	r4, r4, r7, lsl #8
25111#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25112#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25113	lsl	r7, r11, #16
25114	lsr	r7, r7, #24
25115#else
25116	uxtb	r7, r11, ror #8
25117#endif
25118#else
25119	ubfx	r7, r11, #8, #8
25120#endif
25121	eor	r4, r4, lr, lsl #16
25122#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25123#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25124	lsl	lr, r10, #8
25125	lsr	lr, lr, #24
25126#else
25127	uxtb	lr, r10, ror #16
25128#endif
25129#else
25130	ubfx	lr, r10, #16, #8
25131#endif
25132	eor	r4, r4, r2, lsl #24
25133	lsr	r2, r9, #24
25134	ldrb	r5, [r0, r5, lsl #2]
25135	ldrb	r7, [r0, r7, lsl #2]
25136	ldrb	lr, [r0, lr, lsl #2]
25137	ldrb	r2, [r0, r2, lsl #2]
25138#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25139#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25140	lsl	r6, r9, #24
25141	lsr	r6, r6, #24
25142#else
25143	uxtb	r6, r9
25144#endif
25145#else
25146	ubfx	r6, r9, #0, #8
25147#endif
25148	eor	r5, r5, r7, lsl #8
25149#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25150#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25151	lsl	r7, r8, #16
25152	lsr	r7, r7, #24
25153#else
25154	uxtb	r7, r8, ror #8
25155#endif
25156#else
25157	ubfx	r7, r8, #8, #8
25158#endif
25159	eor	r5, r5, lr, lsl #16
25160#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25161#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25162	lsl	lr, r11, #8
25163	lsr	lr, lr, #24
25164#else
25165	uxtb	lr, r11, ror #16
25166#endif
25167#else
25168	ubfx	lr, r11, #16, #8
25169#endif
25170	eor	r5, r5, r2, lsl #24
25171	lsr	r2, r10, #24
25172	ldrb	r6, [r0, r6, lsl #2]
25173	ldrb	r7, [r0, r7, lsl #2]
25174	ldrb	lr, [r0, lr, lsl #2]
25175	ldrb	r2, [r0, r2, lsl #2]
25176	lsr	r11, r11, #24
25177	eor	r6, r6, r7, lsl #8
25178#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25179#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25180	lsl	r7, r10, #24
25181	lsr	r7, r7, #24
25182#else
25183	uxtb	r7, r10
25184#endif
25185#else
25186	ubfx	r7, r10, #0, #8
25187#endif
25188	eor	r6, r6, lr, lsl #16
25189#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25190#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25191	lsl	lr, r9, #16
25192	lsr	lr, lr, #24
25193#else
25194	uxtb	lr, r9, ror #8
25195#endif
25196#else
25197	ubfx	lr, r9, #8, #8
25198#endif
25199	eor	r6, r6, r2, lsl #24
25200#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25201#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25202	lsl	r2, r8, #8
25203	lsr	r2, r2, #24
25204#else
25205	uxtb	r2, r8, ror #16
25206#endif
25207#else
25208	ubfx	r2, r8, #16, #8
25209#endif
25210	ldrb	r11, [r0, r11, lsl #2]
25211	ldrb	r7, [r0, r7, lsl #2]
25212	ldrb	lr, [r0, lr, lsl #2]
25213	ldrb	r2, [r0, r2, lsl #2]
25214	eor	lr, lr, r11, lsl #16
25215	ldm	r3, {r8, r9, r10, r11}
25216	eor	r7, r7, lr, lsl #8
25217	eor	r7, r7, r2, lsl #16
25218	#   XOR in Key Schedule
25219	eor	r4, r4, r8
25220	eor	r5, r5, r9
25221	eor	r6, r6, r10
25222	eor	r7, r7, r11
25223#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
25224	pop	{r1, r2, lr}
25225	ldr	r3, [sp]
25226#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25227	eor	r8, r4, r4, ror #16
25228	eor	r9, r5, r5, ror #16
25229	eor	r10, r6, r6, ror #16
25230	eor	r11, r7, r7, ror #16
25231	bic	r8, r8, #0xff0000
25232	bic	r9, r9, #0xff0000
25233	bic	r10, r10, #0xff0000
25234	bic	r11, r11, #0xff0000
25235	ror	r4, r4, #8
25236	ror	r5, r5, #8
25237	ror	r6, r6, #8
25238	ror	r7, r7, #8
25239	eor	r4, r4, r8, lsr #8
25240	eor	r5, r5, r9, lsr #8
25241	eor	r6, r6, r10, lsr #8
25242	eor	r7, r7, r11, lsr #8
25243#else
25244	rev	r4, r4
25245	rev	r5, r5
25246	rev	r6, r6
25247	rev	r7, r7
25248#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
25249	ldr	r8, [lr]
25250	ldr	r9, [lr, #4]
25251	ldr	r10, [lr, #8]
25252	ldr	r11, [lr, #12]
25253	eor	r4, r4, r8
25254	eor	r5, r5, r9
25255	eor	r6, r6, r10
25256	eor	r7, r7, r11
25257	ldr	r8, [sp, #4]
25258	str	r4, [r1]
25259	str	r5, [r1, #4]
25260	str	r6, [r1, #8]
25261	str	r7, [r1, #12]
25262	ldm	r8, {r4, r5, r6, r7}
25263	subs	r2, r2, #16
25264	add	lr, lr, #16
25265	add	r1, r1, #16
25266	bne	L_AES_GCM_encrypt_loop_block_192
25267	b	L_AES_GCM_encrypt_end
25268L_AES_GCM_encrypt_start_block_128:
25269L_AES_GCM_encrypt_loop_block_128:
25270	push	{r1, r2, lr}
25271	ldr	lr, [sp, #16]
25272	add	r7, r7, #1
25273	ldm	r3!, {r8, r9, r10, r11}
25274	str	r7, [lr, #12]
25275	# Round: 0 - XOR in key schedule
25276	eor	r4, r4, r8
25277	eor	r5, r5, r9
25278	eor	r6, r6, r10
25279	eor	r7, r7, r11
25280	mov	r1, #4
25281#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
25282	bl	AES_encrypt_block
25283#else
25284L_AES_GCM_encrypt_block_nr_128:
25285#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25286#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25287	lsl	r8, r5, #8
25288	lsr	r8, r8, #24
25289#else
25290	uxtb	r8, r5, ror #16
25291#endif
25292#else
25293	ubfx	r8, r5, #16, #8
25294#endif
25295	lsr	r11, r4, #24
25296#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25297#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25298	lsl	lr, r6, #16
25299	lsr	lr, lr, #24
25300#else
25301	uxtb	lr, r6, ror #8
25302#endif
25303#else
25304	ubfx	lr, r6, #8, #8
25305#endif
25306#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25307#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25308	lsl	r2, r7, #24
25309	lsr	r2, r2, #24
25310#else
25311	uxtb	r2, r7
25312#endif
25313#else
25314	ubfx	r2, r7, #0, #8
25315#endif
25316	ldr	r8, [r0, r8, lsl #2]
25317	ldr	r11, [r0, r11, lsl #2]
25318	ldr	lr, [r0, lr, lsl #2]
25319	ldr	r2, [r0, r2, lsl #2]
25320#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25321#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25322	lsl	r9, r6, #8
25323	lsr	r9, r9, #24
25324#else
25325	uxtb	r9, r6, ror #16
25326#endif
25327#else
25328	ubfx	r9, r6, #16, #8
25329#endif
25330	eor	r8, r8, r11, ror #24
25331	lsr	r11, r5, #24
25332	eor	r8, r8, lr, ror #8
25333#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25334#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25335	lsl	lr, r7, #16
25336	lsr	lr, lr, #24
25337#else
25338	uxtb	lr, r7, ror #8
25339#endif
25340#else
25341	ubfx	lr, r7, #8, #8
25342#endif
25343	eor	r8, r8, r2, ror #16
25344#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25345#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25346	lsl	r2, r4, #24
25347	lsr	r2, r2, #24
25348#else
25349	uxtb	r2, r4
25350#endif
25351#else
25352	ubfx	r2, r4, #0, #8
25353#endif
25354	ldr	r9, [r0, r9, lsl #2]
25355	ldr	r11, [r0, r11, lsl #2]
25356	ldr	lr, [r0, lr, lsl #2]
25357	ldr	r2, [r0, r2, lsl #2]
25358#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25359#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25360	lsl	r10, r7, #8
25361	lsr	r10, r10, #24
25362#else
25363	uxtb	r10, r7, ror #16
25364#endif
25365#else
25366	ubfx	r10, r7, #16, #8
25367#endif
25368	eor	r9, r9, r11, ror #24
25369	lsr	r11, r6, #24
25370	eor	r9, r9, lr, ror #8
25371#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25372#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25373	lsl	lr, r4, #16
25374	lsr	lr, lr, #24
25375#else
25376	uxtb	lr, r4, ror #8
25377#endif
25378#else
25379	ubfx	lr, r4, #8, #8
25380#endif
25381	eor	r9, r9, r2, ror #16
25382#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25383#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25384	lsl	r2, r5, #24
25385	lsr	r2, r2, #24
25386#else
25387	uxtb	r2, r5
25388#endif
25389#else
25390	ubfx	r2, r5, #0, #8
25391#endif
25392	ldr	r10, [r0, r10, lsl #2]
25393	ldr	r11, [r0, r11, lsl #2]
25394	ldr	lr, [r0, lr, lsl #2]
25395	ldr	r2, [r0, r2, lsl #2]
25396#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25397#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25398	lsl	r6, r6, #24
25399	lsr	r6, r6, #24
25400#else
25401	uxtb	r6, r6
25402#endif
25403#else
25404	ubfx	r6, r6, #0, #8
25405#endif
25406	eor	r10, r10, r11, ror #24
25407#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25408#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25409	lsl	r11, r4, #8
25410	lsr	r11, r11, #24
25411#else
25412	uxtb	r11, r4, ror #16
25413#endif
25414#else
25415	ubfx	r11, r4, #16, #8
25416#endif
25417	eor	r10, r10, lr, ror #8
25418	lsr	lr, r7, #24
25419	eor	r10, r10, r2, ror #16
25420#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25421#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25422	lsl	r2, r5, #16
25423	lsr	r2, r2, #24
25424#else
25425	uxtb	r2, r5, ror #8
25426#endif
25427#else
25428	ubfx	r2, r5, #8, #8
25429#endif
25430	ldr	r6, [r0, r6, lsl #2]
25431	ldr	lr, [r0, lr, lsl #2]
25432	ldr	r11, [r0, r11, lsl #2]
25433	ldr	r2, [r0, r2, lsl #2]
25434	eor	lr, lr, r6, ror #24
25435	ldm	r3!, {r4, r5, r6, r7}
25436	eor	r11, r11, lr, ror #24
25437	eor	r11, r11, r2, ror #8
25438	#   XOR in Key Schedule
25439	eor	r8, r8, r4
25440	eor	r9, r9, r5
25441	eor	r10, r10, r6
25442	eor	r11, r11, r7
25443#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25444#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25445	lsl	r4, r9, #8
25446	lsr	r4, r4, #24
25447#else
25448	uxtb	r4, r9, ror #16
25449#endif
25450#else
25451	ubfx	r4, r9, #16, #8
25452#endif
25453	lsr	r7, r8, #24
25454#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25455#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25456	lsl	lr, r10, #16
25457	lsr	lr, lr, #24
25458#else
25459	uxtb	lr, r10, ror #8
25460#endif
25461#else
25462	ubfx	lr, r10, #8, #8
25463#endif
25464#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25465#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25466	lsl	r2, r11, #24
25467	lsr	r2, r2, #24
25468#else
25469	uxtb	r2, r11
25470#endif
25471#else
25472	ubfx	r2, r11, #0, #8
25473#endif
25474	ldr	r4, [r0, r4, lsl #2]
25475	ldr	r7, [r0, r7, lsl #2]
25476	ldr	lr, [r0, lr, lsl #2]
25477	ldr	r2, [r0, r2, lsl #2]
25478#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25479#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25480	lsl	r5, r10, #8
25481	lsr	r5, r5, #24
25482#else
25483	uxtb	r5, r10, ror #16
25484#endif
25485#else
25486	ubfx	r5, r10, #16, #8
25487#endif
25488	eor	r4, r4, r7, ror #24
25489	lsr	r7, r9, #24
25490	eor	r4, r4, lr, ror #8
25491#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25492#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25493	lsl	lr, r11, #16
25494	lsr	lr, lr, #24
25495#else
25496	uxtb	lr, r11, ror #8
25497#endif
25498#else
25499	ubfx	lr, r11, #8, #8
25500#endif
25501	eor	r4, r4, r2, ror #16
25502#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25503#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25504	lsl	r2, r8, #24
25505	lsr	r2, r2, #24
25506#else
25507	uxtb	r2, r8
25508#endif
25509#else
25510	ubfx	r2, r8, #0, #8
25511#endif
25512	ldr	r5, [r0, r5, lsl #2]
25513	ldr	r7, [r0, r7, lsl #2]
25514	ldr	lr, [r0, lr, lsl #2]
25515	ldr	r2, [r0, r2, lsl #2]
25516#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25517#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25518	lsl	r6, r11, #8
25519	lsr	r6, r6, #24
25520#else
25521	uxtb	r6, r11, ror #16
25522#endif
25523#else
25524	ubfx	r6, r11, #16, #8
25525#endif
25526	eor	r5, r5, r7, ror #24
25527	lsr	r7, r10, #24
25528	eor	r5, r5, lr, ror #8
25529#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25530#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25531	lsl	lr, r8, #16
25532	lsr	lr, lr, #24
25533#else
25534	uxtb	lr, r8, ror #8
25535#endif
25536#else
25537	ubfx	lr, r8, #8, #8
25538#endif
25539	eor	r5, r5, r2, ror #16
25540#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25541#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25542	lsl	r2, r9, #24
25543	lsr	r2, r2, #24
25544#else
25545	uxtb	r2, r9
25546#endif
25547#else
25548	ubfx	r2, r9, #0, #8
25549#endif
25550	ldr	r6, [r0, r6, lsl #2]
25551	ldr	r7, [r0, r7, lsl #2]
25552	ldr	lr, [r0, lr, lsl #2]
25553	ldr	r2, [r0, r2, lsl #2]
25554#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25555#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25556	lsl	r10, r10, #24
25557	lsr	r10, r10, #24
25558#else
25559	uxtb	r10, r10
25560#endif
25561#else
25562	ubfx	r10, r10, #0, #8
25563#endif
25564	eor	r6, r6, r7, ror #24
25565#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25566#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25567	lsl	r7, r8, #8
25568	lsr	r7, r7, #24
25569#else
25570	uxtb	r7, r8, ror #16
25571#endif
25572#else
25573	ubfx	r7, r8, #16, #8
25574#endif
25575	eor	r6, r6, lr, ror #8
25576	lsr	lr, r11, #24
25577	eor	r6, r6, r2, ror #16
25578#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25579#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25580	lsl	r2, r9, #16
25581	lsr	r2, r2, #24
25582#else
25583	uxtb	r2, r9, ror #8
25584#endif
25585#else
25586	ubfx	r2, r9, #8, #8
25587#endif
25588	ldr	r10, [r0, r10, lsl #2]
25589	ldr	lr, [r0, lr, lsl #2]
25590	ldr	r7, [r0, r7, lsl #2]
25591	ldr	r2, [r0, r2, lsl #2]
25592	eor	lr, lr, r10, ror #24
25593	ldm	r3!, {r8, r9, r10, r11}
25594	eor	r7, r7, lr, ror #24
25595	eor	r7, r7, r2, ror #8
25596	#   XOR in Key Schedule
25597	eor	r4, r4, r8
25598	eor	r5, r5, r9
25599	eor	r6, r6, r10
25600	eor	r7, r7, r11
25601	subs	r1, r1, #1
25602	bne	L_AES_GCM_encrypt_block_nr_128
25603#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25604#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25605	lsl	r8, r5, #8
25606	lsr	r8, r8, #24
25607#else
25608	uxtb	r8, r5, ror #16
25609#endif
25610#else
25611	ubfx	r8, r5, #16, #8
25612#endif
25613	lsr	r11, r4, #24
25614#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25615#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25616	lsl	lr, r6, #16
25617	lsr	lr, lr, #24
25618#else
25619	uxtb	lr, r6, ror #8
25620#endif
25621#else
25622	ubfx	lr, r6, #8, #8
25623#endif
25624#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25625#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25626	lsl	r2, r7, #24
25627	lsr	r2, r2, #24
25628#else
25629	uxtb	r2, r7
25630#endif
25631#else
25632	ubfx	r2, r7, #0, #8
25633#endif
25634	ldr	r8, [r0, r8, lsl #2]
25635	ldr	r11, [r0, r11, lsl #2]
25636	ldr	lr, [r0, lr, lsl #2]
25637	ldr	r2, [r0, r2, lsl #2]
25638#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25639#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25640	lsl	r9, r6, #8
25641	lsr	r9, r9, #24
25642#else
25643	uxtb	r9, r6, ror #16
25644#endif
25645#else
25646	ubfx	r9, r6, #16, #8
25647#endif
25648	eor	r8, r8, r11, ror #24
25649	lsr	r11, r5, #24
25650	eor	r8, r8, lr, ror #8
25651#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25652#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25653	lsl	lr, r7, #16
25654	lsr	lr, lr, #24
25655#else
25656	uxtb	lr, r7, ror #8
25657#endif
25658#else
25659	ubfx	lr, r7, #8, #8
25660#endif
25661	eor	r8, r8, r2, ror #16
25662#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25663#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25664	lsl	r2, r4, #24
25665	lsr	r2, r2, #24
25666#else
25667	uxtb	r2, r4
25668#endif
25669#else
25670	ubfx	r2, r4, #0, #8
25671#endif
25672	ldr	r9, [r0, r9, lsl #2]
25673	ldr	r11, [r0, r11, lsl #2]
25674	ldr	lr, [r0, lr, lsl #2]
25675	ldr	r2, [r0, r2, lsl #2]
25676#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25677#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25678	lsl	r10, r7, #8
25679	lsr	r10, r10, #24
25680#else
25681	uxtb	r10, r7, ror #16
25682#endif
25683#else
25684	ubfx	r10, r7, #16, #8
25685#endif
25686	eor	r9, r9, r11, ror #24
25687	lsr	r11, r6, #24
25688	eor	r9, r9, lr, ror #8
25689#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25690#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25691	lsl	lr, r4, #16
25692	lsr	lr, lr, #24
25693#else
25694	uxtb	lr, r4, ror #8
25695#endif
25696#else
25697	ubfx	lr, r4, #8, #8
25698#endif
25699	eor	r9, r9, r2, ror #16
25700#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25701#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25702	lsl	r2, r5, #24
25703	lsr	r2, r2, #24
25704#else
25705	uxtb	r2, r5
25706#endif
25707#else
25708	ubfx	r2, r5, #0, #8
25709#endif
25710	ldr	r10, [r0, r10, lsl #2]
25711	ldr	r11, [r0, r11, lsl #2]
25712	ldr	lr, [r0, lr, lsl #2]
25713	ldr	r2, [r0, r2, lsl #2]
25714#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25715#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25716	lsl	r6, r6, #24
25717	lsr	r6, r6, #24
25718#else
25719	uxtb	r6, r6
25720#endif
25721#else
25722	ubfx	r6, r6, #0, #8
25723#endif
25724	eor	r10, r10, r11, ror #24
25725#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25726#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25727	lsl	r11, r4, #8
25728	lsr	r11, r11, #24
25729#else
25730	uxtb	r11, r4, ror #16
25731#endif
25732#else
25733	ubfx	r11, r4, #16, #8
25734#endif
25735	eor	r10, r10, lr, ror #8
25736	lsr	lr, r7, #24
25737	eor	r10, r10, r2, ror #16
25738#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25739#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25740	lsl	r2, r5, #16
25741	lsr	r2, r2, #24
25742#else
25743	uxtb	r2, r5, ror #8
25744#endif
25745#else
25746	ubfx	r2, r5, #8, #8
25747#endif
25748	ldr	r6, [r0, r6, lsl #2]
25749	ldr	lr, [r0, lr, lsl #2]
25750	ldr	r11, [r0, r11, lsl #2]
25751	ldr	r2, [r0, r2, lsl #2]
25752	eor	lr, lr, r6, ror #24
25753	ldm	r3!, {r4, r5, r6, r7}
25754	eor	r11, r11, lr, ror #24
25755	eor	r11, r11, r2, ror #8
25756	#   XOR in Key Schedule
25757	eor	r8, r8, r4
25758	eor	r9, r9, r5
25759	eor	r10, r10, r6
25760	eor	r11, r11, r7
25761#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25762#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25763	lsl	r4, r11, #24
25764	lsr	r4, r4, #24
25765#else
25766	uxtb	r4, r11
25767#endif
25768#else
25769	ubfx	r4, r11, #0, #8
25770#endif
25771#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25772#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25773	lsl	r7, r10, #16
25774	lsr	r7, r7, #24
25775#else
25776	uxtb	r7, r10, ror #8
25777#endif
25778#else
25779	ubfx	r7, r10, #8, #8
25780#endif
25781#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25782#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25783	lsl	lr, r9, #8
25784	lsr	lr, lr, #24
25785#else
25786	uxtb	lr, r9, ror #16
25787#endif
25788#else
25789	ubfx	lr, r9, #16, #8
25790#endif
25791	lsr	r2, r8, #24
25792	ldrb	r4, [r0, r4, lsl #2]
25793	ldrb	r7, [r0, r7, lsl #2]
25794	ldrb	lr, [r0, lr, lsl #2]
25795	ldrb	r2, [r0, r2, lsl #2]
25796#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25797#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25798	lsl	r5, r8, #24
25799	lsr	r5, r5, #24
25800#else
25801	uxtb	r5, r8
25802#endif
25803#else
25804	ubfx	r5, r8, #0, #8
25805#endif
25806	eor	r4, r4, r7, lsl #8
25807#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25808#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25809	lsl	r7, r11, #16
25810	lsr	r7, r7, #24
25811#else
25812	uxtb	r7, r11, ror #8
25813#endif
25814#else
25815	ubfx	r7, r11, #8, #8
25816#endif
25817	eor	r4, r4, lr, lsl #16
25818#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25819#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25820	lsl	lr, r10, #8
25821	lsr	lr, lr, #24
25822#else
25823	uxtb	lr, r10, ror #16
25824#endif
25825#else
25826	ubfx	lr, r10, #16, #8
25827#endif
25828	eor	r4, r4, r2, lsl #24
25829	lsr	r2, r9, #24
25830	ldrb	r5, [r0, r5, lsl #2]
25831	ldrb	r7, [r0, r7, lsl #2]
25832	ldrb	lr, [r0, lr, lsl #2]
25833	ldrb	r2, [r0, r2, lsl #2]
25834#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25835#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25836	lsl	r6, r9, #24
25837	lsr	r6, r6, #24
25838#else
25839	uxtb	r6, r9
25840#endif
25841#else
25842	ubfx	r6, r9, #0, #8
25843#endif
25844	eor	r5, r5, r7, lsl #8
25845#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25846#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25847	lsl	r7, r8, #16
25848	lsr	r7, r7, #24
25849#else
25850	uxtb	r7, r8, ror #8
25851#endif
25852#else
25853	ubfx	r7, r8, #8, #8
25854#endif
25855	eor	r5, r5, lr, lsl #16
25856#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25857#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25858	lsl	lr, r11, #8
25859	lsr	lr, lr, #24
25860#else
25861	uxtb	lr, r11, ror #16
25862#endif
25863#else
25864	ubfx	lr, r11, #16, #8
25865#endif
25866	eor	r5, r5, r2, lsl #24
25867	lsr	r2, r10, #24
25868	ldrb	r6, [r0, r6, lsl #2]
25869	ldrb	r7, [r0, r7, lsl #2]
25870	ldrb	lr, [r0, lr, lsl #2]
25871	ldrb	r2, [r0, r2, lsl #2]
25872	lsr	r11, r11, #24
25873	eor	r6, r6, r7, lsl #8
25874#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25875#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25876	lsl	r7, r10, #24
25877	lsr	r7, r7, #24
25878#else
25879	uxtb	r7, r10
25880#endif
25881#else
25882	ubfx	r7, r10, #0, #8
25883#endif
25884	eor	r6, r6, lr, lsl #16
25885#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25886#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25887	lsl	lr, r9, #16
25888	lsr	lr, lr, #24
25889#else
25890	uxtb	lr, r9, ror #8
25891#endif
25892#else
25893	ubfx	lr, r9, #8, #8
25894#endif
25895	eor	r6, r6, r2, lsl #24
25896#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25897#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25898	lsl	r2, r8, #8
25899	lsr	r2, r2, #24
25900#else
25901	uxtb	r2, r8, ror #16
25902#endif
25903#else
25904	ubfx	r2, r8, #16, #8
25905#endif
25906	ldrb	r11, [r0, r11, lsl #2]
25907	ldrb	r7, [r0, r7, lsl #2]
25908	ldrb	lr, [r0, lr, lsl #2]
25909	ldrb	r2, [r0, r2, lsl #2]
25910	eor	lr, lr, r11, lsl #16
25911	ldm	r3, {r8, r9, r10, r11}
25912	eor	r7, r7, lr, lsl #8
25913	eor	r7, r7, r2, lsl #16
25914	#   XOR in Key Schedule
25915	eor	r4, r4, r8
25916	eor	r5, r5, r9
25917	eor	r6, r6, r10
25918	eor	r7, r7, r11
25919#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
25920	pop	{r1, r2, lr}
25921	ldr	r3, [sp]
25922#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25923	eor	r8, r4, r4, ror #16
25924	eor	r9, r5, r5, ror #16
25925	eor	r10, r6, r6, ror #16
25926	eor	r11, r7, r7, ror #16
25927	bic	r8, r8, #0xff0000
25928	bic	r9, r9, #0xff0000
25929	bic	r10, r10, #0xff0000
25930	bic	r11, r11, #0xff0000
25931	ror	r4, r4, #8
25932	ror	r5, r5, #8
25933	ror	r6, r6, #8
25934	ror	r7, r7, #8
25935	eor	r4, r4, r8, lsr #8
25936	eor	r5, r5, r9, lsr #8
25937	eor	r6, r6, r10, lsr #8
25938	eor	r7, r7, r11, lsr #8
25939#else
25940	rev	r4, r4
25941	rev	r5, r5
25942	rev	r6, r6
25943	rev	r7, r7
25944#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
25945	ldr	r8, [lr]
25946	ldr	r9, [lr, #4]
25947	ldr	r10, [lr, #8]
25948	ldr	r11, [lr, #12]
25949	eor	r4, r4, r8
25950	eor	r5, r5, r9
25951	eor	r6, r6, r10
25952	eor	r7, r7, r11
25953	ldr	r8, [sp, #4]
25954	str	r4, [r1]
25955	str	r5, [r1, #4]
25956	str	r6, [r1, #8]
25957	str	r7, [r1, #12]
25958	ldm	r8, {r4, r5, r6, r7}
25959	subs	r2, r2, #16
25960	add	lr, lr, #16
25961	add	r1, r1, #16
25962	bne	L_AES_GCM_encrypt_loop_block_128
25963L_AES_GCM_encrypt_end:
25964	pop	{r3, r8}
25965#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25966	eor	r10, r4, r4, ror #16
25967	eor	r11, r5, r5, ror #16
25968	bic	r10, r10, #0xff0000
25969	bic	r11, r11, #0xff0000
25970	ror	r4, r4, #8
25971	ror	r5, r5, #8
25972	eor	r4, r4, r10, lsr #8
25973	eor	r5, r5, r11, lsr #8
25974	eor	r10, r6, r6, ror #16
25975	eor	r11, r7, r7, ror #16
25976	bic	r10, r10, #0xff0000
25977	bic	r11, r11, #0xff0000
25978	ror	r6, r6, #8
25979	ror	r7, r7, #8
25980	eor	r6, r6, r10, lsr #8
25981	eor	r7, r7, r11, lsr #8
25982#else
25983	rev	r4, r4
25984	rev	r5, r5
25985	rev	r6, r6
25986	rev	r7, r7
25987#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
25988	stm	r8, {r4, r5, r6, r7}
25989	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
25990	.size	AES_GCM_encrypt,.-AES_GCM_encrypt
25991#endif /* HAVE_AESGCM */
25992#endif /* !WOLFSSL_ARMASM_NO_HW_CRYPTO */
25993#endif /* !NO_AES */
25994#endif /* !__aarch64__ && !WOLFSSL_ARMASM_THUMB2 */
25995#endif /* WOLFSSL_ARMASM */
25996
25997#if defined(__linux__) && defined(__ELF__)
25998.section	.note.GNU-stack,"",%progbits
25999#endif
26000#endif /* !WOLFSSL_ARMASM_INLINE */