cjson
fuzzing
inputs
test1 test10 test11 test2 test3 test3.bu test3.uf test3.uu test4 test5 test6 test7 test8 test9library_config
cJSONConfig.cmake.in cJSONConfigVersion.cmake.in libcjson.pc.in libcjson_utils.pc.in uninstall.cmaketests
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.expectedjson-patch-tests
.editorconfig .gitignore .npmignore README.md cjson-utils-tests.json package.json spec_tests.json tests.jsonunity
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.pydocs
ThrowTheSwitchCodingStandard.md UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf UnityAssertionsReference.md UnityConfigurationGuide.md UnityGettingStartedGuide.md UnityHelperScriptsGuide.md license.txtexamples
unity_config.hcurl
.github
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.yamlworkflows
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.ymlCMake
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.cmakedocs
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.mdexamples
.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.cinternals
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.mdlibcurl
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.incinclude
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.hlib
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.hvauth
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.hvquic
curl_ngtcp2.c curl_ngtcp2.h curl_quiche.c curl_quiche.h vquic-tls.c vquic-tls.h vquic.c vquic.h vquic_int.hvtls
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.hm4
.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.m4projects
OS400
.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.hWindows
tmpl
.gitattributes README.txt curl-all.sln curl.sln curl.vcxproj curl.vcxproj.filters libcurl.sln libcurl.vcxproj libcurl.vcxproj.filtersvms
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.hscripts
.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 wcurlsrc
.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.htests
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.prmdata
.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 test999http
testenv
__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.pylibtest
.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.hserver
.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.ctunit
.gitignore CMakeLists.txt Makefile.am Makefile.inc README.md tool1394.c tool1604.c tool1621.c tool1622.c tool1623.c tool1720.cunit
.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.cexamples
.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.luainiparser
example
iniexample.c iniwrite.c parse.c twisted-errors.ini twisted-genhuge.py twisted-ofkey.ini twisted-ofval.ini twisted.initest
CMakeLists.txt test_dictionary.c test_iniparser.c unity-config.yml unity_config.hjinjac
libjinjac
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.htest
.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.jinjalibev
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-h1luajit
doc
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.htmldynasm
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.luasrc
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.cjit
.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.luawolfssl
.github
workflows
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.ymlIDE
ARDUINO
Arduino_README_prepend.md README.md include.am keywords.txt library.properties.template wolfssl-arduino.cpp wolfssl-arduino.sh wolfssl.hECLIPSE
Espressif
ESP-IDF
examples
template
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp8266wolfssl_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.vgdbprojwolfssl_client
CMakeLists.txt Makefile README.md README_server_sm.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32c2 sdkconfig.defaults.esp8266 wolfssl_client_ESP8266.vgdbprojwolfssl_server
CMakeLists.txt Makefile README.md README_server_sm.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32c2 sdkconfig.defaults.esp8266 wolfssl_server_ESP8266.vgdbprojwolfssl_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.vgdbprojGCC-ARM
Makefile Makefile.bench Makefile.client Makefile.common Makefile.server Makefile.static Makefile.test README.md include.am linker.ld linker_fips.ldIAR-EWARM
embOS
SAMV71_XULT
embOS_SAMV71_XULT_user_settings
user_settings.h user_settings_simple_example.h user_settings_verbose_example.hembOS_wolfcrypt_benchmark_SAMV71_XULT
README_wolfcrypt_benchmark wolfcrypt_benchmark.ewd wolfcrypt_benchmark.ewpINTIME-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.vcxprojMQX
Makefile README-jp.md README.md client-tls.c include.am server-tls.c user_config.h user_settings.hMSVS-2019-AZSPHERE
wolfssl_new_azsphere
.gitignore CMakeLists.txt CMakeSettings.json app_manifest.json applibs_versions.h launch.vs.json main.cNETOS
Makefile.wolfcrypt.inc README.md include.am user_settings.h user_settings.h-cert2425 user_settings.h-cert3389 wolfssl_netos_custom.cPlatformIO
examples
wolfssl_benchmark
CMakeLists.txt README.md platformio.ini sdkconfig.defaults wolfssl_benchmark.code-workspaceROWLEY-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.hzpRenesas
e2studio
RA6M3
README.md README_APRA6M_en.md README_APRA6M_jp.md include.amRX72N
EnvisionKit
Simple
README_EN.md README_JP.mdwolfssl_demo
key_data.c key_data.h user_settings.h wolfssl_demo.c wolfssl_demo.h wolfssl_tsip_unit_test.cSTM32Cube
README.md STM32_Benchmarks.md default_conf.ftl include.am main.c wolfssl_example.c wolfssl_example.hWIN
README.txt include.am test.vcxproj user_settings.h user_settings_dtls.h wolfssl-fips.sln wolfssl-fips.vcxprojWIN-SRTP-KDF-140-3
README.txt include.am resource.h test.vcxproj user_settings.h wolfssl-fips.rc wolfssl-fips.sln wolfssl-fips.vcxprojWIN10
README.txt include.am resource.h test.vcxproj user_settings.h wolfssl-fips.rc wolfssl-fips.sln wolfssl-fips.vcxprojXCODE
Benchmark
include.amXilinxSDK
README.md bench.sh combine.sh eclipse_formatter_profile.xml graph.sh include.am user_settings.h wolfssl_example.capple-universal
wolfssl-multiplatform
iotsafe
Makefile README.md ca-cert.c devices.c devices.h include.am main.c memory-tls.c startup.c target.ld user_settings.hmynewt
README.md apps.wolfcrypttest.pkg.yml crypto.wolfssl.pkg.yml crypto.wolfssl.syscfg.yml include.am setup.shcerts
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.pemcrl
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.pemdilithium
bench_dilithium_level2_key.der bench_dilithium_level3_key.der bench_dilithium_level5_key.der include.amecc
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.cnfed25519
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.pemed448
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.pemexternal
DigiCertGlobalRootCA.pem README.txt ca-digicert-ev.pem ca-globalsign-root.pem ca-google-root.pem ca_collection.pem include.amintermediate
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.conflms
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.ammldsa
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.derocsp
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.derp521
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.pemrpk
client-cert-rpk.der client-ecc-cert-rpk.der include.am server-cert-rpk.der server-ecc-cert-rpk.derrsapss
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.pemslhdsa
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.pemsm2
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.pemstatickeys
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.pemtest
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.p7stest-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.shtest-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.pemxmss
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.amcmake
Config.cmake.in README.md config.in functions.cmake include.am options.h.in wolfssl-config-version.cmake.in wolfssl-targets.cmake.indebian
changelog.in control.in copyright include.am libwolfssl-dev.install libwolfssl.install rules.indoc
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.hheader_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.hexamples
async
Makefile README.md async_client.c async_server.c async_tls.c async_tls.h include.am user_settings.hconfigs
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.hechoclient
echoclient.c echoclient.h echoclient.sln echoclient.vcproj echoclient.vcxproj include.am quitlinuxkm
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.cm4
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.m4mqx
wolfcrypt_benchmark
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.launchwolfcrypt_test
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.launchwolfssl_client
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.launchscripts
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.shsrc
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.ctests
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.hwolfcrypt
benchmark
README.md benchmark-VS2022.sln benchmark-VS2022.vcxproj benchmark-VS2022.vcxproj.user benchmark.c benchmark.h benchmark.sln benchmark.vcproj benchmark.vcxproj include.amsrc
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.pyRenesas
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.carm
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.ccaam
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.cdevcrypto
README.md devcrypto_aes.c devcrypto_ecdsa.c devcrypto_hash.c devcrypto_hmac.c devcrypto_rsa.c devcrypto_x25519.c wc_devcrypto.criscv
riscv-64-aes.c riscv-64-chacha.c riscv-64-poly1305.c riscv-64-sha256.c riscv-64-sha3.c riscv-64-sha512.cwolfssl
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.hwolfcrypt
port
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.hcaam
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.hwrapper
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.adbtests
src
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.adbCSharp
wolfSSL-Example-IOCallbacks
App.config wolfSSL-Example-IOCallbacks.cs wolfSSL-Example-IOCallbacks.csprojwolfSSL-TLS-ServerThreaded
App.config wolfSSL-TLS-ServerThreaded.cs wolfSSL-TLS-ServerThreaded.csprojrust
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.rstests
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.rszephyr
samples
wolfssl_benchmark
CMakeLists.txt README install_test.sh prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.confwolfssl_test
CMakeLists.txt README install_test.sh prj-no-malloc.conf prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl/wolfcrypt/src/port/arm/armv8-32-aes-asm_c.c
raw
1/* armv8-32-aes-asm
2 *
3 * Copyright (C) 2006-2026 wolfSSL Inc.
4 *
5 * This file is part of wolfSSL.
6 *
7 * wolfSSL is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * wolfSSL is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
20 */
21
22/* Generated using (from wolfssl):
23 * cd ../scripts
24 * ruby ./aes/aes.rb arm32 \
25 * ../wolfssl/wolfcrypt/src/port/arm/armv8-32-aes-asm.c
26 */
27
28#include <wolfssl/wolfcrypt/libwolfssl_sources_asm.h>
29#include <wolfssl/wolfcrypt/error-crypt.h>
30
31#ifdef WOLFSSL_ARMASM
32#if !defined(__aarch64__) && !defined(WOLFSSL_ARMASM_THUMB2)
33#ifdef WOLFSSL_ARMASM_INLINE
34
35#ifdef __IAR_SYSTEMS_ICC__
36#define __asm__ asm
37#define __volatile__ volatile
38#define WOLFSSL_NO_VAR_ASSIGN_REG
39#endif /* __IAR_SYSTEMS_ICC__ */
40#ifdef __KEIL__
41#define __asm__ __asm
42#define __volatile__ volatile
43#endif /* __KEIL__ */
44#ifdef __ghs__
45#define __asm__ __asm
46#define __volatile__
47#define WOLFSSL_NO_VAR_ASSIGN_REG
48#endif /* __ghs__ */
49
50#ifndef NO_AES
51#include <wolfssl/wolfcrypt/aes.h>
52
53#ifndef WOLFSSL_ARMASM_NO_HW_CRYPTO
54#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
55WC_OMIT_FRAME_POINTER void AES_set_key_AARCH32(const byte* userKey_p,
56 int keylen_p, byte* key_p, int dir_p)
57#else
58WC_OMIT_FRAME_POINTER void AES_set_key_AARCH32(const byte* userKey, int keylen,
59 byte* key, int dir)
60#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
61{
62#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
63 register const byte* userKey __asm__ ("r0") = (const byte*)userKey_p;
64 register int keylen __asm__ ("r1") = (int)keylen_p;
65 register byte* key __asm__ ("r2") = (byte*)key_p;
66 register int dir __asm__ ("r3") = (int)dir_p;
67#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
68
69 __asm__ __volatile__ (
70 "cmp %[keylen], #24\n\t"
71 "blt L_aes_set_key_arm32_crypto_start_128_%=\n\t"
72 "bgt L_aes_set_key_arm32_crypto_start_256_%=\n\t"
73 "ldr r4, [%[userKey]], #4\n\t"
74 "ldr r5, [%[userKey]], #4\n\t"
75 "ldr r6, [%[userKey]], #4\n\t"
76 "ldr r7, [%[userKey]], #4\n\t"
77 "ldr r8, [%[userKey]], #4\n\t"
78 "ldr r9, [%[userKey]], #4\n\t"
79#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
80 "stm r2!, {r4, r5}\n\t"
81#else
82 "strd r4, r5, [%[key]], #8\n\t"
83#endif
84#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
85 "stm r2!, {r6, r7}\n\t"
86#else
87 "strd r6, r7, [%[key]], #8\n\t"
88#endif
89#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
90 "stm r2!, {r8, r9}\n\t"
91#else
92 "strd r8, r9, [%[key]], #8\n\t"
93#endif
94 "vdup.32 q1, r9\n\t"
95 "vmov.i32 q0, #0\n\t"
96 "aese.8 q0, q1\n\t"
97 "vmov.i32 r12, s0\n\t"
98 "ror r12, r12, #8\n\t"
99 "eor r4, r4, #1\n\t"
100 "eor r4, r4, r12\n\t"
101 "eor r5, r5, r4\n\t"
102 "eor r6, r6, r5\n\t"
103 "eor r7, r7, r6\n\t"
104 "eor r8, r8, r7\n\t"
105 "eor r9, r9, r8\n\t"
106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
107 "stm r2!, {r4, r5}\n\t"
108#else
109 "strd r4, r5, [%[key]], #8\n\t"
110#endif
111#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
112 "stm r2!, {r6, r7}\n\t"
113#else
114 "strd r6, r7, [%[key]], #8\n\t"
115#endif
116#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
117 "stm r2!, {r8, r9}\n\t"
118#else
119 "strd r8, r9, [%[key]], #8\n\t"
120#endif
121 "vdup.32 q1, r9\n\t"
122 "vmov.i32 q0, #0\n\t"
123 "aese.8 q0, q1\n\t"
124 "vmov.i32 r12, s0\n\t"
125 "ror r12, r12, #8\n\t"
126 "eor r4, r4, #2\n\t"
127 "eor r4, r4, r12\n\t"
128 "eor r5, r5, r4\n\t"
129 "eor r6, r6, r5\n\t"
130 "eor r7, r7, r6\n\t"
131 "eor r8, r8, r7\n\t"
132 "eor r9, r9, r8\n\t"
133#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
134 "stm r2!, {r4, r5}\n\t"
135#else
136 "strd r4, r5, [%[key]], #8\n\t"
137#endif
138#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
139 "stm r2!, {r6, r7}\n\t"
140#else
141 "strd r6, r7, [%[key]], #8\n\t"
142#endif
143#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
144 "stm r2!, {r8, r9}\n\t"
145#else
146 "strd r8, r9, [%[key]], #8\n\t"
147#endif
148 "vdup.32 q1, r9\n\t"
149 "vmov.i32 q0, #0\n\t"
150 "aese.8 q0, q1\n\t"
151 "vmov.i32 r12, s0\n\t"
152 "ror r12, r12, #8\n\t"
153 "eor r4, r4, #4\n\t"
154 "eor r4, r4, r12\n\t"
155 "eor r5, r5, r4\n\t"
156 "eor r6, r6, r5\n\t"
157 "eor r7, r7, r6\n\t"
158 "eor r8, r8, r7\n\t"
159 "eor r9, r9, r8\n\t"
160#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
161 "stm r2!, {r4, r5}\n\t"
162#else
163 "strd r4, r5, [%[key]], #8\n\t"
164#endif
165#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
166 "stm r2!, {r6, r7}\n\t"
167#else
168 "strd r6, r7, [%[key]], #8\n\t"
169#endif
170#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
171 "stm r2!, {r8, r9}\n\t"
172#else
173 "strd r8, r9, [%[key]], #8\n\t"
174#endif
175 "vdup.32 q1, r9\n\t"
176 "vmov.i32 q0, #0\n\t"
177 "aese.8 q0, q1\n\t"
178 "vmov.i32 r12, s0\n\t"
179 "ror r12, r12, #8\n\t"
180 "eor r4, r4, #8\n\t"
181 "eor r4, r4, r12\n\t"
182 "eor r5, r5, r4\n\t"
183 "eor r6, r6, r5\n\t"
184 "eor r7, r7, r6\n\t"
185 "eor r8, r8, r7\n\t"
186 "eor r9, r9, r8\n\t"
187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
188 "stm r2!, {r4, r5}\n\t"
189#else
190 "strd r4, r5, [%[key]], #8\n\t"
191#endif
192#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
193 "stm r2!, {r6, r7}\n\t"
194#else
195 "strd r6, r7, [%[key]], #8\n\t"
196#endif
197#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
198 "stm r2!, {r8, r9}\n\t"
199#else
200 "strd r8, r9, [%[key]], #8\n\t"
201#endif
202 "vdup.32 q1, r9\n\t"
203 "vmov.i32 q0, #0\n\t"
204 "aese.8 q0, q1\n\t"
205 "vmov.i32 r12, s0\n\t"
206 "ror r12, r12, #8\n\t"
207 "eor r4, r4, #16\n\t"
208 "eor r4, r4, r12\n\t"
209 "eor r5, r5, r4\n\t"
210 "eor r6, r6, r5\n\t"
211 "eor r7, r7, r6\n\t"
212 "eor r8, r8, r7\n\t"
213 "eor r9, r9, r8\n\t"
214#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
215 "stm r2!, {r4, r5}\n\t"
216#else
217 "strd r4, r5, [%[key]], #8\n\t"
218#endif
219#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
220 "stm r2!, {r6, r7}\n\t"
221#else
222 "strd r6, r7, [%[key]], #8\n\t"
223#endif
224#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
225 "stm r2!, {r8, r9}\n\t"
226#else
227 "strd r8, r9, [%[key]], #8\n\t"
228#endif
229 "vdup.32 q1, r9\n\t"
230 "vmov.i32 q0, #0\n\t"
231 "aese.8 q0, q1\n\t"
232 "vmov.i32 r12, s0\n\t"
233 "ror r12, r12, #8\n\t"
234 "eor r4, r4, #32\n\t"
235 "eor r4, r4, r12\n\t"
236 "eor r5, r5, r4\n\t"
237 "eor r6, r6, r5\n\t"
238 "eor r7, r7, r6\n\t"
239 "eor r8, r8, r7\n\t"
240 "eor r9, r9, r8\n\t"
241#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
242 "stm r2!, {r4, r5}\n\t"
243#else
244 "strd r4, r5, [%[key]], #8\n\t"
245#endif
246#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
247 "stm r2!, {r6, r7}\n\t"
248#else
249 "strd r6, r7, [%[key]], #8\n\t"
250#endif
251#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
252 "stm r2!, {r8, r9}\n\t"
253#else
254 "strd r8, r9, [%[key]], #8\n\t"
255#endif
256 "vdup.32 q1, r9\n\t"
257 "vmov.i32 q0, #0\n\t"
258 "aese.8 q0, q1\n\t"
259 "vmov.i32 r12, s0\n\t"
260 "ror r12, r12, #8\n\t"
261 "eor r4, r4, #0x40\n\t"
262 "eor r4, r4, r12\n\t"
263 "eor r5, r5, r4\n\t"
264 "eor r6, r6, r5\n\t"
265 "eor r7, r7, r6\n\t"
266 "eor r8, r8, r7\n\t"
267 "eor r9, r9, r8\n\t"
268#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
269 "stm r2!, {r4, r5}\n\t"
270#else
271 "strd r4, r5, [%[key]], #8\n\t"
272#endif
273#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
274 "stm r2!, {r6, r7}\n\t"
275#else
276 "strd r6, r7, [%[key]], #8\n\t"
277#endif
278#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
279 "stm r2!, {r8, r9}\n\t"
280#else
281 "strd r8, r9, [%[key]], #8\n\t"
282#endif
283 "vdup.32 q1, r9\n\t"
284 "vmov.i32 q0, #0\n\t"
285 "aese.8 q0, q1\n\t"
286 "vmov.i32 r12, s0\n\t"
287 "ror r12, r12, #8\n\t"
288 "eor r4, r4, #0x80\n\t"
289 "eor r4, r4, r12\n\t"
290 "eor r5, r5, r4\n\t"
291 "eor r6, r6, r5\n\t"
292 "eor r7, r7, r6\n\t"
293#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
294 "stm r2!, {r4, r5}\n\t"
295#else
296 "strd r4, r5, [%[key]], #8\n\t"
297#endif
298#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
299 "stm r2!, {r6, r7}\n\t"
300#else
301 "strd r6, r7, [%[key]], #8\n\t"
302#endif
303 "cmp %[dir], #0\n\t"
304 "beq L_aes_set_key_arm32_crypto_done_%=\n\t"
305 "sub %[key], %[key], #0xd0\n\t"
306 "vld1.32 {q0}, [%[key]]\n\t"
307 "add %[key], %[key], #0xc0\n\t"
308 "vld1.32 {q1}, [%[key]]\n\t"
309 "sub %[key], %[key], #0xc0\n\t"
310 "vst1.32 {q1}, [%[key]]\n\t"
311 "add %[key], %[key], #0xc0\n\t"
312 "vst1.32 {q0}, [%[key]]\n\t"
313 "sub %[key], %[key], #0xb0\n\t"
314 "vld1.32 {q0}, [%[key]]\n\t"
315 "add %[key], %[key], #0xa0\n\t"
316 "vld1.32 {q1}, [%[key]]\n\t"
317 "sub %[key], %[key], #0xa0\n\t"
318 "aesimc.8 q0, q0\n\t"
319 "aesimc.8 q1, q1\n\t"
320 "vst1.32 {q1}, [%[key]]\n\t"
321 "add %[key], %[key], #0xa0\n\t"
322 "vst1.32 {q0}, [%[key]]\n\t"
323 "sub %[key], %[key], #0x90\n\t"
324 "vld1.32 {q0}, [%[key]]\n\t"
325 "add %[key], %[key], #0x80\n\t"
326 "vld1.32 {q1}, [%[key]]\n\t"
327 "sub %[key], %[key], #0x80\n\t"
328 "aesimc.8 q0, q0\n\t"
329 "aesimc.8 q1, q1\n\t"
330 "vst1.32 {q1}, [%[key]]\n\t"
331 "add %[key], %[key], #0x80\n\t"
332 "vst1.32 {q0}, [%[key]]\n\t"
333 "sub %[key], %[key], #0x70\n\t"
334 "vld1.32 {q0}, [%[key]]\n\t"
335 "add %[key], %[key], #0x60\n\t"
336 "vld1.32 {q1}, [%[key]]\n\t"
337 "sub %[key], %[key], #0x60\n\t"
338 "aesimc.8 q0, q0\n\t"
339 "aesimc.8 q1, q1\n\t"
340 "vst1.32 {q1}, [%[key]]\n\t"
341 "add %[key], %[key], #0x60\n\t"
342 "vst1.32 {q0}, [%[key]]\n\t"
343 "sub %[key], %[key], #0x50\n\t"
344 "vld1.32 {q0}, [%[key]]\n\t"
345 "add %[key], %[key], #0x40\n\t"
346 "vld1.32 {q1}, [%[key]]\n\t"
347 "sub %[key], %[key], #0x40\n\t"
348 "aesimc.8 q0, q0\n\t"
349 "aesimc.8 q1, q1\n\t"
350 "vst1.32 {q1}, [%[key]]\n\t"
351 "add %[key], %[key], #0x40\n\t"
352 "vst1.32 {q0}, [%[key]]\n\t"
353 "sub %[key], %[key], #48\n\t"
354 "vld1.32 {q0}, [%[key]]\n\t"
355 "add %[key], %[key], #32\n\t"
356 "vld1.32 {q1}, [%[key]]\n\t"
357 "sub %[key], %[key], #32\n\t"
358 "aesimc.8 q0, q0\n\t"
359 "aesimc.8 q1, q1\n\t"
360 "vst1.32 {q1}, [%[key]]\n\t"
361 "add %[key], %[key], #32\n\t"
362 "vst1.32 {q0}, [%[key]]\n\t"
363 "sub %[key], %[key], #16\n\t"
364 "vld1.32 {q0}, [%[key]]\n\t"
365 "aesimc.8 q0, q0\n\t"
366 "vst1.32 {q0}, [%[key]]\n\t"
367 "b L_aes_set_key_arm32_crypto_done_%=\n\t"
368 "\n"
369 "L_aes_set_key_arm32_crypto_start_256_%=:\n\t"
370 "ldr r4, [%[userKey]], #4\n\t"
371 "ldr r5, [%[userKey]], #4\n\t"
372 "ldr r6, [%[userKey]], #4\n\t"
373 "ldr r7, [%[userKey]], #4\n\t"
374 "ldr r8, [%[userKey]], #4\n\t"
375 "ldr r9, [%[userKey]], #4\n\t"
376 "ldr r10, [%[userKey]], #4\n\t"
377 "ldr r11, [%[userKey]], #4\n\t"
378#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
379 "stm r2!, {r4, r5}\n\t"
380#else
381 "strd r4, r5, [%[key]], #8\n\t"
382#endif
383#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
384 "stm r2!, {r6, r7}\n\t"
385#else
386 "strd r6, r7, [%[key]], #8\n\t"
387#endif
388#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
389 "stm r2!, {r8, r9}\n\t"
390#else
391 "strd r8, r9, [%[key]], #8\n\t"
392#endif
393#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
394 "stm r2!, {r10, r11}\n\t"
395#else
396 "strd r10, r11, [%[key]], #8\n\t"
397#endif
398 "vdup.32 q1, r11\n\t"
399 "vmov.i32 q0, #0\n\t"
400 "aese.8 q0, q1\n\t"
401 "vmov.i32 r12, s0\n\t"
402 "ror r12, r12, #8\n\t"
403 "eor r4, r4, #1\n\t"
404 "eor r4, r4, r12\n\t"
405 "eor r5, r5, r4\n\t"
406 "eor r6, r6, r5\n\t"
407 "eor r7, r7, r6\n\t"
408 "vdup.32 q1, r7\n\t"
409 "vmov.i32 q0, #0\n\t"
410 "aese.8 q0, q1\n\t"
411 "vmov.i32 r12, s0\n\t"
412 "eor r8, r8, r12\n\t"
413 "eor r9, r9, r8\n\t"
414 "eor r10, r10, r9\n\t"
415 "eor r11, r11, r10\n\t"
416#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
417 "stm r2!, {r4, r5}\n\t"
418#else
419 "strd r4, r5, [%[key]], #8\n\t"
420#endif
421#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
422 "stm r2!, {r6, r7}\n\t"
423#else
424 "strd r6, r7, [%[key]], #8\n\t"
425#endif
426#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
427 "stm r2!, {r8, r9}\n\t"
428#else
429 "strd r8, r9, [%[key]], #8\n\t"
430#endif
431#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
432 "stm r2!, {r10, r11}\n\t"
433#else
434 "strd r10, r11, [%[key]], #8\n\t"
435#endif
436 "vdup.32 q1, r11\n\t"
437 "vmov.i32 q0, #0\n\t"
438 "aese.8 q0, q1\n\t"
439 "vmov.i32 r12, s0\n\t"
440 "ror r12, r12, #8\n\t"
441 "eor r4, r4, #2\n\t"
442 "eor r4, r4, r12\n\t"
443 "eor r5, r5, r4\n\t"
444 "eor r6, r6, r5\n\t"
445 "eor r7, r7, r6\n\t"
446 "vdup.32 q1, r7\n\t"
447 "vmov.i32 q0, #0\n\t"
448 "aese.8 q0, q1\n\t"
449 "vmov.i32 r12, s0\n\t"
450 "eor r8, r8, r12\n\t"
451 "eor r9, r9, r8\n\t"
452 "eor r10, r10, r9\n\t"
453 "eor r11, r11, r10\n\t"
454#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
455 "stm r2!, {r4, r5}\n\t"
456#else
457 "strd r4, r5, [%[key]], #8\n\t"
458#endif
459#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
460 "stm r2!, {r6, r7}\n\t"
461#else
462 "strd r6, r7, [%[key]], #8\n\t"
463#endif
464#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
465 "stm r2!, {r8, r9}\n\t"
466#else
467 "strd r8, r9, [%[key]], #8\n\t"
468#endif
469#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
470 "stm r2!, {r10, r11}\n\t"
471#else
472 "strd r10, r11, [%[key]], #8\n\t"
473#endif
474 "vdup.32 q1, r11\n\t"
475 "vmov.i32 q0, #0\n\t"
476 "aese.8 q0, q1\n\t"
477 "vmov.i32 r12, s0\n\t"
478 "ror r12, r12, #8\n\t"
479 "eor r4, r4, #4\n\t"
480 "eor r4, r4, r12\n\t"
481 "eor r5, r5, r4\n\t"
482 "eor r6, r6, r5\n\t"
483 "eor r7, r7, r6\n\t"
484 "vdup.32 q1, r7\n\t"
485 "vmov.i32 q0, #0\n\t"
486 "aese.8 q0, q1\n\t"
487 "vmov.i32 r12, s0\n\t"
488 "eor r8, r8, r12\n\t"
489 "eor r9, r9, r8\n\t"
490 "eor r10, r10, r9\n\t"
491 "eor r11, r11, r10\n\t"
492#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
493 "stm r2!, {r4, r5}\n\t"
494#else
495 "strd r4, r5, [%[key]], #8\n\t"
496#endif
497#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
498 "stm r2!, {r6, r7}\n\t"
499#else
500 "strd r6, r7, [%[key]], #8\n\t"
501#endif
502#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
503 "stm r2!, {r8, r9}\n\t"
504#else
505 "strd r8, r9, [%[key]], #8\n\t"
506#endif
507#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
508 "stm r2!, {r10, r11}\n\t"
509#else
510 "strd r10, r11, [%[key]], #8\n\t"
511#endif
512 "vdup.32 q1, r11\n\t"
513 "vmov.i32 q0, #0\n\t"
514 "aese.8 q0, q1\n\t"
515 "vmov.i32 r12, s0\n\t"
516 "ror r12, r12, #8\n\t"
517 "eor r4, r4, #8\n\t"
518 "eor r4, r4, r12\n\t"
519 "eor r5, r5, r4\n\t"
520 "eor r6, r6, r5\n\t"
521 "eor r7, r7, r6\n\t"
522 "vdup.32 q1, r7\n\t"
523 "vmov.i32 q0, #0\n\t"
524 "aese.8 q0, q1\n\t"
525 "vmov.i32 r12, s0\n\t"
526 "eor r8, r8, r12\n\t"
527 "eor r9, r9, r8\n\t"
528 "eor r10, r10, r9\n\t"
529 "eor r11, r11, r10\n\t"
530#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
531 "stm r2!, {r4, r5}\n\t"
532#else
533 "strd r4, r5, [%[key]], #8\n\t"
534#endif
535#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
536 "stm r2!, {r6, r7}\n\t"
537#else
538 "strd r6, r7, [%[key]], #8\n\t"
539#endif
540#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
541 "stm r2!, {r8, r9}\n\t"
542#else
543 "strd r8, r9, [%[key]], #8\n\t"
544#endif
545#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
546 "stm r2!, {r10, r11}\n\t"
547#else
548 "strd r10, r11, [%[key]], #8\n\t"
549#endif
550 "vdup.32 q1, r11\n\t"
551 "vmov.i32 q0, #0\n\t"
552 "aese.8 q0, q1\n\t"
553 "vmov.i32 r12, s0\n\t"
554 "ror r12, r12, #8\n\t"
555 "eor r4, r4, #16\n\t"
556 "eor r4, r4, r12\n\t"
557 "eor r5, r5, r4\n\t"
558 "eor r6, r6, r5\n\t"
559 "eor r7, r7, r6\n\t"
560 "vdup.32 q1, r7\n\t"
561 "vmov.i32 q0, #0\n\t"
562 "aese.8 q0, q1\n\t"
563 "vmov.i32 r12, s0\n\t"
564 "eor r8, r8, r12\n\t"
565 "eor r9, r9, r8\n\t"
566 "eor r10, r10, r9\n\t"
567 "eor r11, r11, r10\n\t"
568#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
569 "stm r2!, {r4, r5}\n\t"
570#else
571 "strd r4, r5, [%[key]], #8\n\t"
572#endif
573#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
574 "stm r2!, {r6, r7}\n\t"
575#else
576 "strd r6, r7, [%[key]], #8\n\t"
577#endif
578#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
579 "stm r2!, {r8, r9}\n\t"
580#else
581 "strd r8, r9, [%[key]], #8\n\t"
582#endif
583#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
584 "stm r2!, {r10, r11}\n\t"
585#else
586 "strd r10, r11, [%[key]], #8\n\t"
587#endif
588 "vdup.32 q1, r11\n\t"
589 "vmov.i32 q0, #0\n\t"
590 "aese.8 q0, q1\n\t"
591 "vmov.i32 r12, s0\n\t"
592 "ror r12, r12, #8\n\t"
593 "eor r4, r4, #32\n\t"
594 "eor r4, r4, r12\n\t"
595 "eor r5, r5, r4\n\t"
596 "eor r6, r6, r5\n\t"
597 "eor r7, r7, r6\n\t"
598 "vdup.32 q1, r7\n\t"
599 "vmov.i32 q0, #0\n\t"
600 "aese.8 q0, q1\n\t"
601 "vmov.i32 r12, s0\n\t"
602 "eor r8, r8, r12\n\t"
603 "eor r9, r9, r8\n\t"
604 "eor r10, r10, r9\n\t"
605 "eor r11, r11, r10\n\t"
606#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
607 "stm r2!, {r4, r5}\n\t"
608#else
609 "strd r4, r5, [%[key]], #8\n\t"
610#endif
611#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
612 "stm r2!, {r6, r7}\n\t"
613#else
614 "strd r6, r7, [%[key]], #8\n\t"
615#endif
616#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
617 "stm r2!, {r8, r9}\n\t"
618#else
619 "strd r8, r9, [%[key]], #8\n\t"
620#endif
621#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
622 "stm r2!, {r10, r11}\n\t"
623#else
624 "strd r10, r11, [%[key]], #8\n\t"
625#endif
626 "vdup.32 q1, r11\n\t"
627 "vmov.i32 q0, #0\n\t"
628 "aese.8 q0, q1\n\t"
629 "vmov.i32 r12, s0\n\t"
630 "ror r12, r12, #8\n\t"
631 "eor r4, r4, #0x40\n\t"
632 "eor r4, r4, r12\n\t"
633 "eor r5, r5, r4\n\t"
634 "eor r6, r6, r5\n\t"
635 "eor r7, r7, r6\n\t"
636#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
637 "stm r2!, {r4, r5}\n\t"
638#else
639 "strd r4, r5, [%[key]], #8\n\t"
640#endif
641#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
642 "stm r2!, {r6, r7}\n\t"
643#else
644 "strd r6, r7, [%[key]], #8\n\t"
645#endif
646 "cmp %[dir], #0\n\t"
647 "beq L_aes_set_key_arm32_crypto_done_%=\n\t"
648 "sub %[key], %[key], #0xf0\n\t"
649 "vld1.32 {q0}, [%[key]]\n\t"
650 "add %[key], %[key], #0xe0\n\t"
651 "vld1.32 {q1}, [%[key]]\n\t"
652 "sub %[key], %[key], #0xe0\n\t"
653 "vst1.32 {q1}, [%[key]]\n\t"
654 "add %[key], %[key], #0xe0\n\t"
655 "vst1.32 {q0}, [%[key]]\n\t"
656 "sub %[key], %[key], #0xd0\n\t"
657 "vld1.32 {q0}, [%[key]]\n\t"
658 "add %[key], %[key], #0xc0\n\t"
659 "vld1.32 {q1}, [%[key]]\n\t"
660 "sub %[key], %[key], #0xc0\n\t"
661 "aesimc.8 q0, q0\n\t"
662 "aesimc.8 q1, q1\n\t"
663 "vst1.32 {q1}, [%[key]]\n\t"
664 "add %[key], %[key], #0xc0\n\t"
665 "vst1.32 {q0}, [%[key]]\n\t"
666 "sub %[key], %[key], #0xb0\n\t"
667 "vld1.32 {q0}, [%[key]]\n\t"
668 "add %[key], %[key], #0xa0\n\t"
669 "vld1.32 {q1}, [%[key]]\n\t"
670 "sub %[key], %[key], #0xa0\n\t"
671 "aesimc.8 q0, q0\n\t"
672 "aesimc.8 q1, q1\n\t"
673 "vst1.32 {q1}, [%[key]]\n\t"
674 "add %[key], %[key], #0xa0\n\t"
675 "vst1.32 {q0}, [%[key]]\n\t"
676 "sub %[key], %[key], #0x90\n\t"
677 "vld1.32 {q0}, [%[key]]\n\t"
678 "add %[key], %[key], #0x80\n\t"
679 "vld1.32 {q1}, [%[key]]\n\t"
680 "sub %[key], %[key], #0x80\n\t"
681 "aesimc.8 q0, q0\n\t"
682 "aesimc.8 q1, q1\n\t"
683 "vst1.32 {q1}, [%[key]]\n\t"
684 "add %[key], %[key], #0x80\n\t"
685 "vst1.32 {q0}, [%[key]]\n\t"
686 "sub %[key], %[key], #0x70\n\t"
687 "vld1.32 {q0}, [%[key]]\n\t"
688 "add %[key], %[key], #0x60\n\t"
689 "vld1.32 {q1}, [%[key]]\n\t"
690 "sub %[key], %[key], #0x60\n\t"
691 "aesimc.8 q0, q0\n\t"
692 "aesimc.8 q1, q1\n\t"
693 "vst1.32 {q1}, [%[key]]\n\t"
694 "add %[key], %[key], #0x60\n\t"
695 "vst1.32 {q0}, [%[key]]\n\t"
696 "sub %[key], %[key], #0x50\n\t"
697 "vld1.32 {q0}, [%[key]]\n\t"
698 "add %[key], %[key], #0x40\n\t"
699 "vld1.32 {q1}, [%[key]]\n\t"
700 "sub %[key], %[key], #0x40\n\t"
701 "aesimc.8 q0, q0\n\t"
702 "aesimc.8 q1, q1\n\t"
703 "vst1.32 {q1}, [%[key]]\n\t"
704 "add %[key], %[key], #0x40\n\t"
705 "vst1.32 {q0}, [%[key]]\n\t"
706 "sub %[key], %[key], #48\n\t"
707 "vld1.32 {q0}, [%[key]]\n\t"
708 "add %[key], %[key], #32\n\t"
709 "vld1.32 {q1}, [%[key]]\n\t"
710 "sub %[key], %[key], #32\n\t"
711 "aesimc.8 q0, q0\n\t"
712 "aesimc.8 q1, q1\n\t"
713 "vst1.32 {q1}, [%[key]]\n\t"
714 "add %[key], %[key], #32\n\t"
715 "vst1.32 {q0}, [%[key]]\n\t"
716 "sub %[key], %[key], #16\n\t"
717 "vld1.32 {q0}, [%[key]]\n\t"
718 "aesimc.8 q0, q0\n\t"
719 "vst1.32 {q0}, [%[key]]\n\t"
720 "b L_aes_set_key_arm32_crypto_done_%=\n\t"
721 "\n"
722 "L_aes_set_key_arm32_crypto_start_128_%=:\n\t"
723 "ldr r4, [%[userKey]], #4\n\t"
724 "ldr r5, [%[userKey]], #4\n\t"
725 "ldr r6, [%[userKey]], #4\n\t"
726 "ldr r7, [%[userKey]], #4\n\t"
727#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
728 "stm r2!, {r4, r5}\n\t"
729#else
730 "strd r4, r5, [%[key]], #8\n\t"
731#endif
732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
733 "stm r2!, {r6, r7}\n\t"
734#else
735 "strd r6, r7, [%[key]], #8\n\t"
736#endif
737 "vdup.32 q1, r7\n\t"
738 "vmov.i32 q0, #0\n\t"
739 "aese.8 q0, q1\n\t"
740 "vmov.i32 r12, s0\n\t"
741 "ror r12, r12, #8\n\t"
742 "eor r4, r4, #1\n\t"
743 "eor r4, r4, r12\n\t"
744 "eor r5, r5, r4\n\t"
745 "eor r6, r6, r5\n\t"
746 "eor r7, r7, r6\n\t"
747#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
748 "stm r2!, {r4, r5}\n\t"
749#else
750 "strd r4, r5, [%[key]], #8\n\t"
751#endif
752#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
753 "stm r2!, {r6, r7}\n\t"
754#else
755 "strd r6, r7, [%[key]], #8\n\t"
756#endif
757 "vdup.32 q1, r7\n\t"
758 "vmov.i32 q0, #0\n\t"
759 "aese.8 q0, q1\n\t"
760 "vmov.i32 r12, s0\n\t"
761 "ror r12, r12, #8\n\t"
762 "eor r4, r4, #2\n\t"
763 "eor r4, r4, r12\n\t"
764 "eor r5, r5, r4\n\t"
765 "eor r6, r6, r5\n\t"
766 "eor r7, r7, r6\n\t"
767#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
768 "stm r2!, {r4, r5}\n\t"
769#else
770 "strd r4, r5, [%[key]], #8\n\t"
771#endif
772#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
773 "stm r2!, {r6, r7}\n\t"
774#else
775 "strd r6, r7, [%[key]], #8\n\t"
776#endif
777 "vdup.32 q1, r7\n\t"
778 "vmov.i32 q0, #0\n\t"
779 "aese.8 q0, q1\n\t"
780 "vmov.i32 r12, s0\n\t"
781 "ror r12, r12, #8\n\t"
782 "eor r4, r4, #4\n\t"
783 "eor r4, r4, r12\n\t"
784 "eor r5, r5, r4\n\t"
785 "eor r6, r6, r5\n\t"
786 "eor r7, r7, r6\n\t"
787#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
788 "stm r2!, {r4, r5}\n\t"
789#else
790 "strd r4, r5, [%[key]], #8\n\t"
791#endif
792#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
793 "stm r2!, {r6, r7}\n\t"
794#else
795 "strd r6, r7, [%[key]], #8\n\t"
796#endif
797 "vdup.32 q1, r7\n\t"
798 "vmov.i32 q0, #0\n\t"
799 "aese.8 q0, q1\n\t"
800 "vmov.i32 r12, s0\n\t"
801 "ror r12, r12, #8\n\t"
802 "eor r4, r4, #8\n\t"
803 "eor r4, r4, r12\n\t"
804 "eor r5, r5, r4\n\t"
805 "eor r6, r6, r5\n\t"
806 "eor r7, r7, r6\n\t"
807#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
808 "stm r2!, {r4, r5}\n\t"
809#else
810 "strd r4, r5, [%[key]], #8\n\t"
811#endif
812#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
813 "stm r2!, {r6, r7}\n\t"
814#else
815 "strd r6, r7, [%[key]], #8\n\t"
816#endif
817 "vdup.32 q1, r7\n\t"
818 "vmov.i32 q0, #0\n\t"
819 "aese.8 q0, q1\n\t"
820 "vmov.i32 r12, s0\n\t"
821 "ror r12, r12, #8\n\t"
822 "eor r4, r4, #16\n\t"
823 "eor r4, r4, r12\n\t"
824 "eor r5, r5, r4\n\t"
825 "eor r6, r6, r5\n\t"
826 "eor r7, r7, r6\n\t"
827#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
828 "stm r2!, {r4, r5}\n\t"
829#else
830 "strd r4, r5, [%[key]], #8\n\t"
831#endif
832#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
833 "stm r2!, {r6, r7}\n\t"
834#else
835 "strd r6, r7, [%[key]], #8\n\t"
836#endif
837 "vdup.32 q1, r7\n\t"
838 "vmov.i32 q0, #0\n\t"
839 "aese.8 q0, q1\n\t"
840 "vmov.i32 r12, s0\n\t"
841 "ror r12, r12, #8\n\t"
842 "eor r4, r4, #32\n\t"
843 "eor r4, r4, r12\n\t"
844 "eor r5, r5, r4\n\t"
845 "eor r6, r6, r5\n\t"
846 "eor r7, r7, r6\n\t"
847#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
848 "stm r2!, {r4, r5}\n\t"
849#else
850 "strd r4, r5, [%[key]], #8\n\t"
851#endif
852#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
853 "stm r2!, {r6, r7}\n\t"
854#else
855 "strd r6, r7, [%[key]], #8\n\t"
856#endif
857 "vdup.32 q1, r7\n\t"
858 "vmov.i32 q0, #0\n\t"
859 "aese.8 q0, q1\n\t"
860 "vmov.i32 r12, s0\n\t"
861 "ror r12, r12, #8\n\t"
862 "eor r4, r4, #0x40\n\t"
863 "eor r4, r4, r12\n\t"
864 "eor r5, r5, r4\n\t"
865 "eor r6, r6, r5\n\t"
866 "eor r7, r7, r6\n\t"
867#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
868 "stm r2!, {r4, r5}\n\t"
869#else
870 "strd r4, r5, [%[key]], #8\n\t"
871#endif
872#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
873 "stm r2!, {r6, r7}\n\t"
874#else
875 "strd r6, r7, [%[key]], #8\n\t"
876#endif
877 "vdup.32 q1, r7\n\t"
878 "vmov.i32 q0, #0\n\t"
879 "aese.8 q0, q1\n\t"
880 "vmov.i32 r12, s0\n\t"
881 "ror r12, r12, #8\n\t"
882 "eor r4, r4, #0x80\n\t"
883 "eor r4, r4, r12\n\t"
884 "eor r5, r5, r4\n\t"
885 "eor r6, r6, r5\n\t"
886 "eor r7, r7, r6\n\t"
887#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
888 "stm r2!, {r4, r5}\n\t"
889#else
890 "strd r4, r5, [%[key]], #8\n\t"
891#endif
892#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
893 "stm r2!, {r6, r7}\n\t"
894#else
895 "strd r6, r7, [%[key]], #8\n\t"
896#endif
897 "vdup.32 q1, r7\n\t"
898 "vmov.i32 q0, #0\n\t"
899 "aese.8 q0, q1\n\t"
900 "vmov.i32 r12, s0\n\t"
901 "mov lr, #27\n\t"
902 "ror r12, r12, #8\n\t"
903 "eor r4, r4, lr\n\t"
904 "eor r4, r4, r12\n\t"
905 "eor r5, r5, r4\n\t"
906 "eor r6, r6, r5\n\t"
907 "eor r7, r7, r6\n\t"
908#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
909 "stm r2!, {r4, r5}\n\t"
910#else
911 "strd r4, r5, [%[key]], #8\n\t"
912#endif
913#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
914 "stm r2!, {r6, r7}\n\t"
915#else
916 "strd r6, r7, [%[key]], #8\n\t"
917#endif
918 "vdup.32 q1, r7\n\t"
919 "vmov.i32 q0, #0\n\t"
920 "aese.8 q0, q1\n\t"
921 "vmov.i32 r12, s0\n\t"
922 "mov lr, #54\n\t"
923 "ror r12, r12, #8\n\t"
924 "eor r4, r4, lr\n\t"
925 "eor r4, r4, r12\n\t"
926 "eor r5, r5, r4\n\t"
927 "eor r6, r6, r5\n\t"
928 "eor r7, r7, r6\n\t"
929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
930 "stm r2!, {r4, r5}\n\t"
931#else
932 "strd r4, r5, [%[key]], #8\n\t"
933#endif
934#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
935 "stm r2!, {r6, r7}\n\t"
936#else
937 "strd r6, r7, [%[key]], #8\n\t"
938#endif
939 "cmp %[dir], #0\n\t"
940 "beq L_aes_set_key_arm32_crypto_done_%=\n\t"
941 "sub %[key], %[key], #0xb0\n\t"
942 "vld1.32 {q0}, [%[key]]\n\t"
943 "add %[key], %[key], #0xa0\n\t"
944 "vld1.32 {q1}, [%[key]]\n\t"
945 "sub %[key], %[key], #0xa0\n\t"
946 "vst1.32 {q1}, [%[key]]\n\t"
947 "add %[key], %[key], #0xa0\n\t"
948 "vst1.32 {q0}, [%[key]]\n\t"
949 "sub %[key], %[key], #0x90\n\t"
950 "vld1.32 {q0}, [%[key]]\n\t"
951 "add %[key], %[key], #0x80\n\t"
952 "vld1.32 {q1}, [%[key]]\n\t"
953 "sub %[key], %[key], #0x80\n\t"
954 "aesimc.8 q0, q0\n\t"
955 "aesimc.8 q1, q1\n\t"
956 "vst1.32 {q1}, [%[key]]\n\t"
957 "add %[key], %[key], #0x80\n\t"
958 "vst1.32 {q0}, [%[key]]\n\t"
959 "sub %[key], %[key], #0x70\n\t"
960 "vld1.32 {q0}, [%[key]]\n\t"
961 "add %[key], %[key], #0x60\n\t"
962 "vld1.32 {q1}, [%[key]]\n\t"
963 "sub %[key], %[key], #0x60\n\t"
964 "aesimc.8 q0, q0\n\t"
965 "aesimc.8 q1, q1\n\t"
966 "vst1.32 {q1}, [%[key]]\n\t"
967 "add %[key], %[key], #0x60\n\t"
968 "vst1.32 {q0}, [%[key]]\n\t"
969 "sub %[key], %[key], #0x50\n\t"
970 "vld1.32 {q0}, [%[key]]\n\t"
971 "add %[key], %[key], #0x40\n\t"
972 "vld1.32 {q1}, [%[key]]\n\t"
973 "sub %[key], %[key], #0x40\n\t"
974 "aesimc.8 q0, q0\n\t"
975 "aesimc.8 q1, q1\n\t"
976 "vst1.32 {q1}, [%[key]]\n\t"
977 "add %[key], %[key], #0x40\n\t"
978 "vst1.32 {q0}, [%[key]]\n\t"
979 "sub %[key], %[key], #48\n\t"
980 "vld1.32 {q0}, [%[key]]\n\t"
981 "add %[key], %[key], #32\n\t"
982 "vld1.32 {q1}, [%[key]]\n\t"
983 "sub %[key], %[key], #32\n\t"
984 "aesimc.8 q0, q0\n\t"
985 "aesimc.8 q1, q1\n\t"
986 "vst1.32 {q1}, [%[key]]\n\t"
987 "add %[key], %[key], #32\n\t"
988 "vst1.32 {q0}, [%[key]]\n\t"
989 "sub %[key], %[key], #16\n\t"
990 "vld1.32 {q0}, [%[key]]\n\t"
991 "aesimc.8 q0, q0\n\t"
992 "vst1.32 {q0}, [%[key]]\n\t"
993 "\n"
994 "L_aes_set_key_arm32_crypto_done_%=:\n\t"
995#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
996 : [userKey] "+r" (userKey), [keylen] "+r" (keylen), [key] "+r" (key),
997 [dir] "+r" (dir)
998 :
999#else
1000 :
1001 : [userKey] "r" (userKey), [keylen] "r" (keylen), [key] "r" (key),
1002 [dir] "r" (dir)
1003#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1004 : "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
1005 "r10", "r11", "q0", "q1"
1006 );
1007}
1008
1009#if defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \
1010 defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
1011 defined(HAVE_AES_CBC)
1012#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
1013WC_OMIT_FRAME_POINTER void AES_encrypt_AARCH32(const byte* inBlock_p,
1014 byte* outBlock_p, byte* key_p, int nr_p)
1015#else
1016WC_OMIT_FRAME_POINTER void AES_encrypt_AARCH32(const byte* inBlock,
1017 byte* outBlock, byte* key, int nr)
1018#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1019{
1020#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
1021 register const byte* inBlock __asm__ ("r0") = (const byte*)inBlock_p;
1022 register byte* outBlock __asm__ ("r1") = (byte*)outBlock_p;
1023 register byte* key __asm__ ("r2") = (byte*)key_p;
1024 register int nr __asm__ ("r3") = (int)nr_p;
1025#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1026
1027 __asm__ __volatile__ (
1028 "vld1.8 {q0}, [%[inBlock]]\n\t"
1029 "vldm %[key]!, {q1-q4}\n\t"
1030 "aese.8 q0, q1\n\t"
1031 "aesmc.8 q0, q0\n\t"
1032 "aese.8 q0, q2\n\t"
1033 "aesmc.8 q0, q0\n\t"
1034 "aese.8 q0, q3\n\t"
1035 "aesmc.8 q0, q0\n\t"
1036 "aese.8 q0, q4\n\t"
1037 "aesmc.8 q0, q0\n\t"
1038 "vldm %[key]!, {q1-q4}\n\t"
1039 "aese.8 q0, q1\n\t"
1040 "aesmc.8 q0, q0\n\t"
1041 "aese.8 q0, q2\n\t"
1042 "aesmc.8 q0, q0\n\t"
1043 "aese.8 q0, q3\n\t"
1044 "aesmc.8 q0, q0\n\t"
1045 "aese.8 q0, q4\n\t"
1046 "aesmc.8 q0, q0\n\t"
1047 "subs %[nr], %[nr], #10\n\t"
1048 "vld1.32 {q1-q2}, [%[key]]!\n\t"
1049 "aese.8 q0, q1\n\t"
1050 "aesmc.8 q0, q0\n\t"
1051 "aese.8 q0, q2\n\t"
1052 "beq L_aes_encrypt_arm32_crypto_round_done_%=\n\t"
1053 "vld1.32 {q1-q2}, [%[key]]!\n\t"
1054 "subs %[nr], %[nr], #2\n\t"
1055 "aesmc.8 q0, q0\n\t"
1056 "aese.8 q0, q1\n\t"
1057 "aesmc.8 q0, q0\n\t"
1058 "aese.8 q0, q2\n\t"
1059 "beq L_aes_encrypt_arm32_crypto_round_done_%=\n\t"
1060 "vld1.32 {q1-q2}, [%[key]]!\n\t"
1061 "aesmc.8 q0, q0\n\t"
1062 "aese.8 q0, q1\n\t"
1063 "aesmc.8 q0, q0\n\t"
1064 "aese.8 q0, q2\n\t"
1065 "\n"
1066 "L_aes_encrypt_arm32_crypto_round_done_%=:\n\t"
1067 "vld1.32 {q1}, [%[key]]\n\t"
1068 "veor.32 q0, q0, q1\n\t"
1069 "vst1.8 {q0}, [%[outBlock]]\n\t"
1070#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
1071 : [inBlock] "+r" (inBlock), [outBlock] "+r" (outBlock),
1072 [key] "+r" (key), [nr] "+r" (nr)
1073 :
1074#else
1075 :
1076 : [inBlock] "r" (inBlock), [outBlock] "r" (outBlock), [key] "r" (key),
1077 [nr] "r" (nr)
1078#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1079 : "memory", "cc", "q0", "q1", "q2", "q3", "q4"
1080 );
1081}
1082
1083#endif /* defined(HAVE_AESCCM) || defined(HAVE_AESGCM) ||
1084 * defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) ||
1085 * defined(HAVE_AES_CBC) */
1086#if !defined(WC_AES_BITSLICED) || defined(WOLFSSL_AES_DIRECT) || \
1087 defined(WOLFSSL_AES_COUNTER)
1088#ifdef HAVE_AES_DECRYPT
1089#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
1090WC_OMIT_FRAME_POINTER void AES_decrypt_AARCH32(const byte* inBlock_p,
1091 byte* outBlock_p, byte* key_p, int nr_p)
1092#else
1093WC_OMIT_FRAME_POINTER void AES_decrypt_AARCH32(const byte* inBlock,
1094 byte* outBlock, byte* key, int nr)
1095#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1096{
1097#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
1098 register const byte* inBlock __asm__ ("r0") = (const byte*)inBlock_p;
1099 register byte* outBlock __asm__ ("r1") = (byte*)outBlock_p;
1100 register byte* key __asm__ ("r2") = (byte*)key_p;
1101 register int nr __asm__ ("r3") = (int)nr_p;
1102#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1103
1104 __asm__ __volatile__ (
1105 "vld1.8 {q0}, [%[inBlock]]\n\t"
1106 "vldm %[key]!, {q1-q4}\n\t"
1107 "aesd.8 q0, q1\n\t"
1108 "aesimc.8 q0, q0\n\t"
1109 "aesd.8 q0, q2\n\t"
1110 "aesimc.8 q0, q0\n\t"
1111 "aesd.8 q0, q3\n\t"
1112 "aesimc.8 q0, q0\n\t"
1113 "aesd.8 q0, q4\n\t"
1114 "aesimc.8 q0, q0\n\t"
1115 "vldm %[key]!, {q1-q4}\n\t"
1116 "aesd.8 q0, q1\n\t"
1117 "aesimc.8 q0, q0\n\t"
1118 "aesd.8 q0, q2\n\t"
1119 "aesimc.8 q0, q0\n\t"
1120 "aesd.8 q0, q3\n\t"
1121 "aesimc.8 q0, q0\n\t"
1122 "aesd.8 q0, q4\n\t"
1123 "aesimc.8 q0, q0\n\t"
1124 "vld1.32 {q1-q2}, [%[key]]!\n\t"
1125 "aesd.8 q0, q1\n\t"
1126 "aesimc.8 q0, q0\n\t"
1127 "aesd.8 q0, q2\n\t"
1128 "subs %[nr], %[nr], #10\n\t"
1129 "beq L_aes_decrypt_arm32_crypto_round_done_%=\n\t"
1130 "vld1.32 {q1-q2}, [%[key]]!\n\t"
1131 "aesimc.8 q0, q0\n\t"
1132 "aesd.8 q0, q1\n\t"
1133 "aesimc.8 q0, q0\n\t"
1134 "aesd.8 q0, q2\n\t"
1135 "subs %[nr], %[nr], #2\n\t"
1136 "beq L_aes_decrypt_arm32_crypto_round_done_%=\n\t"
1137 "vld1.32 {q1-q2}, [%[key]]!\n\t"
1138 "aesimc.8 q0, q0\n\t"
1139 "aesd.8 q0, q1\n\t"
1140 "aesimc.8 q0, q0\n\t"
1141 "aesd.8 q0, q2\n\t"
1142 "\n"
1143 "L_aes_decrypt_arm32_crypto_round_done_%=:\n\t"
1144 "vld1.32 {q1}, [%[key]]\n\t"
1145 "veor.32 q0, q0, q1\n\t"
1146 "vst1.8 {q0}, [%[outBlock]]\n\t"
1147#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
1148 : [inBlock] "+r" (inBlock), [outBlock] "+r" (outBlock),
1149 [key] "+r" (key), [nr] "+r" (nr)
1150 :
1151#else
1152 :
1153 : [inBlock] "r" (inBlock), [outBlock] "r" (outBlock), [key] "r" (key),
1154 [nr] "r" (nr)
1155#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1156 : "memory", "cc", "q0", "q1", "q2", "q3", "q4"
1157 );
1158}
1159
1160#endif /* HAVE_AES_DECRYPT */
1161#endif /* !defined(WC_AES_BITSLICED) || defined(WOLFSSL_AES_DIRECT) ||
1162 * defined(WOLFSSL_AES_COUNTER) */
1163#ifdef HAVE_AES_ECB
1164#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
1165WC_OMIT_FRAME_POINTER void AES_encrypt_blocks_AARCH32(const byte* in_p,
1166 byte* out_p, word32 sz_p, byte* key_p, int nr_p)
1167#else
1168WC_OMIT_FRAME_POINTER void AES_encrypt_blocks_AARCH32(const byte* in, byte* out,
1169 word32 sz, byte* key, int nr)
1170#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1171{
1172#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
1173 register const byte* in __asm__ ("r0") = (const byte*)in_p;
1174 register byte* out __asm__ ("r1") = (byte*)out_p;
1175 register word32 sz __asm__ ("r2") = (word32)sz_p;
1176 register byte* key __asm__ ("r3") = (byte*)key_p;
1177 register int nr __asm__ ("r12") = (int)nr_p;
1178#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1179
1180 __asm__ __volatile__ (
1181 "push {%[nr]}\n\t"
1182 "ldr r12, [sp]\n\t"
1183 "vldm.32 %[key]!, {q0-q7}\n\t"
1184 "lsr %[sz], %[sz], #4\n\t"
1185 "cmp r12, #12\n\t"
1186 "blt L_aes_encrypt_blocks_arm32_crypto_start_128_%=\n\t"
1187 "bgt L_aes_encrypt_blocks_arm32_crypto_start_256_%=\n\t"
1188 /* AES_ECB_192 */
1189#ifndef NO_AES_192
1190 "vld1.32 {q8-q9}, [%[key]]!\n\t"
1191 "cmp %[sz], #1\n\t"
1192 "beq L_aes_encrypt_blocks_arm32_crypto_192_start_1_%=\n\t"
1193 "\n"
1194 "L_aes_encrypt_blocks_arm32_crypto_192_start_4_%=:\n\t"
1195 "cmp %[sz], #4\n\t"
1196 "blt L_aes_encrypt_blocks_arm32_crypto_192_start_2_%=\n\t"
1197 "vldm.8 %[in]!, {q12-q15}\n\t"
1198 "aese.8 q12, q0\n\t"
1199 "aesmc.8 q12, q12\n\t"
1200 "aese.8 q13, q0\n\t"
1201 "aesmc.8 q13, q13\n\t"
1202 "aese.8 q14, q0\n\t"
1203 "aesmc.8 q14, q14\n\t"
1204 "aese.8 q15, q0\n\t"
1205 "aesmc.8 q15, q15\n\t"
1206 "aese.8 q12, q1\n\t"
1207 "aesmc.8 q12, q12\n\t"
1208 "aese.8 q13, q1\n\t"
1209 "aesmc.8 q13, q13\n\t"
1210 "aese.8 q14, q1\n\t"
1211 "aesmc.8 q14, q14\n\t"
1212 "aese.8 q15, q1\n\t"
1213 "aesmc.8 q15, q15\n\t"
1214 "aese.8 q12, q2\n\t"
1215 "aesmc.8 q12, q12\n\t"
1216 "aese.8 q13, q2\n\t"
1217 "aesmc.8 q13, q13\n\t"
1218 "aese.8 q14, q2\n\t"
1219 "aesmc.8 q14, q14\n\t"
1220 "aese.8 q15, q2\n\t"
1221 "aesmc.8 q15, q15\n\t"
1222 "aese.8 q12, q3\n\t"
1223 "aesmc.8 q12, q12\n\t"
1224 "aese.8 q13, q3\n\t"
1225 "aesmc.8 q13, q13\n\t"
1226 "aese.8 q14, q3\n\t"
1227 "aesmc.8 q14, q14\n\t"
1228 "aese.8 q15, q3\n\t"
1229 "aesmc.8 q15, q15\n\t"
1230 "aese.8 q12, q4\n\t"
1231 "aesmc.8 q12, q12\n\t"
1232 "aese.8 q13, q4\n\t"
1233 "aesmc.8 q13, q13\n\t"
1234 "aese.8 q14, q4\n\t"
1235 "aesmc.8 q14, q14\n\t"
1236 "aese.8 q15, q4\n\t"
1237 "aesmc.8 q15, q15\n\t"
1238 "aese.8 q12, q5\n\t"
1239 "aesmc.8 q12, q12\n\t"
1240 "aese.8 q13, q5\n\t"
1241 "aesmc.8 q13, q13\n\t"
1242 "aese.8 q14, q5\n\t"
1243 "aesmc.8 q14, q14\n\t"
1244 "aese.8 q15, q5\n\t"
1245 "aesmc.8 q15, q15\n\t"
1246 "aese.8 q12, q6\n\t"
1247 "aesmc.8 q12, q12\n\t"
1248 "aese.8 q13, q6\n\t"
1249 "aesmc.8 q13, q13\n\t"
1250 "aese.8 q14, q6\n\t"
1251 "aesmc.8 q14, q14\n\t"
1252 "aese.8 q15, q6\n\t"
1253 "aesmc.8 q15, q15\n\t"
1254 "aese.8 q12, q7\n\t"
1255 "aesmc.8 q12, q12\n\t"
1256 "aese.8 q13, q7\n\t"
1257 "aesmc.8 q13, q13\n\t"
1258 "aese.8 q14, q7\n\t"
1259 "aesmc.8 q14, q14\n\t"
1260 "aese.8 q15, q7\n\t"
1261 "aesmc.8 q15, q15\n\t"
1262 "aese.8 q12, q8\n\t"
1263 "aesmc.8 q12, q12\n\t"
1264 "aese.8 q13, q8\n\t"
1265 "aesmc.8 q13, q13\n\t"
1266 "aese.8 q14, q8\n\t"
1267 "aesmc.8 q14, q14\n\t"
1268 "aese.8 q15, q8\n\t"
1269 "aesmc.8 q15, q15\n\t"
1270 "vld1.32 {q10}, [%[key]]!\n\t"
1271 "aese.8 q12, q9\n\t"
1272 "aesmc.8 q12, q12\n\t"
1273 "aese.8 q13, q9\n\t"
1274 "aesmc.8 q13, q13\n\t"
1275 "aese.8 q14, q9\n\t"
1276 "aesmc.8 q14, q14\n\t"
1277 "aese.8 q15, q9\n\t"
1278 "aesmc.8 q15, q15\n\t"
1279 "vld1.32 {q11}, [%[key]]!\n\t"
1280 "aese.8 q12, q10\n\t"
1281 "aesmc.8 q12, q12\n\t"
1282 "aese.8 q13, q10\n\t"
1283 "aesmc.8 q13, q13\n\t"
1284 "aese.8 q14, q10\n\t"
1285 "aesmc.8 q14, q14\n\t"
1286 "aese.8 q15, q10\n\t"
1287 "aesmc.8 q15, q15\n\t"
1288 "vld1.32 {q10}, [%[key]]!\n\t"
1289 "aese.8 q12, q11\n\t"
1290 "veor.32 q12, q12, q10\n\t"
1291 "aese.8 q13, q11\n\t"
1292 "veor.32 q13, q13, q10\n\t"
1293 "aese.8 q14, q11\n\t"
1294 "veor.32 q14, q14, q10\n\t"
1295 "aese.8 q15, q11\n\t"
1296 "veor.32 q15, q15, q10\n\t"
1297 "sub %[key], %[key], #48\n\t"
1298 "sub %[sz], %[sz], #4\n\t"
1299 "vstm.8 %[out]!, {q12-q15}\n\t"
1300 "cmp %[sz], #4\n\t"
1301 "bge L_aes_encrypt_blocks_arm32_crypto_192_start_4_%=\n\t"
1302 "\n"
1303 "L_aes_encrypt_blocks_arm32_crypto_192_start_2_%=:\n\t"
1304 "cmp %[sz], #2\n\t"
1305 "blt L_aes_encrypt_blocks_arm32_crypto_192_start_1_%=\n\t"
1306 "vld1.8 {q12-q13}, [%[in]]!\n\t"
1307 "aese.8 q12, q0\n\t"
1308 "aesmc.8 q12, q12\n\t"
1309 "aese.8 q13, q0\n\t"
1310 "aesmc.8 q13, q13\n\t"
1311 "aese.8 q12, q1\n\t"
1312 "aesmc.8 q12, q12\n\t"
1313 "aese.8 q13, q1\n\t"
1314 "aesmc.8 q13, q13\n\t"
1315 "aese.8 q12, q2\n\t"
1316 "aesmc.8 q12, q12\n\t"
1317 "aese.8 q13, q2\n\t"
1318 "aesmc.8 q13, q13\n\t"
1319 "aese.8 q12, q3\n\t"
1320 "aesmc.8 q12, q12\n\t"
1321 "aese.8 q13, q3\n\t"
1322 "aesmc.8 q13, q13\n\t"
1323 "aese.8 q12, q4\n\t"
1324 "aesmc.8 q12, q12\n\t"
1325 "aese.8 q13, q4\n\t"
1326 "aesmc.8 q13, q13\n\t"
1327 "aese.8 q12, q5\n\t"
1328 "aesmc.8 q12, q12\n\t"
1329 "aese.8 q13, q5\n\t"
1330 "aesmc.8 q13, q13\n\t"
1331 "aese.8 q12, q6\n\t"
1332 "aesmc.8 q12, q12\n\t"
1333 "aese.8 q13, q6\n\t"
1334 "aesmc.8 q13, q13\n\t"
1335 "aese.8 q12, q7\n\t"
1336 "aesmc.8 q12, q12\n\t"
1337 "aese.8 q13, q7\n\t"
1338 "aesmc.8 q13, q13\n\t"
1339 "aese.8 q12, q8\n\t"
1340 "aesmc.8 q12, q12\n\t"
1341 "aese.8 q13, q8\n\t"
1342 "aesmc.8 q13, q13\n\t"
1343 "vld1.32 {q10}, [%[key]]!\n\t"
1344 "aese.8 q12, q9\n\t"
1345 "aesmc.8 q12, q12\n\t"
1346 "aese.8 q13, q9\n\t"
1347 "aesmc.8 q13, q13\n\t"
1348 "vld1.32 {q11}, [%[key]]!\n\t"
1349 "aese.8 q12, q10\n\t"
1350 "aesmc.8 q12, q12\n\t"
1351 "aese.8 q13, q10\n\t"
1352 "aesmc.8 q13, q13\n\t"
1353 "vld1.32 {q10}, [%[key]]!\n\t"
1354 "aese.8 q12, q11\n\t"
1355 "veor.32 q12, q12, q10\n\t"
1356 "aese.8 q13, q11\n\t"
1357 "veor.32 q13, q13, q10\n\t"
1358 "sub %[key], %[key], #48\n\t"
1359 "sub %[sz], %[sz], #2\n\t"
1360 "vst1.8 {q12-q13}, [%[out]]!\n\t"
1361 "\n"
1362 "L_aes_encrypt_blocks_arm32_crypto_192_start_1_%=:\n\t"
1363 "cmp %[sz], #0\n\t"
1364 "beq L_aes_encrypt_blocks_arm32_crypto_192_done_%=\n\t"
1365 "vld1.8 {q12}, [%[in]]!\n\t"
1366 "aese.8 q12, q0\n\t"
1367 "aesmc.8 q12, q12\n\t"
1368 "aese.8 q12, q1\n\t"
1369 "aesmc.8 q12, q12\n\t"
1370 "aese.8 q12, q2\n\t"
1371 "aesmc.8 q12, q12\n\t"
1372 "aese.8 q12, q3\n\t"
1373 "aesmc.8 q12, q12\n\t"
1374 "aese.8 q12, q4\n\t"
1375 "aesmc.8 q12, q12\n\t"
1376 "aese.8 q12, q5\n\t"
1377 "aesmc.8 q12, q12\n\t"
1378 "aese.8 q12, q6\n\t"
1379 "aesmc.8 q12, q12\n\t"
1380 "aese.8 q12, q7\n\t"
1381 "aesmc.8 q12, q12\n\t"
1382 "aese.8 q12, q8\n\t"
1383 "aesmc.8 q12, q12\n\t"
1384 "vld1.32 {q10}, [%[key]]!\n\t"
1385 "aese.8 q12, q9\n\t"
1386 "aesmc.8 q12, q12\n\t"
1387 "vld1.32 {q11}, [%[key]]!\n\t"
1388 "aese.8 q12, q10\n\t"
1389 "aesmc.8 q12, q12\n\t"
1390 "vld1.32 {q10}, [%[key]]!\n\t"
1391 "aese.8 q12, q11\n\t"
1392 "veor.32 q12, q12, q10\n\t"
1393 "sub %[key], %[key], #48\n\t"
1394 "vst1.8 {q12}, [%[out]]!\n\t"
1395 "\n"
1396 "L_aes_encrypt_blocks_arm32_crypto_192_done_%=:\n\t"
1397#endif /* !NO_AES_192 */
1398 "b L_aes_encrypt_blocks_arm32_crypto_done_%=\n\t"
1399 /* AES_ECB_256 */
1400 "\n"
1401 "L_aes_encrypt_blocks_arm32_crypto_start_256_%=:\n\t"
1402#ifndef NO_AES_256
1403 "vld1.32 {q8-q9}, [%[key]]!\n\t"
1404 "cmp %[sz], #1\n\t"
1405 "beq L_aes_encrypt_blocks_arm32_crypto_256_start_1_%=\n\t"
1406 "\n"
1407 "L_aes_encrypt_blocks_arm32_crypto_256_start_4_%=:\n\t"
1408 "cmp %[sz], #4\n\t"
1409 "blt L_aes_encrypt_blocks_arm32_crypto_256_start_2_%=\n\t"
1410 "vldm.8 %[in]!, {q12-q15}\n\t"
1411 "aese.8 q12, q0\n\t"
1412 "aesmc.8 q12, q12\n\t"
1413 "aese.8 q13, q0\n\t"
1414 "aesmc.8 q13, q13\n\t"
1415 "aese.8 q14, q0\n\t"
1416 "aesmc.8 q14, q14\n\t"
1417 "aese.8 q15, q0\n\t"
1418 "aesmc.8 q15, q15\n\t"
1419 "aese.8 q12, q1\n\t"
1420 "aesmc.8 q12, q12\n\t"
1421 "aese.8 q13, q1\n\t"
1422 "aesmc.8 q13, q13\n\t"
1423 "aese.8 q14, q1\n\t"
1424 "aesmc.8 q14, q14\n\t"
1425 "aese.8 q15, q1\n\t"
1426 "aesmc.8 q15, q15\n\t"
1427 "aese.8 q12, q2\n\t"
1428 "aesmc.8 q12, q12\n\t"
1429 "aese.8 q13, q2\n\t"
1430 "aesmc.8 q13, q13\n\t"
1431 "aese.8 q14, q2\n\t"
1432 "aesmc.8 q14, q14\n\t"
1433 "aese.8 q15, q2\n\t"
1434 "aesmc.8 q15, q15\n\t"
1435 "aese.8 q12, q3\n\t"
1436 "aesmc.8 q12, q12\n\t"
1437 "aese.8 q13, q3\n\t"
1438 "aesmc.8 q13, q13\n\t"
1439 "aese.8 q14, q3\n\t"
1440 "aesmc.8 q14, q14\n\t"
1441 "aese.8 q15, q3\n\t"
1442 "aesmc.8 q15, q15\n\t"
1443 "aese.8 q12, q4\n\t"
1444 "aesmc.8 q12, q12\n\t"
1445 "aese.8 q13, q4\n\t"
1446 "aesmc.8 q13, q13\n\t"
1447 "aese.8 q14, q4\n\t"
1448 "aesmc.8 q14, q14\n\t"
1449 "aese.8 q15, q4\n\t"
1450 "aesmc.8 q15, q15\n\t"
1451 "aese.8 q12, q5\n\t"
1452 "aesmc.8 q12, q12\n\t"
1453 "aese.8 q13, q5\n\t"
1454 "aesmc.8 q13, q13\n\t"
1455 "aese.8 q14, q5\n\t"
1456 "aesmc.8 q14, q14\n\t"
1457 "aese.8 q15, q5\n\t"
1458 "aesmc.8 q15, q15\n\t"
1459 "aese.8 q12, q6\n\t"
1460 "aesmc.8 q12, q12\n\t"
1461 "aese.8 q13, q6\n\t"
1462 "aesmc.8 q13, q13\n\t"
1463 "aese.8 q14, q6\n\t"
1464 "aesmc.8 q14, q14\n\t"
1465 "aese.8 q15, q6\n\t"
1466 "aesmc.8 q15, q15\n\t"
1467 "aese.8 q12, q7\n\t"
1468 "aesmc.8 q12, q12\n\t"
1469 "aese.8 q13, q7\n\t"
1470 "aesmc.8 q13, q13\n\t"
1471 "aese.8 q14, q7\n\t"
1472 "aesmc.8 q14, q14\n\t"
1473 "aese.8 q15, q7\n\t"
1474 "aesmc.8 q15, q15\n\t"
1475 "aese.8 q12, q8\n\t"
1476 "aesmc.8 q12, q12\n\t"
1477 "aese.8 q13, q8\n\t"
1478 "aesmc.8 q13, q13\n\t"
1479 "aese.8 q14, q8\n\t"
1480 "aesmc.8 q14, q14\n\t"
1481 "aese.8 q15, q8\n\t"
1482 "aesmc.8 q15, q15\n\t"
1483 "vld1.32 {q10}, [%[key]]!\n\t"
1484 "aese.8 q12, q9\n\t"
1485 "aesmc.8 q12, q12\n\t"
1486 "aese.8 q13, q9\n\t"
1487 "aesmc.8 q13, q13\n\t"
1488 "aese.8 q14, q9\n\t"
1489 "aesmc.8 q14, q14\n\t"
1490 "aese.8 q15, q9\n\t"
1491 "aesmc.8 q15, q15\n\t"
1492 "vld1.32 {q11}, [%[key]]!\n\t"
1493 "aese.8 q12, q10\n\t"
1494 "aesmc.8 q12, q12\n\t"
1495 "aese.8 q13, q10\n\t"
1496 "aesmc.8 q13, q13\n\t"
1497 "aese.8 q14, q10\n\t"
1498 "aesmc.8 q14, q14\n\t"
1499 "aese.8 q15, q10\n\t"
1500 "aesmc.8 q15, q15\n\t"
1501 "vld1.32 {q10}, [%[key]]!\n\t"
1502 "aese.8 q12, q11\n\t"
1503 "aesmc.8 q12, q12\n\t"
1504 "aese.8 q13, q11\n\t"
1505 "aesmc.8 q13, q13\n\t"
1506 "aese.8 q14, q11\n\t"
1507 "aesmc.8 q14, q14\n\t"
1508 "aese.8 q15, q11\n\t"
1509 "aesmc.8 q15, q15\n\t"
1510 "vld1.32 {q11}, [%[key]]!\n\t"
1511 "aese.8 q12, q10\n\t"
1512 "aesmc.8 q12, q12\n\t"
1513 "aese.8 q13, q10\n\t"
1514 "aesmc.8 q13, q13\n\t"
1515 "aese.8 q14, q10\n\t"
1516 "aesmc.8 q14, q14\n\t"
1517 "aese.8 q15, q10\n\t"
1518 "aesmc.8 q15, q15\n\t"
1519 "vld1.32 {q10}, [%[key]]!\n\t"
1520 "aese.8 q12, q11\n\t"
1521 "veor.32 q12, q12, q10\n\t"
1522 "aese.8 q13, q11\n\t"
1523 "veor.32 q13, q13, q10\n\t"
1524 "aese.8 q14, q11\n\t"
1525 "veor.32 q14, q14, q10\n\t"
1526 "aese.8 q15, q11\n\t"
1527 "veor.32 q15, q15, q10\n\t"
1528 "sub %[key], %[key], #0x50\n\t"
1529 "sub %[sz], %[sz], #4\n\t"
1530 "vstm.8 %[out]!, {q12-q15}\n\t"
1531 "cmp %[sz], #4\n\t"
1532 "bge L_aes_encrypt_blocks_arm32_crypto_256_start_4_%=\n\t"
1533 "\n"
1534 "L_aes_encrypt_blocks_arm32_crypto_256_start_2_%=:\n\t"
1535 "cmp %[sz], #2\n\t"
1536 "blt L_aes_encrypt_blocks_arm32_crypto_256_start_1_%=\n\t"
1537 "vld1.8 {q12-q13}, [%[in]]!\n\t"
1538 "aese.8 q12, q0\n\t"
1539 "aesmc.8 q12, q12\n\t"
1540 "aese.8 q13, q0\n\t"
1541 "aesmc.8 q13, q13\n\t"
1542 "aese.8 q12, q1\n\t"
1543 "aesmc.8 q12, q12\n\t"
1544 "aese.8 q13, q1\n\t"
1545 "aesmc.8 q13, q13\n\t"
1546 "aese.8 q12, q2\n\t"
1547 "aesmc.8 q12, q12\n\t"
1548 "aese.8 q13, q2\n\t"
1549 "aesmc.8 q13, q13\n\t"
1550 "aese.8 q12, q3\n\t"
1551 "aesmc.8 q12, q12\n\t"
1552 "aese.8 q13, q3\n\t"
1553 "aesmc.8 q13, q13\n\t"
1554 "aese.8 q12, q4\n\t"
1555 "aesmc.8 q12, q12\n\t"
1556 "aese.8 q13, q4\n\t"
1557 "aesmc.8 q13, q13\n\t"
1558 "aese.8 q12, q5\n\t"
1559 "aesmc.8 q12, q12\n\t"
1560 "aese.8 q13, q5\n\t"
1561 "aesmc.8 q13, q13\n\t"
1562 "aese.8 q12, q6\n\t"
1563 "aesmc.8 q12, q12\n\t"
1564 "aese.8 q13, q6\n\t"
1565 "aesmc.8 q13, q13\n\t"
1566 "aese.8 q12, q7\n\t"
1567 "aesmc.8 q12, q12\n\t"
1568 "aese.8 q13, q7\n\t"
1569 "aesmc.8 q13, q13\n\t"
1570 "aese.8 q12, q8\n\t"
1571 "aesmc.8 q12, q12\n\t"
1572 "aese.8 q13, q8\n\t"
1573 "aesmc.8 q13, q13\n\t"
1574 "vld1.32 {q10}, [%[key]]!\n\t"
1575 "aese.8 q12, q9\n\t"
1576 "aesmc.8 q12, q12\n\t"
1577 "aese.8 q13, q9\n\t"
1578 "aesmc.8 q13, q13\n\t"
1579 "vld1.32 {q11}, [%[key]]!\n\t"
1580 "aese.8 q12, q10\n\t"
1581 "aesmc.8 q12, q12\n\t"
1582 "aese.8 q13, q10\n\t"
1583 "aesmc.8 q13, q13\n\t"
1584 "vld1.32 {q10}, [%[key]]!\n\t"
1585 "aese.8 q12, q11\n\t"
1586 "aesmc.8 q12, q12\n\t"
1587 "aese.8 q13, q11\n\t"
1588 "aesmc.8 q13, q13\n\t"
1589 "vld1.32 {q11}, [%[key]]!\n\t"
1590 "aese.8 q12, q10\n\t"
1591 "aesmc.8 q12, q12\n\t"
1592 "aese.8 q13, q10\n\t"
1593 "aesmc.8 q13, q13\n\t"
1594 "vld1.32 {q10}, [%[key]]!\n\t"
1595 "aese.8 q12, q11\n\t"
1596 "veor.32 q12, q12, q10\n\t"
1597 "aese.8 q13, q11\n\t"
1598 "veor.32 q13, q13, q10\n\t"
1599 "sub %[key], %[key], #0x50\n\t"
1600 "sub %[sz], %[sz], #2\n\t"
1601 "vst1.8 {q12-q13}, [%[out]]!\n\t"
1602 "\n"
1603 "L_aes_encrypt_blocks_arm32_crypto_256_start_1_%=:\n\t"
1604 "cmp %[sz], #0\n\t"
1605 "beq L_aes_encrypt_blocks_arm32_crypto_256_done_%=\n\t"
1606 "vld1.8 {q12}, [%[in]]!\n\t"
1607 "aese.8 q12, q0\n\t"
1608 "aesmc.8 q12, q12\n\t"
1609 "aese.8 q12, q1\n\t"
1610 "aesmc.8 q12, q12\n\t"
1611 "aese.8 q12, q2\n\t"
1612 "aesmc.8 q12, q12\n\t"
1613 "aese.8 q12, q3\n\t"
1614 "aesmc.8 q12, q12\n\t"
1615 "aese.8 q12, q4\n\t"
1616 "aesmc.8 q12, q12\n\t"
1617 "aese.8 q12, q5\n\t"
1618 "aesmc.8 q12, q12\n\t"
1619 "aese.8 q12, q6\n\t"
1620 "aesmc.8 q12, q12\n\t"
1621 "aese.8 q12, q7\n\t"
1622 "aesmc.8 q12, q12\n\t"
1623 "aese.8 q12, q8\n\t"
1624 "aesmc.8 q12, q12\n\t"
1625 "vld1.32 {q10}, [%[key]]!\n\t"
1626 "aese.8 q12, q9\n\t"
1627 "aesmc.8 q12, q12\n\t"
1628 "vld1.32 {q11}, [%[key]]!\n\t"
1629 "aese.8 q12, q10\n\t"
1630 "aesmc.8 q12, q12\n\t"
1631 "vld1.32 {q10}, [%[key]]!\n\t"
1632 "aese.8 q12, q11\n\t"
1633 "aesmc.8 q12, q12\n\t"
1634 "vld1.32 {q11}, [%[key]]!\n\t"
1635 "aese.8 q12, q10\n\t"
1636 "aesmc.8 q12, q12\n\t"
1637 "vld1.32 {q10}, [%[key]]!\n\t"
1638 "aese.8 q12, q11\n\t"
1639 "veor.32 q12, q12, q10\n\t"
1640 "sub %[key], %[key], #0x50\n\t"
1641 "vst1.8 {q12}, [%[out]]!\n\t"
1642 "\n"
1643 "L_aes_encrypt_blocks_arm32_crypto_256_done_%=:\n\t"
1644#endif /* !NO_AES_256 */
1645 "b L_aes_encrypt_blocks_arm32_crypto_done_%=\n\t"
1646 /* AES_ECB_128 */
1647 "\n"
1648 "L_aes_encrypt_blocks_arm32_crypto_start_128_%=:\n\t"
1649#ifndef NO_AES_128
1650 "vldm.32 %[key]!, {q8-q10}\n\t"
1651 "cmp %[sz], #1\n\t"
1652 "beq L_aes_encrypt_blocks_arm32_crypto_128_start_1_%=\n\t"
1653 "\n"
1654 "L_aes_encrypt_blocks_arm32_crypto_128_start_4_%=:\n\t"
1655 "cmp %[sz], #4\n\t"
1656 "blt L_aes_encrypt_blocks_arm32_crypto_128_start_2_%=\n\t"
1657 "vldm.8 %[in]!, {q12-q15}\n\t"
1658 "aese.8 q12, q0\n\t"
1659 "aesmc.8 q12, q12\n\t"
1660 "aese.8 q13, q0\n\t"
1661 "aesmc.8 q13, q13\n\t"
1662 "aese.8 q14, q0\n\t"
1663 "aesmc.8 q14, q14\n\t"
1664 "aese.8 q15, q0\n\t"
1665 "aesmc.8 q15, q15\n\t"
1666 "aese.8 q12, q1\n\t"
1667 "aesmc.8 q12, q12\n\t"
1668 "aese.8 q13, q1\n\t"
1669 "aesmc.8 q13, q13\n\t"
1670 "aese.8 q14, q1\n\t"
1671 "aesmc.8 q14, q14\n\t"
1672 "aese.8 q15, q1\n\t"
1673 "aesmc.8 q15, q15\n\t"
1674 "aese.8 q12, q2\n\t"
1675 "aesmc.8 q12, q12\n\t"
1676 "aese.8 q13, q2\n\t"
1677 "aesmc.8 q13, q13\n\t"
1678 "aese.8 q14, q2\n\t"
1679 "aesmc.8 q14, q14\n\t"
1680 "aese.8 q15, q2\n\t"
1681 "aesmc.8 q15, q15\n\t"
1682 "aese.8 q12, q3\n\t"
1683 "aesmc.8 q12, q12\n\t"
1684 "aese.8 q13, q3\n\t"
1685 "aesmc.8 q13, q13\n\t"
1686 "aese.8 q14, q3\n\t"
1687 "aesmc.8 q14, q14\n\t"
1688 "aese.8 q15, q3\n\t"
1689 "aesmc.8 q15, q15\n\t"
1690 "aese.8 q12, q4\n\t"
1691 "aesmc.8 q12, q12\n\t"
1692 "aese.8 q13, q4\n\t"
1693 "aesmc.8 q13, q13\n\t"
1694 "aese.8 q14, q4\n\t"
1695 "aesmc.8 q14, q14\n\t"
1696 "aese.8 q15, q4\n\t"
1697 "aesmc.8 q15, q15\n\t"
1698 "aese.8 q12, q5\n\t"
1699 "aesmc.8 q12, q12\n\t"
1700 "aese.8 q13, q5\n\t"
1701 "aesmc.8 q13, q13\n\t"
1702 "aese.8 q14, q5\n\t"
1703 "aesmc.8 q14, q14\n\t"
1704 "aese.8 q15, q5\n\t"
1705 "aesmc.8 q15, q15\n\t"
1706 "aese.8 q12, q6\n\t"
1707 "aesmc.8 q12, q12\n\t"
1708 "aese.8 q13, q6\n\t"
1709 "aesmc.8 q13, q13\n\t"
1710 "aese.8 q14, q6\n\t"
1711 "aesmc.8 q14, q14\n\t"
1712 "aese.8 q15, q6\n\t"
1713 "aesmc.8 q15, q15\n\t"
1714 "aese.8 q12, q7\n\t"
1715 "aesmc.8 q12, q12\n\t"
1716 "aese.8 q13, q7\n\t"
1717 "aesmc.8 q13, q13\n\t"
1718 "aese.8 q14, q7\n\t"
1719 "aesmc.8 q14, q14\n\t"
1720 "aese.8 q15, q7\n\t"
1721 "aesmc.8 q15, q15\n\t"
1722 "aese.8 q12, q8\n\t"
1723 "aesmc.8 q12, q12\n\t"
1724 "aese.8 q13, q8\n\t"
1725 "aesmc.8 q13, q13\n\t"
1726 "aese.8 q14, q8\n\t"
1727 "aesmc.8 q14, q14\n\t"
1728 "aese.8 q15, q8\n\t"
1729 "aesmc.8 q15, q15\n\t"
1730 "aese.8 q12, q9\n\t"
1731 "veor.32 q12, q12, q10\n\t"
1732 "aese.8 q13, q9\n\t"
1733 "veor.32 q13, q13, q10\n\t"
1734 "aese.8 q14, q9\n\t"
1735 "veor.32 q14, q14, q10\n\t"
1736 "aese.8 q15, q9\n\t"
1737 "veor.32 q15, q15, q10\n\t"
1738 "sub %[sz], %[sz], #4\n\t"
1739 "vstm.8 %[out]!, {q12-q15}\n\t"
1740 "cmp %[sz], #4\n\t"
1741 "bge L_aes_encrypt_blocks_arm32_crypto_128_start_4_%=\n\t"
1742 "\n"
1743 "L_aes_encrypt_blocks_arm32_crypto_128_start_2_%=:\n\t"
1744 "cmp %[sz], #2\n\t"
1745 "blt L_aes_encrypt_blocks_arm32_crypto_128_start_1_%=\n\t"
1746 "vld1.8 {q12-q13}, [%[in]]!\n\t"
1747 "aese.8 q12, q0\n\t"
1748 "aesmc.8 q12, q12\n\t"
1749 "aese.8 q13, q0\n\t"
1750 "aesmc.8 q13, q13\n\t"
1751 "aese.8 q12, q1\n\t"
1752 "aesmc.8 q12, q12\n\t"
1753 "aese.8 q13, q1\n\t"
1754 "aesmc.8 q13, q13\n\t"
1755 "aese.8 q12, q2\n\t"
1756 "aesmc.8 q12, q12\n\t"
1757 "aese.8 q13, q2\n\t"
1758 "aesmc.8 q13, q13\n\t"
1759 "aese.8 q12, q3\n\t"
1760 "aesmc.8 q12, q12\n\t"
1761 "aese.8 q13, q3\n\t"
1762 "aesmc.8 q13, q13\n\t"
1763 "aese.8 q12, q4\n\t"
1764 "aesmc.8 q12, q12\n\t"
1765 "aese.8 q13, q4\n\t"
1766 "aesmc.8 q13, q13\n\t"
1767 "aese.8 q12, q5\n\t"
1768 "aesmc.8 q12, q12\n\t"
1769 "aese.8 q13, q5\n\t"
1770 "aesmc.8 q13, q13\n\t"
1771 "aese.8 q12, q6\n\t"
1772 "aesmc.8 q12, q12\n\t"
1773 "aese.8 q13, q6\n\t"
1774 "aesmc.8 q13, q13\n\t"
1775 "aese.8 q12, q7\n\t"
1776 "aesmc.8 q12, q12\n\t"
1777 "aese.8 q13, q7\n\t"
1778 "aesmc.8 q13, q13\n\t"
1779 "aese.8 q12, q8\n\t"
1780 "aesmc.8 q12, q12\n\t"
1781 "aese.8 q13, q8\n\t"
1782 "aesmc.8 q13, q13\n\t"
1783 "aese.8 q12, q9\n\t"
1784 "veor.32 q12, q12, q10\n\t"
1785 "aese.8 q13, q9\n\t"
1786 "veor.32 q13, q13, q10\n\t"
1787 "sub %[sz], %[sz], #2\n\t"
1788 "vst1.8 {q12-q13}, [%[out]]!\n\t"
1789 "\n"
1790 "L_aes_encrypt_blocks_arm32_crypto_128_start_1_%=:\n\t"
1791 "cmp %[sz], #0\n\t"
1792 "beq L_aes_encrypt_blocks_arm32_crypto_128_done_%=\n\t"
1793 "vld1.8 {q12}, [%[in]]!\n\t"
1794 "aese.8 q12, q0\n\t"
1795 "aesmc.8 q12, q12\n\t"
1796 "aese.8 q12, q1\n\t"
1797 "aesmc.8 q12, q12\n\t"
1798 "aese.8 q12, q2\n\t"
1799 "aesmc.8 q12, q12\n\t"
1800 "aese.8 q12, q3\n\t"
1801 "aesmc.8 q12, q12\n\t"
1802 "aese.8 q12, q4\n\t"
1803 "aesmc.8 q12, q12\n\t"
1804 "aese.8 q12, q5\n\t"
1805 "aesmc.8 q12, q12\n\t"
1806 "aese.8 q12, q6\n\t"
1807 "aesmc.8 q12, q12\n\t"
1808 "aese.8 q12, q7\n\t"
1809 "aesmc.8 q12, q12\n\t"
1810 "aese.8 q12, q8\n\t"
1811 "aesmc.8 q12, q12\n\t"
1812 "aese.8 q12, q9\n\t"
1813 "veor.32 q12, q12, q10\n\t"
1814 "vst1.8 {q12}, [%[out]]!\n\t"
1815 "\n"
1816 "L_aes_encrypt_blocks_arm32_crypto_128_done_%=:\n\t"
1817#endif /* !NO_AES_128 */
1818 "\n"
1819 "L_aes_encrypt_blocks_arm32_crypto_done_%=:\n\t"
1820 "pop {%[nr]}\n\t"
1821#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
1822 : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [key] "+r" (key),
1823 [nr] "+r" (nr)
1824 :
1825#else
1826 :
1827 : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [key] "r" (key),
1828 [nr] "r" (nr)
1829#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1830 : "memory", "cc", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8",
1831 "q9", "q10", "q11", "q12", "q13", "q14", "q15"
1832 );
1833}
1834
1835#ifdef HAVE_AES_DECRYPT
1836#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
1837WC_OMIT_FRAME_POINTER void AES_decrypt_blocks_AARCH32(const byte* in_p,
1838 byte* out_p, word32 sz_p, byte* key_p, int nr_p)
1839#else
1840WC_OMIT_FRAME_POINTER void AES_decrypt_blocks_AARCH32(const byte* in, byte* out,
1841 word32 sz, byte* key, int nr)
1842#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1843{
1844#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
1845 register const byte* in __asm__ ("r0") = (const byte*)in_p;
1846 register byte* out __asm__ ("r1") = (byte*)out_p;
1847 register word32 sz __asm__ ("r2") = (word32)sz_p;
1848 register byte* key __asm__ ("r3") = (byte*)key_p;
1849 register int nr __asm__ ("r12") = (int)nr_p;
1850#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1851
1852 __asm__ __volatile__ (
1853 "push {%[nr]}\n\t"
1854 "ldr r12, [sp]\n\t"
1855 "vldm.32 %[key]!, {q0-q7}\n\t"
1856 "lsr %[sz], %[sz], #4\n\t"
1857 "cmp r12, #12\n\t"
1858 "blt L_aes_decrypt_blocks_arm32_crypto_start_128_%=\n\t"
1859 "bgt L_aes_decrypt_blocks_arm32_crypto_start_256_%=\n\t"
1860 /* AES_ECB_192 */
1861#ifndef NO_AES_192
1862 "vld1.32 {q8-q9}, [%[key]]!\n\t"
1863 "cmp %[sz], #1\n\t"
1864 "beq L_aes_decrypt_blocks_arm32_crypto_192_start_1_%=\n\t"
1865 "cmp %[sz], #4\n\t"
1866 "blt L_aes_decrypt_blocks_arm32_crypto_192_start_2_%=\n\t"
1867 "\n"
1868 "L_aes_decrypt_blocks_arm32_crypto_192_start_4_%=:\n\t"
1869 "vldm.8 %[in]!, {q12-q15}\n\t"
1870 "aesd.8 q12, q0\n\t"
1871 "aesimc.8 q12, q12\n\t"
1872 "aesd.8 q13, q0\n\t"
1873 "aesimc.8 q13, q13\n\t"
1874 "aesd.8 q14, q0\n\t"
1875 "aesimc.8 q14, q14\n\t"
1876 "aesd.8 q15, q0\n\t"
1877 "aesimc.8 q15, q15\n\t"
1878 "aesd.8 q12, q1\n\t"
1879 "aesimc.8 q12, q12\n\t"
1880 "aesd.8 q13, q1\n\t"
1881 "aesimc.8 q13, q13\n\t"
1882 "aesd.8 q14, q1\n\t"
1883 "aesimc.8 q14, q14\n\t"
1884 "aesd.8 q15, q1\n\t"
1885 "aesimc.8 q15, q15\n\t"
1886 "aesd.8 q12, q2\n\t"
1887 "aesimc.8 q12, q12\n\t"
1888 "aesd.8 q13, q2\n\t"
1889 "aesimc.8 q13, q13\n\t"
1890 "aesd.8 q14, q2\n\t"
1891 "aesimc.8 q14, q14\n\t"
1892 "aesd.8 q15, q2\n\t"
1893 "aesimc.8 q15, q15\n\t"
1894 "aesd.8 q12, q3\n\t"
1895 "aesimc.8 q12, q12\n\t"
1896 "aesd.8 q13, q3\n\t"
1897 "aesimc.8 q13, q13\n\t"
1898 "aesd.8 q14, q3\n\t"
1899 "aesimc.8 q14, q14\n\t"
1900 "aesd.8 q15, q3\n\t"
1901 "aesimc.8 q15, q15\n\t"
1902 "aesd.8 q12, q4\n\t"
1903 "aesimc.8 q12, q12\n\t"
1904 "aesd.8 q13, q4\n\t"
1905 "aesimc.8 q13, q13\n\t"
1906 "aesd.8 q14, q4\n\t"
1907 "aesimc.8 q14, q14\n\t"
1908 "aesd.8 q15, q4\n\t"
1909 "aesimc.8 q15, q15\n\t"
1910 "aesd.8 q12, q5\n\t"
1911 "aesimc.8 q12, q12\n\t"
1912 "aesd.8 q13, q5\n\t"
1913 "aesimc.8 q13, q13\n\t"
1914 "aesd.8 q14, q5\n\t"
1915 "aesimc.8 q14, q14\n\t"
1916 "aesd.8 q15, q5\n\t"
1917 "aesimc.8 q15, q15\n\t"
1918 "aesd.8 q12, q6\n\t"
1919 "aesimc.8 q12, q12\n\t"
1920 "aesd.8 q13, q6\n\t"
1921 "aesimc.8 q13, q13\n\t"
1922 "aesd.8 q14, q6\n\t"
1923 "aesimc.8 q14, q14\n\t"
1924 "aesd.8 q15, q6\n\t"
1925 "aesimc.8 q15, q15\n\t"
1926 "aesd.8 q12, q7\n\t"
1927 "aesimc.8 q12, q12\n\t"
1928 "aesd.8 q13, q7\n\t"
1929 "aesimc.8 q13, q13\n\t"
1930 "aesd.8 q14, q7\n\t"
1931 "aesimc.8 q14, q14\n\t"
1932 "aesd.8 q15, q7\n\t"
1933 "aesimc.8 q15, q15\n\t"
1934 "aesd.8 q12, q8\n\t"
1935 "aesimc.8 q12, q12\n\t"
1936 "aesd.8 q13, q8\n\t"
1937 "aesimc.8 q13, q13\n\t"
1938 "aesd.8 q14, q8\n\t"
1939 "aesimc.8 q14, q14\n\t"
1940 "aesd.8 q15, q8\n\t"
1941 "aesimc.8 q15, q15\n\t"
1942 "vld1.32 {q10}, [%[key]]!\n\t"
1943 "aesd.8 q12, q9\n\t"
1944 "aesimc.8 q12, q12\n\t"
1945 "aesd.8 q13, q9\n\t"
1946 "aesimc.8 q13, q13\n\t"
1947 "aesd.8 q14, q9\n\t"
1948 "aesimc.8 q14, q14\n\t"
1949 "aesd.8 q15, q9\n\t"
1950 "aesimc.8 q15, q15\n\t"
1951 "vld1.32 {q11}, [%[key]]!\n\t"
1952 "aesd.8 q12, q10\n\t"
1953 "aesimc.8 q12, q12\n\t"
1954 "aesd.8 q13, q10\n\t"
1955 "aesimc.8 q13, q13\n\t"
1956 "aesd.8 q14, q10\n\t"
1957 "aesimc.8 q14, q14\n\t"
1958 "aesd.8 q15, q10\n\t"
1959 "aesimc.8 q15, q15\n\t"
1960 "vld1.32 {q10}, [%[key]]!\n\t"
1961 "aesd.8 q12, q11\n\t"
1962 "veor.32 q12, q12, q10\n\t"
1963 "aesd.8 q13, q11\n\t"
1964 "veor.32 q13, q13, q10\n\t"
1965 "aesd.8 q14, q11\n\t"
1966 "veor.32 q14, q14, q10\n\t"
1967 "aesd.8 q15, q11\n\t"
1968 "veor.32 q15, q15, q10\n\t"
1969 "sub %[key], %[key], #48\n\t"
1970 "sub %[sz], %[sz], #4\n\t"
1971 "vstm.8 %[out]!, {q12-q15}\n\t"
1972 "cmp %[sz], #4\n\t"
1973 "bge L_aes_decrypt_blocks_arm32_crypto_192_start_4_%=\n\t"
1974 "\n"
1975 "L_aes_decrypt_blocks_arm32_crypto_192_start_2_%=:\n\t"
1976 "cmp %[sz], #2\n\t"
1977 "blt L_aes_decrypt_blocks_arm32_crypto_192_start_1_%=\n\t"
1978 "vld1.8 {q12-q13}, [%[in]]!\n\t"
1979 "aesd.8 q12, q0\n\t"
1980 "aesimc.8 q12, q12\n\t"
1981 "aesd.8 q13, q0\n\t"
1982 "aesimc.8 q13, q13\n\t"
1983 "aesd.8 q12, q1\n\t"
1984 "aesimc.8 q12, q12\n\t"
1985 "aesd.8 q13, q1\n\t"
1986 "aesimc.8 q13, q13\n\t"
1987 "aesd.8 q12, q2\n\t"
1988 "aesimc.8 q12, q12\n\t"
1989 "aesd.8 q13, q2\n\t"
1990 "aesimc.8 q13, q13\n\t"
1991 "aesd.8 q12, q3\n\t"
1992 "aesimc.8 q12, q12\n\t"
1993 "aesd.8 q13, q3\n\t"
1994 "aesimc.8 q13, q13\n\t"
1995 "aesd.8 q12, q4\n\t"
1996 "aesimc.8 q12, q12\n\t"
1997 "aesd.8 q13, q4\n\t"
1998 "aesimc.8 q13, q13\n\t"
1999 "aesd.8 q12, q5\n\t"
2000 "aesimc.8 q12, q12\n\t"
2001 "aesd.8 q13, q5\n\t"
2002 "aesimc.8 q13, q13\n\t"
2003 "aesd.8 q12, q6\n\t"
2004 "aesimc.8 q12, q12\n\t"
2005 "aesd.8 q13, q6\n\t"
2006 "aesimc.8 q13, q13\n\t"
2007 "aesd.8 q12, q7\n\t"
2008 "aesimc.8 q12, q12\n\t"
2009 "aesd.8 q13, q7\n\t"
2010 "aesimc.8 q13, q13\n\t"
2011 "aesd.8 q12, q8\n\t"
2012 "aesimc.8 q12, q12\n\t"
2013 "aesd.8 q13, q8\n\t"
2014 "aesimc.8 q13, q13\n\t"
2015 "vld1.32 {q10}, [%[key]]!\n\t"
2016 "aesd.8 q12, q9\n\t"
2017 "aesimc.8 q12, q12\n\t"
2018 "aesd.8 q13, q9\n\t"
2019 "aesimc.8 q13, q13\n\t"
2020 "vld1.32 {q11}, [%[key]]!\n\t"
2021 "aesd.8 q12, q10\n\t"
2022 "aesimc.8 q12, q12\n\t"
2023 "aesd.8 q13, q10\n\t"
2024 "aesimc.8 q13, q13\n\t"
2025 "vld1.32 {q10}, [%[key]]!\n\t"
2026 "aesd.8 q12, q11\n\t"
2027 "veor.32 q12, q12, q10\n\t"
2028 "aesd.8 q13, q11\n\t"
2029 "veor.32 q13, q13, q10\n\t"
2030 "sub %[key], %[key], #48\n\t"
2031 "sub %[sz], %[sz], #2\n\t"
2032 "vst1.8 {q12-q13}, [%[out]]!\n\t"
2033 "\n"
2034 "L_aes_decrypt_blocks_arm32_crypto_192_start_1_%=:\n\t"
2035 "cmp %[sz], #0\n\t"
2036 "beq L_aes_decrypt_blocks_arm32_crypto_192_done_%=\n\t"
2037 "vld1.8 {q12}, [%[in]]!\n\t"
2038 "aesd.8 q12, q0\n\t"
2039 "aesimc.8 q12, q12\n\t"
2040 "aesd.8 q12, q1\n\t"
2041 "aesimc.8 q12, q12\n\t"
2042 "aesd.8 q12, q2\n\t"
2043 "aesimc.8 q12, q12\n\t"
2044 "aesd.8 q12, q3\n\t"
2045 "aesimc.8 q12, q12\n\t"
2046 "aesd.8 q12, q4\n\t"
2047 "aesimc.8 q12, q12\n\t"
2048 "aesd.8 q12, q5\n\t"
2049 "aesimc.8 q12, q12\n\t"
2050 "aesd.8 q12, q6\n\t"
2051 "aesimc.8 q12, q12\n\t"
2052 "aesd.8 q12, q7\n\t"
2053 "aesimc.8 q12, q12\n\t"
2054 "aesd.8 q12, q8\n\t"
2055 "aesimc.8 q12, q12\n\t"
2056 "vld1.32 {q10}, [%[key]]!\n\t"
2057 "aesd.8 q12, q9\n\t"
2058 "aesimc.8 q12, q12\n\t"
2059 "vld1.32 {q11}, [%[key]]!\n\t"
2060 "aesd.8 q12, q10\n\t"
2061 "aesimc.8 q12, q12\n\t"
2062 "vld1.32 {q10}, [%[key]]!\n\t"
2063 "aesd.8 q12, q11\n\t"
2064 "veor.32 q12, q12, q10\n\t"
2065 "sub %[key], %[key], #48\n\t"
2066 "vst1.8 {q12}, [%[out]]!\n\t"
2067 "\n"
2068 "L_aes_decrypt_blocks_arm32_crypto_192_done_%=:\n\t"
2069#endif /* !NO_AES_192 */
2070 "b L_aes_decrypt_blocks_arm32_crypto_done_%=\n\t"
2071 /* AES_ECB_256 */
2072 "\n"
2073 "L_aes_decrypt_blocks_arm32_crypto_start_256_%=:\n\t"
2074#ifndef NO_AES_256
2075 "vld1.32 {q8-q9}, [%[key]]!\n\t"
2076 "cmp %[sz], #1\n\t"
2077 "beq L_aes_decrypt_blocks_arm32_crypto_256_start_1_%=\n\t"
2078 "cmp %[sz], #4\n\t"
2079 "blt L_aes_decrypt_blocks_arm32_crypto_256_start_2_%=\n\t"
2080 "\n"
2081 "L_aes_decrypt_blocks_arm32_crypto_256_start_4_%=:\n\t"
2082 "vldm.8 %[in]!, {q12-q15}\n\t"
2083 "aesd.8 q12, q0\n\t"
2084 "aesimc.8 q12, q12\n\t"
2085 "aesd.8 q13, q0\n\t"
2086 "aesimc.8 q13, q13\n\t"
2087 "aesd.8 q14, q0\n\t"
2088 "aesimc.8 q14, q14\n\t"
2089 "aesd.8 q15, q0\n\t"
2090 "aesimc.8 q15, q15\n\t"
2091 "aesd.8 q12, q1\n\t"
2092 "aesimc.8 q12, q12\n\t"
2093 "aesd.8 q13, q1\n\t"
2094 "aesimc.8 q13, q13\n\t"
2095 "aesd.8 q14, q1\n\t"
2096 "aesimc.8 q14, q14\n\t"
2097 "aesd.8 q15, q1\n\t"
2098 "aesimc.8 q15, q15\n\t"
2099 "aesd.8 q12, q2\n\t"
2100 "aesimc.8 q12, q12\n\t"
2101 "aesd.8 q13, q2\n\t"
2102 "aesimc.8 q13, q13\n\t"
2103 "aesd.8 q14, q2\n\t"
2104 "aesimc.8 q14, q14\n\t"
2105 "aesd.8 q15, q2\n\t"
2106 "aesimc.8 q15, q15\n\t"
2107 "aesd.8 q12, q3\n\t"
2108 "aesimc.8 q12, q12\n\t"
2109 "aesd.8 q13, q3\n\t"
2110 "aesimc.8 q13, q13\n\t"
2111 "aesd.8 q14, q3\n\t"
2112 "aesimc.8 q14, q14\n\t"
2113 "aesd.8 q15, q3\n\t"
2114 "aesimc.8 q15, q15\n\t"
2115 "aesd.8 q12, q4\n\t"
2116 "aesimc.8 q12, q12\n\t"
2117 "aesd.8 q13, q4\n\t"
2118 "aesimc.8 q13, q13\n\t"
2119 "aesd.8 q14, q4\n\t"
2120 "aesimc.8 q14, q14\n\t"
2121 "aesd.8 q15, q4\n\t"
2122 "aesimc.8 q15, q15\n\t"
2123 "aesd.8 q12, q5\n\t"
2124 "aesimc.8 q12, q12\n\t"
2125 "aesd.8 q13, q5\n\t"
2126 "aesimc.8 q13, q13\n\t"
2127 "aesd.8 q14, q5\n\t"
2128 "aesimc.8 q14, q14\n\t"
2129 "aesd.8 q15, q5\n\t"
2130 "aesimc.8 q15, q15\n\t"
2131 "aesd.8 q12, q6\n\t"
2132 "aesimc.8 q12, q12\n\t"
2133 "aesd.8 q13, q6\n\t"
2134 "aesimc.8 q13, q13\n\t"
2135 "aesd.8 q14, q6\n\t"
2136 "aesimc.8 q14, q14\n\t"
2137 "aesd.8 q15, q6\n\t"
2138 "aesimc.8 q15, q15\n\t"
2139 "aesd.8 q12, q7\n\t"
2140 "aesimc.8 q12, q12\n\t"
2141 "aesd.8 q13, q7\n\t"
2142 "aesimc.8 q13, q13\n\t"
2143 "aesd.8 q14, q7\n\t"
2144 "aesimc.8 q14, q14\n\t"
2145 "aesd.8 q15, q7\n\t"
2146 "aesimc.8 q15, q15\n\t"
2147 "aesd.8 q12, q8\n\t"
2148 "aesimc.8 q12, q12\n\t"
2149 "aesd.8 q13, q8\n\t"
2150 "aesimc.8 q13, q13\n\t"
2151 "aesd.8 q14, q8\n\t"
2152 "aesimc.8 q14, q14\n\t"
2153 "aesd.8 q15, q8\n\t"
2154 "aesimc.8 q15, q15\n\t"
2155 "vld1.32 {q10}, [%[key]]!\n\t"
2156 "aesd.8 q12, q9\n\t"
2157 "aesimc.8 q12, q12\n\t"
2158 "aesd.8 q13, q9\n\t"
2159 "aesimc.8 q13, q13\n\t"
2160 "aesd.8 q14, q9\n\t"
2161 "aesimc.8 q14, q14\n\t"
2162 "aesd.8 q15, q9\n\t"
2163 "aesimc.8 q15, q15\n\t"
2164 "vld1.32 {q11}, [%[key]]!\n\t"
2165 "aesd.8 q12, q10\n\t"
2166 "aesimc.8 q12, q12\n\t"
2167 "aesd.8 q13, q10\n\t"
2168 "aesimc.8 q13, q13\n\t"
2169 "aesd.8 q14, q10\n\t"
2170 "aesimc.8 q14, q14\n\t"
2171 "aesd.8 q15, q10\n\t"
2172 "aesimc.8 q15, q15\n\t"
2173 "vld1.32 {q10}, [%[key]]!\n\t"
2174 "aesd.8 q12, q11\n\t"
2175 "aesimc.8 q12, q12\n\t"
2176 "aesd.8 q13, q11\n\t"
2177 "aesimc.8 q13, q13\n\t"
2178 "aesd.8 q14, q11\n\t"
2179 "aesimc.8 q14, q14\n\t"
2180 "aesd.8 q15, q11\n\t"
2181 "aesimc.8 q15, q15\n\t"
2182 "vld1.32 {q11}, [%[key]]!\n\t"
2183 "aesd.8 q12, q10\n\t"
2184 "aesimc.8 q12, q12\n\t"
2185 "aesd.8 q13, q10\n\t"
2186 "aesimc.8 q13, q13\n\t"
2187 "aesd.8 q14, q10\n\t"
2188 "aesimc.8 q14, q14\n\t"
2189 "aesd.8 q15, q10\n\t"
2190 "aesimc.8 q15, q15\n\t"
2191 "vld1.32 {q10}, [%[key]]!\n\t"
2192 "aesd.8 q12, q11\n\t"
2193 "veor.32 q12, q12, q10\n\t"
2194 "aesd.8 q13, q11\n\t"
2195 "veor.32 q13, q13, q10\n\t"
2196 "aesd.8 q14, q11\n\t"
2197 "veor.32 q14, q14, q10\n\t"
2198 "aesd.8 q15, q11\n\t"
2199 "veor.32 q15, q15, q10\n\t"
2200 "sub %[key], %[key], #0x50\n\t"
2201 "sub %[sz], %[sz], #4\n\t"
2202 "vstm.8 %[out]!, {q12-q15}\n\t"
2203 "cmp %[sz], #4\n\t"
2204 "bge L_aes_decrypt_blocks_arm32_crypto_256_start_4_%=\n\t"
2205 "\n"
2206 "L_aes_decrypt_blocks_arm32_crypto_256_start_2_%=:\n\t"
2207 "cmp %[sz], #2\n\t"
2208 "blt L_aes_decrypt_blocks_arm32_crypto_256_start_1_%=\n\t"
2209 "vld1.8 {q12-q13}, [%[in]]!\n\t"
2210 "aesd.8 q12, q0\n\t"
2211 "aesimc.8 q12, q12\n\t"
2212 "aesd.8 q13, q0\n\t"
2213 "aesimc.8 q13, q13\n\t"
2214 "aesd.8 q12, q1\n\t"
2215 "aesimc.8 q12, q12\n\t"
2216 "aesd.8 q13, q1\n\t"
2217 "aesimc.8 q13, q13\n\t"
2218 "aesd.8 q12, q2\n\t"
2219 "aesimc.8 q12, q12\n\t"
2220 "aesd.8 q13, q2\n\t"
2221 "aesimc.8 q13, q13\n\t"
2222 "aesd.8 q12, q3\n\t"
2223 "aesimc.8 q12, q12\n\t"
2224 "aesd.8 q13, q3\n\t"
2225 "aesimc.8 q13, q13\n\t"
2226 "aesd.8 q12, q4\n\t"
2227 "aesimc.8 q12, q12\n\t"
2228 "aesd.8 q13, q4\n\t"
2229 "aesimc.8 q13, q13\n\t"
2230 "aesd.8 q12, q5\n\t"
2231 "aesimc.8 q12, q12\n\t"
2232 "aesd.8 q13, q5\n\t"
2233 "aesimc.8 q13, q13\n\t"
2234 "aesd.8 q12, q6\n\t"
2235 "aesimc.8 q12, q12\n\t"
2236 "aesd.8 q13, q6\n\t"
2237 "aesimc.8 q13, q13\n\t"
2238 "aesd.8 q12, q7\n\t"
2239 "aesimc.8 q12, q12\n\t"
2240 "aesd.8 q13, q7\n\t"
2241 "aesimc.8 q13, q13\n\t"
2242 "aesd.8 q12, q8\n\t"
2243 "aesimc.8 q12, q12\n\t"
2244 "aesd.8 q13, q8\n\t"
2245 "aesimc.8 q13, q13\n\t"
2246 "vld1.32 {q10}, [%[key]]!\n\t"
2247 "aesd.8 q12, q9\n\t"
2248 "aesimc.8 q12, q12\n\t"
2249 "aesd.8 q13, q9\n\t"
2250 "aesimc.8 q13, q13\n\t"
2251 "vld1.32 {q11}, [%[key]]!\n\t"
2252 "aesd.8 q12, q10\n\t"
2253 "aesimc.8 q12, q12\n\t"
2254 "aesd.8 q13, q10\n\t"
2255 "aesimc.8 q13, q13\n\t"
2256 "vld1.32 {q10}, [%[key]]!\n\t"
2257 "aesd.8 q12, q11\n\t"
2258 "aesimc.8 q12, q12\n\t"
2259 "aesd.8 q13, q11\n\t"
2260 "aesimc.8 q13, q13\n\t"
2261 "vld1.32 {q11}, [%[key]]!\n\t"
2262 "aesd.8 q12, q10\n\t"
2263 "aesimc.8 q12, q12\n\t"
2264 "aesd.8 q13, q10\n\t"
2265 "aesimc.8 q13, q13\n\t"
2266 "vld1.32 {q10}, [%[key]]!\n\t"
2267 "aesd.8 q12, q11\n\t"
2268 "veor.32 q12, q12, q10\n\t"
2269 "aesd.8 q13, q11\n\t"
2270 "veor.32 q13, q13, q10\n\t"
2271 "sub %[key], %[key], #0x50\n\t"
2272 "sub %[sz], %[sz], #2\n\t"
2273 "vst1.8 {q12-q13}, [%[out]]!\n\t"
2274 "\n"
2275 "L_aes_decrypt_blocks_arm32_crypto_256_start_1_%=:\n\t"
2276 "cmp %[sz], #0\n\t"
2277 "beq L_aes_decrypt_blocks_arm32_crypto_256_done_%=\n\t"
2278 "vld1.8 {q12}, [%[in]]!\n\t"
2279 "aesd.8 q12, q0\n\t"
2280 "aesimc.8 q12, q12\n\t"
2281 "aesd.8 q12, q1\n\t"
2282 "aesimc.8 q12, q12\n\t"
2283 "aesd.8 q12, q2\n\t"
2284 "aesimc.8 q12, q12\n\t"
2285 "aesd.8 q12, q3\n\t"
2286 "aesimc.8 q12, q12\n\t"
2287 "aesd.8 q12, q4\n\t"
2288 "aesimc.8 q12, q12\n\t"
2289 "aesd.8 q12, q5\n\t"
2290 "aesimc.8 q12, q12\n\t"
2291 "aesd.8 q12, q6\n\t"
2292 "aesimc.8 q12, q12\n\t"
2293 "aesd.8 q12, q7\n\t"
2294 "aesimc.8 q12, q12\n\t"
2295 "aesd.8 q12, q8\n\t"
2296 "aesimc.8 q12, q12\n\t"
2297 "vld1.32 {q10}, [%[key]]!\n\t"
2298 "aesd.8 q12, q9\n\t"
2299 "aesimc.8 q12, q12\n\t"
2300 "vld1.32 {q11}, [%[key]]!\n\t"
2301 "aesd.8 q12, q10\n\t"
2302 "aesimc.8 q12, q12\n\t"
2303 "vld1.32 {q10}, [%[key]]!\n\t"
2304 "aesd.8 q12, q11\n\t"
2305 "aesimc.8 q12, q12\n\t"
2306 "vld1.32 {q11}, [%[key]]!\n\t"
2307 "aesd.8 q12, q10\n\t"
2308 "aesimc.8 q12, q12\n\t"
2309 "vld1.32 {q10}, [%[key]]!\n\t"
2310 "aesd.8 q12, q11\n\t"
2311 "veor.32 q12, q12, q10\n\t"
2312 "sub %[key], %[key], #0x50\n\t"
2313 "vst1.8 {q12}, [%[out]]!\n\t"
2314 "\n"
2315 "L_aes_decrypt_blocks_arm32_crypto_256_done_%=:\n\t"
2316#endif /* !NO_AES_256 */
2317 "b L_aes_decrypt_blocks_arm32_crypto_done_%=\n\t"
2318 /* AES_ECB_128 */
2319 "\n"
2320 "L_aes_decrypt_blocks_arm32_crypto_start_128_%=:\n\t"
2321#ifndef NO_AES_128
2322 "vldm.32 %[key]!, {q8-q10}\n\t"
2323 "cmp %[sz], #1\n\t"
2324 "beq L_aes_decrypt_blocks_arm32_crypto_128_start_1_%=\n\t"
2325 "cmp %[sz], #4\n\t"
2326 "blt L_aes_decrypt_blocks_arm32_crypto_128_start_2_%=\n\t"
2327 "\n"
2328 "L_aes_decrypt_blocks_arm32_crypto_128_start_4_%=:\n\t"
2329 "vldm.8 %[in]!, {q12-q15}\n\t"
2330 "aesd.8 q12, q0\n\t"
2331 "aesimc.8 q12, q12\n\t"
2332 "aesd.8 q13, q0\n\t"
2333 "aesimc.8 q13, q13\n\t"
2334 "aesd.8 q14, q0\n\t"
2335 "aesimc.8 q14, q14\n\t"
2336 "aesd.8 q15, q0\n\t"
2337 "aesimc.8 q15, q15\n\t"
2338 "aesd.8 q12, q1\n\t"
2339 "aesimc.8 q12, q12\n\t"
2340 "aesd.8 q13, q1\n\t"
2341 "aesimc.8 q13, q13\n\t"
2342 "aesd.8 q14, q1\n\t"
2343 "aesimc.8 q14, q14\n\t"
2344 "aesd.8 q15, q1\n\t"
2345 "aesimc.8 q15, q15\n\t"
2346 "aesd.8 q12, q2\n\t"
2347 "aesimc.8 q12, q12\n\t"
2348 "aesd.8 q13, q2\n\t"
2349 "aesimc.8 q13, q13\n\t"
2350 "aesd.8 q14, q2\n\t"
2351 "aesimc.8 q14, q14\n\t"
2352 "aesd.8 q15, q2\n\t"
2353 "aesimc.8 q15, q15\n\t"
2354 "aesd.8 q12, q3\n\t"
2355 "aesimc.8 q12, q12\n\t"
2356 "aesd.8 q13, q3\n\t"
2357 "aesimc.8 q13, q13\n\t"
2358 "aesd.8 q14, q3\n\t"
2359 "aesimc.8 q14, q14\n\t"
2360 "aesd.8 q15, q3\n\t"
2361 "aesimc.8 q15, q15\n\t"
2362 "aesd.8 q12, q4\n\t"
2363 "aesimc.8 q12, q12\n\t"
2364 "aesd.8 q13, q4\n\t"
2365 "aesimc.8 q13, q13\n\t"
2366 "aesd.8 q14, q4\n\t"
2367 "aesimc.8 q14, q14\n\t"
2368 "aesd.8 q15, q4\n\t"
2369 "aesimc.8 q15, q15\n\t"
2370 "aesd.8 q12, q5\n\t"
2371 "aesimc.8 q12, q12\n\t"
2372 "aesd.8 q13, q5\n\t"
2373 "aesimc.8 q13, q13\n\t"
2374 "aesd.8 q14, q5\n\t"
2375 "aesimc.8 q14, q14\n\t"
2376 "aesd.8 q15, q5\n\t"
2377 "aesimc.8 q15, q15\n\t"
2378 "aesd.8 q12, q6\n\t"
2379 "aesimc.8 q12, q12\n\t"
2380 "aesd.8 q13, q6\n\t"
2381 "aesimc.8 q13, q13\n\t"
2382 "aesd.8 q14, q6\n\t"
2383 "aesimc.8 q14, q14\n\t"
2384 "aesd.8 q15, q6\n\t"
2385 "aesimc.8 q15, q15\n\t"
2386 "aesd.8 q12, q7\n\t"
2387 "aesimc.8 q12, q12\n\t"
2388 "aesd.8 q13, q7\n\t"
2389 "aesimc.8 q13, q13\n\t"
2390 "aesd.8 q14, q7\n\t"
2391 "aesimc.8 q14, q14\n\t"
2392 "aesd.8 q15, q7\n\t"
2393 "aesimc.8 q15, q15\n\t"
2394 "aesd.8 q12, q8\n\t"
2395 "aesimc.8 q12, q12\n\t"
2396 "aesd.8 q13, q8\n\t"
2397 "aesimc.8 q13, q13\n\t"
2398 "aesd.8 q14, q8\n\t"
2399 "aesimc.8 q14, q14\n\t"
2400 "aesd.8 q15, q8\n\t"
2401 "aesimc.8 q15, q15\n\t"
2402 "aesd.8 q12, q9\n\t"
2403 "veor.32 q12, q12, q10\n\t"
2404 "aesd.8 q13, q9\n\t"
2405 "veor.32 q13, q13, q10\n\t"
2406 "aesd.8 q14, q9\n\t"
2407 "veor.32 q14, q14, q10\n\t"
2408 "aesd.8 q15, q9\n\t"
2409 "veor.32 q15, q15, q10\n\t"
2410 "sub %[sz], %[sz], #4\n\t"
2411 "vstm.8 %[out]!, {q12-q15}\n\t"
2412 "cmp %[sz], #4\n\t"
2413 "bge L_aes_decrypt_blocks_arm32_crypto_128_start_4_%=\n\t"
2414 "\n"
2415 "L_aes_decrypt_blocks_arm32_crypto_128_start_2_%=:\n\t"
2416 "cmp %[sz], #2\n\t"
2417 "blt L_aes_decrypt_blocks_arm32_crypto_128_start_1_%=\n\t"
2418 "vld1.8 {q12-q13}, [%[in]]!\n\t"
2419 "aesd.8 q12, q0\n\t"
2420 "aesimc.8 q12, q12\n\t"
2421 "aesd.8 q13, q0\n\t"
2422 "aesimc.8 q13, q13\n\t"
2423 "aesd.8 q12, q1\n\t"
2424 "aesimc.8 q12, q12\n\t"
2425 "aesd.8 q13, q1\n\t"
2426 "aesimc.8 q13, q13\n\t"
2427 "aesd.8 q12, q2\n\t"
2428 "aesimc.8 q12, q12\n\t"
2429 "aesd.8 q13, q2\n\t"
2430 "aesimc.8 q13, q13\n\t"
2431 "aesd.8 q12, q3\n\t"
2432 "aesimc.8 q12, q12\n\t"
2433 "aesd.8 q13, q3\n\t"
2434 "aesimc.8 q13, q13\n\t"
2435 "aesd.8 q12, q4\n\t"
2436 "aesimc.8 q12, q12\n\t"
2437 "aesd.8 q13, q4\n\t"
2438 "aesimc.8 q13, q13\n\t"
2439 "aesd.8 q12, q5\n\t"
2440 "aesimc.8 q12, q12\n\t"
2441 "aesd.8 q13, q5\n\t"
2442 "aesimc.8 q13, q13\n\t"
2443 "aesd.8 q12, q6\n\t"
2444 "aesimc.8 q12, q12\n\t"
2445 "aesd.8 q13, q6\n\t"
2446 "aesimc.8 q13, q13\n\t"
2447 "aesd.8 q12, q7\n\t"
2448 "aesimc.8 q12, q12\n\t"
2449 "aesd.8 q13, q7\n\t"
2450 "aesimc.8 q13, q13\n\t"
2451 "aesd.8 q12, q8\n\t"
2452 "aesimc.8 q12, q12\n\t"
2453 "aesd.8 q13, q8\n\t"
2454 "aesimc.8 q13, q13\n\t"
2455 "aesd.8 q12, q9\n\t"
2456 "veor.32 q12, q12, q10\n\t"
2457 "aesd.8 q13, q9\n\t"
2458 "veor.32 q13, q13, q10\n\t"
2459 "sub %[sz], %[sz], #2\n\t"
2460 "vst1.8 {q12-q13}, [%[out]]!\n\t"
2461 "\n"
2462 "L_aes_decrypt_blocks_arm32_crypto_128_start_1_%=:\n\t"
2463 "cmp %[sz], #0\n\t"
2464 "beq L_aes_decrypt_blocks_arm32_crypto_128_done_%=\n\t"
2465 "vld1.8 {q12}, [%[in]]!\n\t"
2466 "aesd.8 q12, q0\n\t"
2467 "aesimc.8 q12, q12\n\t"
2468 "aesd.8 q12, q1\n\t"
2469 "aesimc.8 q12, q12\n\t"
2470 "aesd.8 q12, q2\n\t"
2471 "aesimc.8 q12, q12\n\t"
2472 "aesd.8 q12, q3\n\t"
2473 "aesimc.8 q12, q12\n\t"
2474 "aesd.8 q12, q4\n\t"
2475 "aesimc.8 q12, q12\n\t"
2476 "aesd.8 q12, q5\n\t"
2477 "aesimc.8 q12, q12\n\t"
2478 "aesd.8 q12, q6\n\t"
2479 "aesimc.8 q12, q12\n\t"
2480 "aesd.8 q12, q7\n\t"
2481 "aesimc.8 q12, q12\n\t"
2482 "aesd.8 q12, q8\n\t"
2483 "aesimc.8 q12, q12\n\t"
2484 "aesd.8 q12, q9\n\t"
2485 "veor.32 q12, q12, q10\n\t"
2486 "vst1.8 {q12}, [%[out]]!\n\t"
2487 "\n"
2488 "L_aes_decrypt_blocks_arm32_crypto_128_done_%=:\n\t"
2489#endif /* !NO_AES_128 */
2490 "\n"
2491 "L_aes_decrypt_blocks_arm32_crypto_done_%=:\n\t"
2492 "pop {%[nr]}\n\t"
2493#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
2494 : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [key] "+r" (key),
2495 [nr] "+r" (nr)
2496 :
2497#else
2498 :
2499 : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [key] "r" (key),
2500 [nr] "r" (nr)
2501#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
2502 : "memory", "cc", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8",
2503 "q9", "q10", "q11", "q12", "q13", "q14", "q15"
2504 );
2505}
2506
2507#endif /* HAVE_AES_DECRYPT */
2508#endif /* HAVE_AES_ECB */
2509#ifdef HAVE_AES_CBC
2510#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
2511WC_OMIT_FRAME_POINTER void AES_CBC_encrypt_AARCH32(const byte* in_p,
2512 byte* out_p, word32 sz_p, byte* reg_p, byte* key_p, int nr_p)
2513#else
2514WC_OMIT_FRAME_POINTER void AES_CBC_encrypt_AARCH32(const byte* in, byte* out,
2515 word32 sz, byte* reg, byte* key, int nr)
2516#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
2517{
2518#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
2519 register const byte* in __asm__ ("r0") = (const byte*)in_p;
2520 register byte* out __asm__ ("r1") = (byte*)out_p;
2521 register word32 sz __asm__ ("r2") = (word32)sz_p;
2522 register byte* reg __asm__ ("r3") = (byte*)reg_p;
2523 register byte* key __asm__ ("r12") = (byte*)key_p;
2524 register int nr __asm__ ("lr") = (int)nr_p;
2525#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
2526
2527 __asm__ __volatile__ (
2528 "push {%[key], %[nr]}\n\t"
2529 "ldr r12, [sp]\n\t"
2530 "ldr lr, [sp, #4]\n\t"
2531 "vldm.32 r12!, {q0-q7}\n\t"
2532 "vld1.32 {q15}, [%[reg]]\n\t"
2533 "subs lr, lr, #12\n\t"
2534 "lsr %[sz], %[sz], #4\n\t"
2535 "blt L_aes_cbc_encrypt_arm32_crypto_start_128_%=\n\t"
2536 "bgt L_aes_cbc_encrypt_arm32_crypto_start_256_%=\n\t"
2537 /* AES_CBC_192 */
2538#ifndef NO_AES_192
2539 "vld1.8 {q14}, [%[in]]!\n\t"
2540 "vldm.32 r12!, {q8-q12}\n\t"
2541 "cmp %[sz], #1\n\t"
2542 "beq L_aes_cbc_encrypt_arm32_crypto_192_start_1_%=\n\t"
2543 "cmp %[sz], #4\n\t"
2544 "blt L_aes_cbc_encrypt_arm32_crypto_192_start_2_%=\n\t"
2545 "\n"
2546 "L_aes_cbc_encrypt_arm32_crypto_192_start_4_%=:\n\t"
2547 "veor.32 q15, q15, q14\n\t"
2548 "aese.8 q15, q0\n\t"
2549 "aesmc.8 q15, q15\n\t"
2550 "aese.8 q15, q1\n\t"
2551 "aesmc.8 q15, q15\n\t"
2552 "aese.8 q15, q2\n\t"
2553 "aesmc.8 q15, q15\n\t"
2554 "aese.8 q15, q3\n\t"
2555 "aesmc.8 q15, q15\n\t"
2556 "aese.8 q15, q4\n\t"
2557 "aesmc.8 q15, q15\n\t"
2558 "aese.8 q15, q5\n\t"
2559 "aesmc.8 q15, q15\n\t"
2560 "aese.8 q15, q6\n\t"
2561 "aesmc.8 q15, q15\n\t"
2562 "aese.8 q15, q7\n\t"
2563 "aesmc.8 q15, q15\n\t"
2564 "aese.8 q15, q8\n\t"
2565 "aesmc.8 q15, q15\n\t"
2566 "aese.8 q15, q9\n\t"
2567 "aesmc.8 q15, q15\n\t"
2568 "aese.8 q15, q10\n\t"
2569 "aesmc.8 q15, q15\n\t"
2570 "vld1.8 {q14}, [%[in]]!\n\t"
2571 "aese.8 q15, q11\n\t"
2572 "veor.32 q15, q15, q12\n\t"
2573 "vst1.8 {q15}, [%[out]]!\n\t"
2574 "veor.32 q15, q15, q14\n\t"
2575 "aese.8 q15, q0\n\t"
2576 "aesmc.8 q15, q15\n\t"
2577 "aese.8 q15, q1\n\t"
2578 "aesmc.8 q15, q15\n\t"
2579 "aese.8 q15, q2\n\t"
2580 "aesmc.8 q15, q15\n\t"
2581 "aese.8 q15, q3\n\t"
2582 "aesmc.8 q15, q15\n\t"
2583 "aese.8 q15, q4\n\t"
2584 "aesmc.8 q15, q15\n\t"
2585 "aese.8 q15, q5\n\t"
2586 "aesmc.8 q15, q15\n\t"
2587 "aese.8 q15, q6\n\t"
2588 "aesmc.8 q15, q15\n\t"
2589 "aese.8 q15, q7\n\t"
2590 "aesmc.8 q15, q15\n\t"
2591 "aese.8 q15, q8\n\t"
2592 "aesmc.8 q15, q15\n\t"
2593 "aese.8 q15, q9\n\t"
2594 "aesmc.8 q15, q15\n\t"
2595 "aese.8 q15, q10\n\t"
2596 "aesmc.8 q15, q15\n\t"
2597 "vld1.8 {q14}, [%[in]]!\n\t"
2598 "aese.8 q15, q11\n\t"
2599 "veor.32 q15, q15, q12\n\t"
2600 "vst1.8 {q15}, [%[out]]!\n\t"
2601 "veor.32 q15, q15, q14\n\t"
2602 "aese.8 q15, q0\n\t"
2603 "aesmc.8 q15, q15\n\t"
2604 "aese.8 q15, q1\n\t"
2605 "aesmc.8 q15, q15\n\t"
2606 "aese.8 q15, q2\n\t"
2607 "aesmc.8 q15, q15\n\t"
2608 "aese.8 q15, q3\n\t"
2609 "aesmc.8 q15, q15\n\t"
2610 "aese.8 q15, q4\n\t"
2611 "aesmc.8 q15, q15\n\t"
2612 "aese.8 q15, q5\n\t"
2613 "aesmc.8 q15, q15\n\t"
2614 "aese.8 q15, q6\n\t"
2615 "aesmc.8 q15, q15\n\t"
2616 "aese.8 q15, q7\n\t"
2617 "aesmc.8 q15, q15\n\t"
2618 "aese.8 q15, q8\n\t"
2619 "aesmc.8 q15, q15\n\t"
2620 "aese.8 q15, q9\n\t"
2621 "aesmc.8 q15, q15\n\t"
2622 "aese.8 q15, q10\n\t"
2623 "aesmc.8 q15, q15\n\t"
2624 "vld1.8 {q14}, [%[in]]!\n\t"
2625 "aese.8 q15, q11\n\t"
2626 "veor.32 q15, q15, q12\n\t"
2627 "vst1.8 {q15}, [%[out]]!\n\t"
2628 "veor.32 q15, q15, q14\n\t"
2629 "aese.8 q15, q0\n\t"
2630 "aesmc.8 q15, q15\n\t"
2631 "aese.8 q15, q1\n\t"
2632 "aesmc.8 q15, q15\n\t"
2633 "aese.8 q15, q2\n\t"
2634 "aesmc.8 q15, q15\n\t"
2635 "aese.8 q15, q3\n\t"
2636 "aesmc.8 q15, q15\n\t"
2637 "aese.8 q15, q4\n\t"
2638 "aesmc.8 q15, q15\n\t"
2639 "aese.8 q15, q5\n\t"
2640 "aesmc.8 q15, q15\n\t"
2641 "aese.8 q15, q6\n\t"
2642 "aesmc.8 q15, q15\n\t"
2643 "aese.8 q15, q7\n\t"
2644 "aesmc.8 q15, q15\n\t"
2645 "aese.8 q15, q8\n\t"
2646 "aesmc.8 q15, q15\n\t"
2647 "aese.8 q15, q9\n\t"
2648 "aesmc.8 q15, q15\n\t"
2649 "subs %[sz], %[sz], #4\n\t"
2650 "aese.8 q15, q10\n\t"
2651 "aesmc.8 q15, q15\n\t"
2652 "aese.8 q15, q11\n\t"
2653 "veor.32 q15, q15, q12\n\t"
2654 "beq L_aes_cbc_encrypt_arm32_crypto_192_done_%=\n\t"
2655 "vld1.8 {q14}, [%[in]]!\n\t"
2656 "cmp %[sz], #4\n\t"
2657 "vst1.8 {q15}, [%[out]]!\n\t"
2658 "bge L_aes_cbc_encrypt_arm32_crypto_192_start_4_%=\n\t"
2659 "cmp %[sz], #2\n\t"
2660 "blt L_aes_cbc_encrypt_arm32_crypto_192_start_1_%=\n\t"
2661 "\n"
2662 "L_aes_cbc_encrypt_arm32_crypto_192_start_2_%=:\n\t"
2663 "veor.32 q15, q15, q14\n\t"
2664 "aese.8 q15, q0\n\t"
2665 "aesmc.8 q15, q15\n\t"
2666 "aese.8 q15, q1\n\t"
2667 "aesmc.8 q15, q15\n\t"
2668 "aese.8 q15, q2\n\t"
2669 "aesmc.8 q15, q15\n\t"
2670 "aese.8 q15, q3\n\t"
2671 "aesmc.8 q15, q15\n\t"
2672 "aese.8 q15, q4\n\t"
2673 "aesmc.8 q15, q15\n\t"
2674 "aese.8 q15, q5\n\t"
2675 "aesmc.8 q15, q15\n\t"
2676 "aese.8 q15, q6\n\t"
2677 "aesmc.8 q15, q15\n\t"
2678 "aese.8 q15, q7\n\t"
2679 "aesmc.8 q15, q15\n\t"
2680 "aese.8 q15, q8\n\t"
2681 "aesmc.8 q15, q15\n\t"
2682 "aese.8 q15, q9\n\t"
2683 "aesmc.8 q15, q15\n\t"
2684 "aese.8 q15, q10\n\t"
2685 "aesmc.8 q15, q15\n\t"
2686 "vld1.8 {q14}, [%[in]]!\n\t"
2687 "aese.8 q15, q11\n\t"
2688 "veor.32 q15, q15, q12\n\t"
2689 "vst1.8 {q15}, [%[out]]!\n\t"
2690 "veor.32 q15, q15, q14\n\t"
2691 "aese.8 q15, q0\n\t"
2692 "aesmc.8 q15, q15\n\t"
2693 "aese.8 q15, q1\n\t"
2694 "aesmc.8 q15, q15\n\t"
2695 "aese.8 q15, q2\n\t"
2696 "aesmc.8 q15, q15\n\t"
2697 "aese.8 q15, q3\n\t"
2698 "aesmc.8 q15, q15\n\t"
2699 "aese.8 q15, q4\n\t"
2700 "aesmc.8 q15, q15\n\t"
2701 "aese.8 q15, q5\n\t"
2702 "aesmc.8 q15, q15\n\t"
2703 "aese.8 q15, q6\n\t"
2704 "aesmc.8 q15, q15\n\t"
2705 "aese.8 q15, q7\n\t"
2706 "aesmc.8 q15, q15\n\t"
2707 "aese.8 q15, q8\n\t"
2708 "aesmc.8 q15, q15\n\t"
2709 "aese.8 q15, q9\n\t"
2710 "aesmc.8 q15, q15\n\t"
2711 "subs %[sz], %[sz], #2\n\t"
2712 "aese.8 q15, q10\n\t"
2713 "aesmc.8 q15, q15\n\t"
2714 "aese.8 q15, q11\n\t"
2715 "veor.32 q15, q15, q12\n\t"
2716 "beq L_aes_cbc_encrypt_arm32_crypto_192_done_%=\n\t"
2717 "vld1.8 {q14}, [%[in]]!\n\t"
2718 "vst1.8 {q15}, [%[out]]!\n\t"
2719 "\n"
2720 "L_aes_cbc_encrypt_arm32_crypto_192_start_1_%=:\n\t"
2721 "veor.32 q15, q15, q14\n\t"
2722 "aese.8 q15, q0\n\t"
2723 "aesmc.8 q15, q15\n\t"
2724 "aese.8 q15, q1\n\t"
2725 "aesmc.8 q15, q15\n\t"
2726 "aese.8 q15, q2\n\t"
2727 "aesmc.8 q15, q15\n\t"
2728 "aese.8 q15, q3\n\t"
2729 "aesmc.8 q15, q15\n\t"
2730 "aese.8 q15, q4\n\t"
2731 "aesmc.8 q15, q15\n\t"
2732 "aese.8 q15, q5\n\t"
2733 "aesmc.8 q15, q15\n\t"
2734 "aese.8 q15, q6\n\t"
2735 "aesmc.8 q15, q15\n\t"
2736 "aese.8 q15, q7\n\t"
2737 "aesmc.8 q15, q15\n\t"
2738 "aese.8 q15, q8\n\t"
2739 "aesmc.8 q15, q15\n\t"
2740 "aese.8 q15, q9\n\t"
2741 "aesmc.8 q15, q15\n\t"
2742 "aese.8 q15, q10\n\t"
2743 "aesmc.8 q15, q15\n\t"
2744 "aese.8 q15, q11\n\t"
2745 "veor.32 q15, q15, q12\n\t"
2746 "\n"
2747 "L_aes_cbc_encrypt_arm32_crypto_192_done_%=:\n\t"
2748 "vst1.8 {q15}, [%[out]]!\n\t"
2749#endif /* !NO_AES_192 */
2750 "b L_aes_cbc_encrypt_arm32_crypto_done_%=\n\t"
2751 /* AES_CBC_256 */
2752 "\n"
2753 "L_aes_cbc_encrypt_arm32_crypto_start_256_%=:\n\t"
2754#ifndef NO_AES_256
2755 "vld1.8 {q14}, [%[in]]!\n\t"
2756 "vldm.32 r12!, {q8-q11}\n\t"
2757 "add r12, r12, #16\n\t"
2758 "vld1.32 {q12-q13}, [r12]\n\t"
2759 "sub r12, r12, #16\n\t"
2760 "cmp %[sz], #1\n\t"
2761 "beq L_aes_cbc_encrypt_arm32_crypto_256_start_1_%=\n\t"
2762 "cmp %[sz], #4\n\t"
2763 "blt L_aes_cbc_encrypt_arm32_crypto_256_start_2_%=\n\t"
2764 "\n"
2765 "L_aes_cbc_encrypt_arm32_crypto_256_start_4_%=:\n\t"
2766 "veor.32 q15, q15, q14\n\t"
2767 "aese.8 q15, q0\n\t"
2768 "aesmc.8 q15, q15\n\t"
2769 "aese.8 q15, q1\n\t"
2770 "aesmc.8 q15, q15\n\t"
2771 "aese.8 q15, q2\n\t"
2772 "aesmc.8 q15, q15\n\t"
2773 "aese.8 q15, q3\n\t"
2774 "aesmc.8 q15, q15\n\t"
2775 "aese.8 q15, q4\n\t"
2776 "aesmc.8 q15, q15\n\t"
2777 "aese.8 q15, q5\n\t"
2778 "aesmc.8 q15, q15\n\t"
2779 "aese.8 q15, q6\n\t"
2780 "aesmc.8 q15, q15\n\t"
2781 "aese.8 q15, q7\n\t"
2782 "aesmc.8 q15, q15\n\t"
2783 "aese.8 q15, q8\n\t"
2784 "aesmc.8 q15, q15\n\t"
2785 "aese.8 q15, q9\n\t"
2786 "aesmc.8 q15, q15\n\t"
2787 "aese.8 q15, q10\n\t"
2788 "aesmc.8 q15, q15\n\t"
2789 "vld1.32 {q14}, [r12]\n\t"
2790 "aese.8 q15, q11\n\t"
2791 "aesmc.8 q15, q15\n\t"
2792 "aese.8 q15, q14\n\t"
2793 "aesmc.8 q15, q15\n\t"
2794 "vld1.8 {q14}, [%[in]]!\n\t"
2795 "aese.8 q15, q12\n\t"
2796 "veor.32 q15, q15, q13\n\t"
2797 "vst1.8 {q15}, [%[out]]!\n\t"
2798 "veor.32 q15, q15, q14\n\t"
2799 "aese.8 q15, q0\n\t"
2800 "aesmc.8 q15, q15\n\t"
2801 "aese.8 q15, q1\n\t"
2802 "aesmc.8 q15, q15\n\t"
2803 "aese.8 q15, q2\n\t"
2804 "aesmc.8 q15, q15\n\t"
2805 "aese.8 q15, q3\n\t"
2806 "aesmc.8 q15, q15\n\t"
2807 "aese.8 q15, q4\n\t"
2808 "aesmc.8 q15, q15\n\t"
2809 "aese.8 q15, q5\n\t"
2810 "aesmc.8 q15, q15\n\t"
2811 "aese.8 q15, q6\n\t"
2812 "aesmc.8 q15, q15\n\t"
2813 "aese.8 q15, q7\n\t"
2814 "aesmc.8 q15, q15\n\t"
2815 "aese.8 q15, q8\n\t"
2816 "aesmc.8 q15, q15\n\t"
2817 "aese.8 q15, q9\n\t"
2818 "aesmc.8 q15, q15\n\t"
2819 "aese.8 q15, q10\n\t"
2820 "aesmc.8 q15, q15\n\t"
2821 "vld1.32 {q14}, [r12]\n\t"
2822 "aese.8 q15, q11\n\t"
2823 "aesmc.8 q15, q15\n\t"
2824 "aese.8 q15, q14\n\t"
2825 "aesmc.8 q15, q15\n\t"
2826 "vld1.8 {q14}, [%[in]]!\n\t"
2827 "aese.8 q15, q12\n\t"
2828 "veor.32 q15, q15, q13\n\t"
2829 "vst1.8 {q15}, [%[out]]!\n\t"
2830 "veor.32 q15, q15, q14\n\t"
2831 "aese.8 q15, q0\n\t"
2832 "aesmc.8 q15, q15\n\t"
2833 "aese.8 q15, q1\n\t"
2834 "aesmc.8 q15, q15\n\t"
2835 "aese.8 q15, q2\n\t"
2836 "aesmc.8 q15, q15\n\t"
2837 "aese.8 q15, q3\n\t"
2838 "aesmc.8 q15, q15\n\t"
2839 "aese.8 q15, q4\n\t"
2840 "aesmc.8 q15, q15\n\t"
2841 "aese.8 q15, q5\n\t"
2842 "aesmc.8 q15, q15\n\t"
2843 "aese.8 q15, q6\n\t"
2844 "aesmc.8 q15, q15\n\t"
2845 "aese.8 q15, q7\n\t"
2846 "aesmc.8 q15, q15\n\t"
2847 "aese.8 q15, q8\n\t"
2848 "aesmc.8 q15, q15\n\t"
2849 "aese.8 q15, q9\n\t"
2850 "aesmc.8 q15, q15\n\t"
2851 "aese.8 q15, q10\n\t"
2852 "aesmc.8 q15, q15\n\t"
2853 "vld1.32 {q14}, [r12]\n\t"
2854 "aese.8 q15, q11\n\t"
2855 "aesmc.8 q15, q15\n\t"
2856 "aese.8 q15, q14\n\t"
2857 "aesmc.8 q15, q15\n\t"
2858 "vld1.8 {q14}, [%[in]]!\n\t"
2859 "aese.8 q15, q12\n\t"
2860 "veor.32 q15, q15, q13\n\t"
2861 "vst1.8 {q15}, [%[out]]!\n\t"
2862 "veor.32 q15, q15, q14\n\t"
2863 "aese.8 q15, q0\n\t"
2864 "aesmc.8 q15, q15\n\t"
2865 "aese.8 q15, q1\n\t"
2866 "aesmc.8 q15, q15\n\t"
2867 "aese.8 q15, q2\n\t"
2868 "aesmc.8 q15, q15\n\t"
2869 "aese.8 q15, q3\n\t"
2870 "aesmc.8 q15, q15\n\t"
2871 "aese.8 q15, q4\n\t"
2872 "aesmc.8 q15, q15\n\t"
2873 "aese.8 q15, q5\n\t"
2874 "aesmc.8 q15, q15\n\t"
2875 "aese.8 q15, q6\n\t"
2876 "aesmc.8 q15, q15\n\t"
2877 "aese.8 q15, q7\n\t"
2878 "aesmc.8 q15, q15\n\t"
2879 "aese.8 q15, q8\n\t"
2880 "aesmc.8 q15, q15\n\t"
2881 "aese.8 q15, q9\n\t"
2882 "aesmc.8 q15, q15\n\t"
2883 "aese.8 q15, q10\n\t"
2884 "aesmc.8 q15, q15\n\t"
2885 "vld1.32 {q14}, [r12]\n\t"
2886 "aese.8 q15, q11\n\t"
2887 "aesmc.8 q15, q15\n\t"
2888 "subs %[sz], %[sz], #4\n\t"
2889 "aese.8 q15, q14\n\t"
2890 "aesmc.8 q15, q15\n\t"
2891 "aese.8 q15, q12\n\t"
2892 "veor.32 q15, q15, q13\n\t"
2893 "beq L_aes_cbc_encrypt_arm32_crypto_256_done_%=\n\t"
2894 "vld1.8 {q14}, [%[in]]!\n\t"
2895 "cmp %[sz], #4\n\t"
2896 "vst1.8 {q15}, [%[out]]!\n\t"
2897 "bge L_aes_cbc_encrypt_arm32_crypto_256_start_4_%=\n\t"
2898 "cmp %[sz], #2\n\t"
2899 "blt L_aes_cbc_encrypt_arm32_crypto_256_start_1_%=\n\t"
2900 "\n"
2901 "L_aes_cbc_encrypt_arm32_crypto_256_start_2_%=:\n\t"
2902 "veor.32 q15, q15, q14\n\t"
2903 "aese.8 q15, q0\n\t"
2904 "aesmc.8 q15, q15\n\t"
2905 "aese.8 q15, q1\n\t"
2906 "aesmc.8 q15, q15\n\t"
2907 "aese.8 q15, q2\n\t"
2908 "aesmc.8 q15, q15\n\t"
2909 "aese.8 q15, q3\n\t"
2910 "aesmc.8 q15, q15\n\t"
2911 "aese.8 q15, q4\n\t"
2912 "aesmc.8 q15, q15\n\t"
2913 "aese.8 q15, q5\n\t"
2914 "aesmc.8 q15, q15\n\t"
2915 "aese.8 q15, q6\n\t"
2916 "aesmc.8 q15, q15\n\t"
2917 "aese.8 q15, q7\n\t"
2918 "aesmc.8 q15, q15\n\t"
2919 "aese.8 q15, q8\n\t"
2920 "aesmc.8 q15, q15\n\t"
2921 "aese.8 q15, q9\n\t"
2922 "aesmc.8 q15, q15\n\t"
2923 "aese.8 q15, q10\n\t"
2924 "aesmc.8 q15, q15\n\t"
2925 "vld1.32 {q14}, [r12]\n\t"
2926 "aese.8 q15, q11\n\t"
2927 "aesmc.8 q15, q15\n\t"
2928 "aese.8 q15, q14\n\t"
2929 "aesmc.8 q15, q15\n\t"
2930 "vld1.8 {q14}, [%[in]]!\n\t"
2931 "aese.8 q15, q12\n\t"
2932 "veor.32 q15, q15, q13\n\t"
2933 "vst1.8 {q15}, [%[out]]!\n\t"
2934 "veor.32 q15, q15, q14\n\t"
2935 "aese.8 q15, q0\n\t"
2936 "aesmc.8 q15, q15\n\t"
2937 "aese.8 q15, q1\n\t"
2938 "aesmc.8 q15, q15\n\t"
2939 "aese.8 q15, q2\n\t"
2940 "aesmc.8 q15, q15\n\t"
2941 "aese.8 q15, q3\n\t"
2942 "aesmc.8 q15, q15\n\t"
2943 "aese.8 q15, q4\n\t"
2944 "aesmc.8 q15, q15\n\t"
2945 "aese.8 q15, q5\n\t"
2946 "aesmc.8 q15, q15\n\t"
2947 "aese.8 q15, q6\n\t"
2948 "aesmc.8 q15, q15\n\t"
2949 "aese.8 q15, q7\n\t"
2950 "aesmc.8 q15, q15\n\t"
2951 "aese.8 q15, q8\n\t"
2952 "aesmc.8 q15, q15\n\t"
2953 "aese.8 q15, q9\n\t"
2954 "aesmc.8 q15, q15\n\t"
2955 "aese.8 q15, q10\n\t"
2956 "aesmc.8 q15, q15\n\t"
2957 "vld1.32 {q14}, [r12]\n\t"
2958 "aese.8 q15, q11\n\t"
2959 "aesmc.8 q15, q15\n\t"
2960 "subs %[sz], %[sz], #2\n\t"
2961 "aese.8 q15, q14\n\t"
2962 "aesmc.8 q15, q15\n\t"
2963 "aese.8 q15, q12\n\t"
2964 "veor.32 q15, q15, q13\n\t"
2965 "beq L_aes_cbc_encrypt_arm32_crypto_256_done_%=\n\t"
2966 "vld1.8 {q14}, [%[in]]!\n\t"
2967 "vst1.8 {q15}, [%[out]]!\n\t"
2968 "\n"
2969 "L_aes_cbc_encrypt_arm32_crypto_256_start_1_%=:\n\t"
2970 "veor.32 q15, q15, q14\n\t"
2971 "aese.8 q15, q0\n\t"
2972 "aesmc.8 q15, q15\n\t"
2973 "aese.8 q15, q1\n\t"
2974 "aesmc.8 q15, q15\n\t"
2975 "aese.8 q15, q2\n\t"
2976 "aesmc.8 q15, q15\n\t"
2977 "aese.8 q15, q3\n\t"
2978 "aesmc.8 q15, q15\n\t"
2979 "aese.8 q15, q4\n\t"
2980 "aesmc.8 q15, q15\n\t"
2981 "aese.8 q15, q5\n\t"
2982 "aesmc.8 q15, q15\n\t"
2983 "aese.8 q15, q6\n\t"
2984 "aesmc.8 q15, q15\n\t"
2985 "aese.8 q15, q7\n\t"
2986 "aesmc.8 q15, q15\n\t"
2987 "aese.8 q15, q8\n\t"
2988 "aesmc.8 q15, q15\n\t"
2989 "aese.8 q15, q9\n\t"
2990 "aesmc.8 q15, q15\n\t"
2991 "aese.8 q15, q10\n\t"
2992 "aesmc.8 q15, q15\n\t"
2993 "vld1.32 {q14}, [r12]\n\t"
2994 "aese.8 q15, q11\n\t"
2995 "aesmc.8 q15, q15\n\t"
2996 "aese.8 q15, q14\n\t"
2997 "aesmc.8 q15, q15\n\t"
2998 "aese.8 q15, q12\n\t"
2999 "veor.32 q15, q15, q13\n\t"
3000 "\n"
3001 "L_aes_cbc_encrypt_arm32_crypto_256_done_%=:\n\t"
3002 "vst1.8 {q15}, [%[out]]!\n\t"
3003#endif /* !NO_AES_256 */
3004 "b L_aes_cbc_encrypt_arm32_crypto_done_%=\n\t"
3005 /* AES_CBC_128 */
3006 "\n"
3007 "L_aes_cbc_encrypt_arm32_crypto_start_128_%=:\n\t"
3008#ifndef NO_AES_128
3009 "vld1.8 {q14}, [%[in]]!\n\t"
3010 "vldm.32 r12!, {q8-q10}\n\t"
3011 "cmp %[sz], #1\n\t"
3012 "beq L_aes_cbc_encrypt_arm32_crypto_128_start_1_%=\n\t"
3013 "cmp %[sz], #4\n\t"
3014 "blt L_aes_cbc_encrypt_arm32_crypto_128_start_2_%=\n\t"
3015 "\n"
3016 "L_aes_cbc_encrypt_arm32_crypto_128_start_4_%=:\n\t"
3017 "veor.32 q15, q15, q14\n\t"
3018 "aese.8 q15, q0\n\t"
3019 "aesmc.8 q15, q15\n\t"
3020 "aese.8 q15, q1\n\t"
3021 "aesmc.8 q15, q15\n\t"
3022 "aese.8 q15, q2\n\t"
3023 "aesmc.8 q15, q15\n\t"
3024 "aese.8 q15, q3\n\t"
3025 "aesmc.8 q15, q15\n\t"
3026 "aese.8 q15, q4\n\t"
3027 "aesmc.8 q15, q15\n\t"
3028 "aese.8 q15, q5\n\t"
3029 "aesmc.8 q15, q15\n\t"
3030 "aese.8 q15, q6\n\t"
3031 "aesmc.8 q15, q15\n\t"
3032 "aese.8 q15, q7\n\t"
3033 "aesmc.8 q15, q15\n\t"
3034 "aese.8 q15, q8\n\t"
3035 "aesmc.8 q15, q15\n\t"
3036 "vld1.8 {q14}, [%[in]]!\n\t"
3037 "aese.8 q15, q9\n\t"
3038 "veor.32 q15, q15, q10\n\t"
3039 "vst1.8 {q15}, [%[out]]!\n\t"
3040 "veor.32 q15, q15, q14\n\t"
3041 "aese.8 q15, q0\n\t"
3042 "aesmc.8 q15, q15\n\t"
3043 "aese.8 q15, q1\n\t"
3044 "aesmc.8 q15, q15\n\t"
3045 "aese.8 q15, q2\n\t"
3046 "aesmc.8 q15, q15\n\t"
3047 "aese.8 q15, q3\n\t"
3048 "aesmc.8 q15, q15\n\t"
3049 "aese.8 q15, q4\n\t"
3050 "aesmc.8 q15, q15\n\t"
3051 "aese.8 q15, q5\n\t"
3052 "aesmc.8 q15, q15\n\t"
3053 "aese.8 q15, q6\n\t"
3054 "aesmc.8 q15, q15\n\t"
3055 "aese.8 q15, q7\n\t"
3056 "aesmc.8 q15, q15\n\t"
3057 "aese.8 q15, q8\n\t"
3058 "aesmc.8 q15, q15\n\t"
3059 "vld1.8 {q14}, [%[in]]!\n\t"
3060 "aese.8 q15, q9\n\t"
3061 "veor.32 q15, q15, q10\n\t"
3062 "vst1.8 {q15}, [%[out]]!\n\t"
3063 "veor.32 q15, q15, q14\n\t"
3064 "aese.8 q15, q0\n\t"
3065 "aesmc.8 q15, q15\n\t"
3066 "aese.8 q15, q1\n\t"
3067 "aesmc.8 q15, q15\n\t"
3068 "aese.8 q15, q2\n\t"
3069 "aesmc.8 q15, q15\n\t"
3070 "aese.8 q15, q3\n\t"
3071 "aesmc.8 q15, q15\n\t"
3072 "aese.8 q15, q4\n\t"
3073 "aesmc.8 q15, q15\n\t"
3074 "aese.8 q15, q5\n\t"
3075 "aesmc.8 q15, q15\n\t"
3076 "aese.8 q15, q6\n\t"
3077 "aesmc.8 q15, q15\n\t"
3078 "aese.8 q15, q7\n\t"
3079 "aesmc.8 q15, q15\n\t"
3080 "aese.8 q15, q8\n\t"
3081 "aesmc.8 q15, q15\n\t"
3082 "vld1.8 {q14}, [%[in]]!\n\t"
3083 "aese.8 q15, q9\n\t"
3084 "veor.32 q15, q15, q10\n\t"
3085 "vst1.8 {q15}, [%[out]]!\n\t"
3086 "veor.32 q15, q15, q14\n\t"
3087 "aese.8 q15, q0\n\t"
3088 "aesmc.8 q15, q15\n\t"
3089 "aese.8 q15, q1\n\t"
3090 "aesmc.8 q15, q15\n\t"
3091 "aese.8 q15, q2\n\t"
3092 "aesmc.8 q15, q15\n\t"
3093 "aese.8 q15, q3\n\t"
3094 "aesmc.8 q15, q15\n\t"
3095 "aese.8 q15, q4\n\t"
3096 "aesmc.8 q15, q15\n\t"
3097 "aese.8 q15, q5\n\t"
3098 "aesmc.8 q15, q15\n\t"
3099 "aese.8 q15, q6\n\t"
3100 "aesmc.8 q15, q15\n\t"
3101 "aese.8 q15, q7\n\t"
3102 "aesmc.8 q15, q15\n\t"
3103 "subs %[sz], %[sz], #4\n\t"
3104 "aese.8 q15, q8\n\t"
3105 "aesmc.8 q15, q15\n\t"
3106 "aese.8 q15, q9\n\t"
3107 "veor.32 q15, q15, q10\n\t"
3108 "beq L_aes_cbc_encrypt_arm32_crypto_128_done_%=\n\t"
3109 "vld1.8 {q14}, [%[in]]!\n\t"
3110 "cmp %[sz], #4\n\t"
3111 "vst1.8 {q15}, [%[out]]!\n\t"
3112 "bge L_aes_cbc_encrypt_arm32_crypto_128_start_4_%=\n\t"
3113 "cmp %[sz], #2\n\t"
3114 "blt L_aes_cbc_encrypt_arm32_crypto_128_start_1_%=\n\t"
3115 "\n"
3116 "L_aes_cbc_encrypt_arm32_crypto_128_start_2_%=:\n\t"
3117 "veor.32 q15, q15, q14\n\t"
3118 "aese.8 q15, q0\n\t"
3119 "aesmc.8 q15, q15\n\t"
3120 "aese.8 q15, q1\n\t"
3121 "aesmc.8 q15, q15\n\t"
3122 "aese.8 q15, q2\n\t"
3123 "aesmc.8 q15, q15\n\t"
3124 "aese.8 q15, q3\n\t"
3125 "aesmc.8 q15, q15\n\t"
3126 "aese.8 q15, q4\n\t"
3127 "aesmc.8 q15, q15\n\t"
3128 "aese.8 q15, q5\n\t"
3129 "aesmc.8 q15, q15\n\t"
3130 "aese.8 q15, q6\n\t"
3131 "aesmc.8 q15, q15\n\t"
3132 "aese.8 q15, q7\n\t"
3133 "aesmc.8 q15, q15\n\t"
3134 "aese.8 q15, q8\n\t"
3135 "aesmc.8 q15, q15\n\t"
3136 "vld1.8 {q14}, [%[in]]!\n\t"
3137 "aese.8 q15, q9\n\t"
3138 "veor.32 q15, q15, q10\n\t"
3139 "vst1.8 {q15}, [%[out]]!\n\t"
3140 "veor.32 q15, q15, q14\n\t"
3141 "aese.8 q15, q0\n\t"
3142 "aesmc.8 q15, q15\n\t"
3143 "aese.8 q15, q1\n\t"
3144 "aesmc.8 q15, q15\n\t"
3145 "aese.8 q15, q2\n\t"
3146 "aesmc.8 q15, q15\n\t"
3147 "aese.8 q15, q3\n\t"
3148 "aesmc.8 q15, q15\n\t"
3149 "aese.8 q15, q4\n\t"
3150 "aesmc.8 q15, q15\n\t"
3151 "aese.8 q15, q5\n\t"
3152 "aesmc.8 q15, q15\n\t"
3153 "aese.8 q15, q6\n\t"
3154 "aesmc.8 q15, q15\n\t"
3155 "aese.8 q15, q7\n\t"
3156 "aesmc.8 q15, q15\n\t"
3157 "subs %[sz], %[sz], #2\n\t"
3158 "aese.8 q15, q8\n\t"
3159 "aesmc.8 q15, q15\n\t"
3160 "aese.8 q15, q9\n\t"
3161 "veor.32 q15, q15, q10\n\t"
3162 "beq L_aes_cbc_encrypt_arm32_crypto_128_done_%=\n\t"
3163 "vld1.8 {q14}, [%[in]]!\n\t"
3164 "vst1.8 {q15}, [%[out]]!\n\t"
3165 "\n"
3166 "L_aes_cbc_encrypt_arm32_crypto_128_start_1_%=:\n\t"
3167 "veor.32 q15, q15, q14\n\t"
3168 "aese.8 q15, q0\n\t"
3169 "aesmc.8 q15, q15\n\t"
3170 "aese.8 q15, q1\n\t"
3171 "aesmc.8 q15, q15\n\t"
3172 "aese.8 q15, q2\n\t"
3173 "aesmc.8 q15, q15\n\t"
3174 "aese.8 q15, q3\n\t"
3175 "aesmc.8 q15, q15\n\t"
3176 "aese.8 q15, q4\n\t"
3177 "aesmc.8 q15, q15\n\t"
3178 "aese.8 q15, q5\n\t"
3179 "aesmc.8 q15, q15\n\t"
3180 "aese.8 q15, q6\n\t"
3181 "aesmc.8 q15, q15\n\t"
3182 "aese.8 q15, q7\n\t"
3183 "aesmc.8 q15, q15\n\t"
3184 "aese.8 q15, q8\n\t"
3185 "aesmc.8 q15, q15\n\t"
3186 "aese.8 q15, q9\n\t"
3187 "veor.32 q15, q15, q10\n\t"
3188 "\n"
3189 "L_aes_cbc_encrypt_arm32_crypto_128_done_%=:\n\t"
3190 "vst1.8 {q15}, [%[out]]!\n\t"
3191#endif /* !NO_AES_128 */
3192 "\n"
3193 "L_aes_cbc_encrypt_arm32_crypto_done_%=:\n\t"
3194 "vst1.32 {q15}, [%[reg]]\n\t"
3195 "pop {%[key], %[nr]}\n\t"
3196#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
3197 : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [reg] "+r" (reg),
3198 [key] "+r" (key), [nr] "+r" (nr)
3199 :
3200#else
3201 :
3202 : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [reg] "r" (reg),
3203 [key] "r" (key), [nr] "r" (nr)
3204#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
3205 : "memory", "cc", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8",
3206 "q9", "q10", "q11", "q12", "q13", "q14", "q15"
3207 );
3208}
3209
3210#ifdef HAVE_AES_DECRYPT
3211#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
3212WC_OMIT_FRAME_POINTER void AES_CBC_decrypt_AARCH32(const byte* in_p,
3213 byte* out_p, word32 sz_p, byte* reg_p, byte* key_p, int nr_p)
3214#else
3215WC_OMIT_FRAME_POINTER void AES_CBC_decrypt_AARCH32(const byte* in, byte* out,
3216 word32 sz, byte* reg, byte* key, int nr)
3217#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
3218{
3219#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
3220 register const byte* in __asm__ ("r0") = (const byte*)in_p;
3221 register byte* out __asm__ ("r1") = (byte*)out_p;
3222 register word32 sz __asm__ ("r2") = (word32)sz_p;
3223 register byte* reg __asm__ ("r3") = (byte*)reg_p;
3224 register byte* key __asm__ ("r12") = (byte*)key_p;
3225 register int nr __asm__ ("lr") = (int)nr_p;
3226#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
3227
3228 __asm__ __volatile__ (
3229 "push {%[key], %[nr]}\n\t"
3230 "ldr r12, [sp]\n\t"
3231 "ldr lr, [sp, #4]\n\t"
3232 "vldm.32 r12!, {q0-q7}\n\t"
3233 "vld1.32 {q13}, [%[reg]]\n\t"
3234 "lsr %[sz], %[sz], #4\n\t"
3235 "cmp lr, #12\n\t"
3236 "blt L_aes_cbc_decrypt_blocks_arm32_crypto_start_128_%=\n\t"
3237 "bgt L_aes_cbc_decrypt_blocks_arm32_crypto_start_256_%=\n\t"
3238 /* AES_CBC_192 */
3239#ifndef NO_AES_192
3240 "vld1.32 {q8}, [r12]!\n\t"
3241 "cmp %[sz], #1\n\t"
3242 "beq L_aes_cbc_decrypt_blocks_arm32_crypto_192_start_1_%=\n\t"
3243 "\n"
3244 "L_aes_cbc_decrypt_blocks_arm32_crypto_192_start_2_%=:\n\t"
3245 "vld1.8 {q14-q15}, [%[in]]!\n\t"
3246 "vmov q11, q13\n\t"
3247 "vmov q12, q14\n\t"
3248 "vmov q13, q15\n\t"
3249 "aesd.8 q14, q0\n\t"
3250 "aesimc.8 q14, q14\n\t"
3251 "aesd.8 q15, q0\n\t"
3252 "aesimc.8 q15, q15\n\t"
3253 "aesd.8 q14, q1\n\t"
3254 "aesimc.8 q14, q14\n\t"
3255 "aesd.8 q15, q1\n\t"
3256 "aesimc.8 q15, q15\n\t"
3257 "aesd.8 q14, q2\n\t"
3258 "aesimc.8 q14, q14\n\t"
3259 "aesd.8 q15, q2\n\t"
3260 "aesimc.8 q15, q15\n\t"
3261 "aesd.8 q14, q3\n\t"
3262 "aesimc.8 q14, q14\n\t"
3263 "aesd.8 q15, q3\n\t"
3264 "aesimc.8 q15, q15\n\t"
3265 "aesd.8 q14, q4\n\t"
3266 "aesimc.8 q14, q14\n\t"
3267 "aesd.8 q15, q4\n\t"
3268 "aesimc.8 q15, q15\n\t"
3269 "aesd.8 q14, q5\n\t"
3270 "aesimc.8 q14, q14\n\t"
3271 "aesd.8 q15, q5\n\t"
3272 "aesimc.8 q15, q15\n\t"
3273 "aesd.8 q14, q6\n\t"
3274 "aesimc.8 q14, q14\n\t"
3275 "aesd.8 q15, q6\n\t"
3276 "aesimc.8 q15, q15\n\t"
3277 "aesd.8 q14, q7\n\t"
3278 "aesimc.8 q14, q14\n\t"
3279 "aesd.8 q15, q7\n\t"
3280 "aesimc.8 q15, q15\n\t"
3281 "vld1.32 {q9}, [r12]!\n\t"
3282 "aesd.8 q14, q8\n\t"
3283 "aesimc.8 q14, q14\n\t"
3284 "aesd.8 q15, q8\n\t"
3285 "aesimc.8 q15, q15\n\t"
3286 "vld1.32 {q10}, [r12]!\n\t"
3287 "aesd.8 q14, q9\n\t"
3288 "aesimc.8 q14, q14\n\t"
3289 "aesd.8 q15, q9\n\t"
3290 "aesimc.8 q15, q15\n\t"
3291 "vld1.32 {q9}, [r12]!\n\t"
3292 "aesd.8 q14, q10\n\t"
3293 "aesimc.8 q14, q14\n\t"
3294 "aesd.8 q15, q10\n\t"
3295 "aesimc.8 q15, q15\n\t"
3296 "vld1.32 {q10}, [r12]\n\t"
3297 "aesd.8 q14, q9\n\t"
3298 "aesd.8 q15, q9\n\t"
3299 "sub %[sz], %[sz], #2\n\t"
3300 "veor.32 q14, q14, q10\n\t"
3301 "veor.32 q15, q15, q10\n\t"
3302 "cmp %[sz], #1\n\t"
3303 "veor.32 q14, q14, q11\n\t"
3304 "veor.32 q15, q15, q12\n\t"
3305 "vst1.8 {q14-q15}, [%[out]]!\n\t"
3306 "sub r12, r12, #48\n\t"
3307 "blt L_aes_cbc_decrypt_blocks_arm32_crypto_192_done_%=\n\t"
3308 "bgt L_aes_cbc_decrypt_blocks_arm32_crypto_192_start_2_%=\n\t"
3309 "\n"
3310 "L_aes_cbc_decrypt_blocks_arm32_crypto_192_start_1_%=:\n\t"
3311 "vld1.8 {q14}, [%[in]]!\n\t"
3312 "vmov q11, q13\n\t"
3313 "vmov q13, q14\n\t"
3314 "aesd.8 q14, q0\n\t"
3315 "aesimc.8 q14, q14\n\t"
3316 "aesd.8 q14, q1\n\t"
3317 "aesimc.8 q14, q14\n\t"
3318 "aesd.8 q14, q2\n\t"
3319 "aesimc.8 q14, q14\n\t"
3320 "aesd.8 q14, q3\n\t"
3321 "aesimc.8 q14, q14\n\t"
3322 "aesd.8 q14, q4\n\t"
3323 "aesimc.8 q14, q14\n\t"
3324 "aesd.8 q14, q5\n\t"
3325 "aesimc.8 q14, q14\n\t"
3326 "aesd.8 q14, q6\n\t"
3327 "aesimc.8 q14, q14\n\t"
3328 "aesd.8 q14, q7\n\t"
3329 "aesimc.8 q14, q14\n\t"
3330 "vld1.32 {q9}, [r12]!\n\t"
3331 "aesd.8 q14, q8\n\t"
3332 "aesimc.8 q14, q14\n\t"
3333 "vld1.32 {q10}, [r12]!\n\t"
3334 "aesd.8 q14, q9\n\t"
3335 "aesimc.8 q14, q14\n\t"
3336 "vld1.32 {q9}, [r12]!\n\t"
3337 "aesd.8 q14, q10\n\t"
3338 "aesimc.8 q14, q14\n\t"
3339 "vld1.32 {q10}, [r12]\n\t"
3340 "aesd.8 q14, q9\n\t"
3341 "veor.32 q14, q14, q10\n\t"
3342 "veor.32 q14, q14, q11\n\t"
3343 "vst1.8 {q14}, [%[out]]!\n\t"
3344 "\n"
3345 "L_aes_cbc_decrypt_blocks_arm32_crypto_192_done_%=:\n\t"
3346#endif /* !NO_AES_192 */
3347 "b L_aes_cbc_decrypt_blocks_arm32_crypto_done_%=\n\t"
3348 /* AES_CBC_256 */
3349 "\n"
3350 "L_aes_cbc_decrypt_blocks_arm32_crypto_start_256_%=:\n\t"
3351#ifndef NO_AES_256
3352 "vld1.32 {q8}, [r12]!\n\t"
3353 "cmp %[sz], #1\n\t"
3354 "beq L_aes_cbc_decrypt_blocks_arm32_crypto_256_start_1_%=\n\t"
3355 "\n"
3356 "L_aes_cbc_decrypt_blocks_arm32_crypto_256_start_2_%=:\n\t"
3357 "vld1.8 {q14-q15}, [%[in]]!\n\t"
3358 "vmov q11, q13\n\t"
3359 "vmov q12, q14\n\t"
3360 "vmov q13, q15\n\t"
3361 "aesd.8 q14, q0\n\t"
3362 "aesimc.8 q14, q14\n\t"
3363 "aesd.8 q15, q0\n\t"
3364 "aesimc.8 q15, q15\n\t"
3365 "aesd.8 q14, q1\n\t"
3366 "aesimc.8 q14, q14\n\t"
3367 "aesd.8 q15, q1\n\t"
3368 "aesimc.8 q15, q15\n\t"
3369 "aesd.8 q14, q2\n\t"
3370 "aesimc.8 q14, q14\n\t"
3371 "aesd.8 q15, q2\n\t"
3372 "aesimc.8 q15, q15\n\t"
3373 "aesd.8 q14, q3\n\t"
3374 "aesimc.8 q14, q14\n\t"
3375 "aesd.8 q15, q3\n\t"
3376 "aesimc.8 q15, q15\n\t"
3377 "aesd.8 q14, q4\n\t"
3378 "aesimc.8 q14, q14\n\t"
3379 "aesd.8 q15, q4\n\t"
3380 "aesimc.8 q15, q15\n\t"
3381 "aesd.8 q14, q5\n\t"
3382 "aesimc.8 q14, q14\n\t"
3383 "aesd.8 q15, q5\n\t"
3384 "aesimc.8 q15, q15\n\t"
3385 "aesd.8 q14, q6\n\t"
3386 "aesimc.8 q14, q14\n\t"
3387 "aesd.8 q15, q6\n\t"
3388 "aesimc.8 q15, q15\n\t"
3389 "aesd.8 q14, q7\n\t"
3390 "aesimc.8 q14, q14\n\t"
3391 "aesd.8 q15, q7\n\t"
3392 "aesimc.8 q15, q15\n\t"
3393 "vld1.32 {q9}, [r12]!\n\t"
3394 "aesd.8 q14, q8\n\t"
3395 "aesimc.8 q14, q14\n\t"
3396 "aesd.8 q15, q8\n\t"
3397 "aesimc.8 q15, q15\n\t"
3398 "vld1.32 {q10}, [r12]!\n\t"
3399 "aesd.8 q14, q9\n\t"
3400 "aesimc.8 q14, q14\n\t"
3401 "aesd.8 q15, q9\n\t"
3402 "aesimc.8 q15, q15\n\t"
3403 "vld1.32 {q9}, [r12]!\n\t"
3404 "aesd.8 q14, q10\n\t"
3405 "aesimc.8 q14, q14\n\t"
3406 "aesd.8 q15, q10\n\t"
3407 "aesimc.8 q15, q15\n\t"
3408 "vld1.32 {q10}, [r12]!\n\t"
3409 "aesd.8 q14, q9\n\t"
3410 "aesimc.8 q14, q14\n\t"
3411 "aesd.8 q15, q9\n\t"
3412 "aesimc.8 q15, q15\n\t"
3413 "vld1.32 {q9}, [r12]!\n\t"
3414 "aesd.8 q14, q10\n\t"
3415 "aesimc.8 q14, q14\n\t"
3416 "aesd.8 q15, q10\n\t"
3417 "aesimc.8 q15, q15\n\t"
3418 "vld1.32 {q10}, [r12]\n\t"
3419 "aesd.8 q14, q9\n\t"
3420 "aesd.8 q15, q9\n\t"
3421 "sub %[sz], %[sz], #2\n\t"
3422 "veor.32 q14, q14, q10\n\t"
3423 "veor.32 q15, q15, q10\n\t"
3424 "cmp %[sz], #1\n\t"
3425 "veor.32 q14, q14, q11\n\t"
3426 "veor.32 q15, q15, q12\n\t"
3427 "vst1.8 {q14-q15}, [%[out]]!\n\t"
3428 "sub r12, r12, #0x50\n\t"
3429 "blt L_aes_cbc_decrypt_blocks_arm32_crypto_256_done_%=\n\t"
3430 "bgt L_aes_cbc_decrypt_blocks_arm32_crypto_256_start_2_%=\n\t"
3431 "\n"
3432 "L_aes_cbc_decrypt_blocks_arm32_crypto_256_start_1_%=:\n\t"
3433 "vld1.8 {q14}, [%[in]]!\n\t"
3434 "vmov q11, q13\n\t"
3435 "vmov q13, q14\n\t"
3436 "aesd.8 q14, q0\n\t"
3437 "aesimc.8 q14, q14\n\t"
3438 "aesd.8 q14, q1\n\t"
3439 "aesimc.8 q14, q14\n\t"
3440 "aesd.8 q14, q2\n\t"
3441 "aesimc.8 q14, q14\n\t"
3442 "aesd.8 q14, q3\n\t"
3443 "aesimc.8 q14, q14\n\t"
3444 "aesd.8 q14, q4\n\t"
3445 "aesimc.8 q14, q14\n\t"
3446 "aesd.8 q14, q5\n\t"
3447 "aesimc.8 q14, q14\n\t"
3448 "aesd.8 q14, q6\n\t"
3449 "aesimc.8 q14, q14\n\t"
3450 "aesd.8 q14, q7\n\t"
3451 "aesimc.8 q14, q14\n\t"
3452 "vld1.32 {q9}, [r12]!\n\t"
3453 "aesd.8 q14, q8\n\t"
3454 "aesimc.8 q14, q14\n\t"
3455 "vld1.32 {q10}, [r12]!\n\t"
3456 "aesd.8 q14, q9\n\t"
3457 "aesimc.8 q14, q14\n\t"
3458 "vld1.32 {q9}, [r12]!\n\t"
3459 "aesd.8 q14, q10\n\t"
3460 "aesimc.8 q14, q14\n\t"
3461 "vld1.32 {q10}, [r12]!\n\t"
3462 "aesd.8 q14, q9\n\t"
3463 "aesimc.8 q14, q14\n\t"
3464 "vld1.32 {q9}, [r12]!\n\t"
3465 "aesd.8 q14, q10\n\t"
3466 "aesimc.8 q14, q14\n\t"
3467 "vld1.32 {q10}, [r12]\n\t"
3468 "aesd.8 q14, q9\n\t"
3469 "veor.32 q14, q14, q10\n\t"
3470 "veor.32 q14, q14, q11\n\t"
3471 "vst1.8 {q14}, [%[out]]!\n\t"
3472 "\n"
3473 "L_aes_cbc_decrypt_blocks_arm32_crypto_256_done_%=:\n\t"
3474#endif /* !NO_AES_256 */
3475 "b L_aes_cbc_decrypt_blocks_arm32_crypto_done_%=\n\t"
3476 /* AES_CBC_128 */
3477 "\n"
3478 "L_aes_cbc_decrypt_blocks_arm32_crypto_start_128_%=:\n\t"
3479#ifndef NO_AES_128
3480 "vldm.32 r12!, {q8-q10}\n\t"
3481 "cmp %[sz], #1\n\t"
3482 "beq L_aes_cbc_decrypt_blocks_arm32_crypto_128_start_1_%=\n\t"
3483 "\n"
3484 "L_aes_cbc_decrypt_blocks_arm32_crypto_128_start_2_%=:\n\t"
3485 "vld1.8 {q14-q15}, [%[in]]!\n\t"
3486 "vmov q11, q13\n\t"
3487 "vmov q12, q14\n\t"
3488 "vmov q13, q15\n\t"
3489 "aesd.8 q14, q0\n\t"
3490 "aesimc.8 q14, q14\n\t"
3491 "aesd.8 q15, q0\n\t"
3492 "aesimc.8 q15, q15\n\t"
3493 "aesd.8 q14, q1\n\t"
3494 "aesimc.8 q14, q14\n\t"
3495 "aesd.8 q15, q1\n\t"
3496 "aesimc.8 q15, q15\n\t"
3497 "aesd.8 q14, q2\n\t"
3498 "aesimc.8 q14, q14\n\t"
3499 "aesd.8 q15, q2\n\t"
3500 "aesimc.8 q15, q15\n\t"
3501 "aesd.8 q14, q3\n\t"
3502 "aesimc.8 q14, q14\n\t"
3503 "aesd.8 q15, q3\n\t"
3504 "aesimc.8 q15, q15\n\t"
3505 "aesd.8 q14, q4\n\t"
3506 "aesimc.8 q14, q14\n\t"
3507 "aesd.8 q15, q4\n\t"
3508 "aesimc.8 q15, q15\n\t"
3509 "aesd.8 q14, q5\n\t"
3510 "aesimc.8 q14, q14\n\t"
3511 "aesd.8 q15, q5\n\t"
3512 "aesimc.8 q15, q15\n\t"
3513 "aesd.8 q14, q6\n\t"
3514 "aesimc.8 q14, q14\n\t"
3515 "aesd.8 q15, q6\n\t"
3516 "aesimc.8 q15, q15\n\t"
3517 "aesd.8 q14, q7\n\t"
3518 "aesimc.8 q14, q14\n\t"
3519 "aesd.8 q15, q7\n\t"
3520 "aesimc.8 q15, q15\n\t"
3521 "aesd.8 q14, q8\n\t"
3522 "aesimc.8 q14, q14\n\t"
3523 "aesd.8 q15, q8\n\t"
3524 "aesimc.8 q15, q15\n\t"
3525 "aesd.8 q14, q9\n\t"
3526 "aesd.8 q15, q9\n\t"
3527 "sub %[sz], %[sz], #2\n\t"
3528 "veor.32 q14, q14, q10\n\t"
3529 "veor.32 q15, q15, q10\n\t"
3530 "cmp %[sz], #1\n\t"
3531 "veor.32 q14, q14, q11\n\t"
3532 "veor.32 q15, q15, q12\n\t"
3533 "vst1.8 {q14-q15}, [%[out]]!\n\t"
3534 "blt L_aes_cbc_decrypt_blocks_arm32_crypto_128_done_%=\n\t"
3535 "bgt L_aes_cbc_decrypt_blocks_arm32_crypto_128_start_2_%=\n\t"
3536 "\n"
3537 "L_aes_cbc_decrypt_blocks_arm32_crypto_128_start_1_%=:\n\t"
3538 "vld1.8 {q14}, [%[in]]!\n\t"
3539 "vmov q11, q13\n\t"
3540 "vmov q13, q14\n\t"
3541 "aesd.8 q14, q0\n\t"
3542 "aesimc.8 q14, q14\n\t"
3543 "aesd.8 q14, q1\n\t"
3544 "aesimc.8 q14, q14\n\t"
3545 "aesd.8 q14, q2\n\t"
3546 "aesimc.8 q14, q14\n\t"
3547 "aesd.8 q14, q3\n\t"
3548 "aesimc.8 q14, q14\n\t"
3549 "aesd.8 q14, q4\n\t"
3550 "aesimc.8 q14, q14\n\t"
3551 "aesd.8 q14, q5\n\t"
3552 "aesimc.8 q14, q14\n\t"
3553 "aesd.8 q14, q6\n\t"
3554 "aesimc.8 q14, q14\n\t"
3555 "aesd.8 q14, q7\n\t"
3556 "aesimc.8 q14, q14\n\t"
3557 "aesd.8 q14, q8\n\t"
3558 "aesimc.8 q14, q14\n\t"
3559 "aesd.8 q14, q9\n\t"
3560 "veor.32 q14, q14, q10\n\t"
3561 "veor.32 q14, q14, q11\n\t"
3562 "vst1.8 {q14}, [%[out]]!\n\t"
3563 "\n"
3564 "L_aes_cbc_decrypt_blocks_arm32_crypto_128_done_%=:\n\t"
3565#endif /* !NO_AES_128 */
3566 "\n"
3567 "L_aes_cbc_decrypt_blocks_arm32_crypto_done_%=:\n\t"
3568 "vst1.32 {q13}, [%[reg]]\n\t"
3569 "pop {%[key], %[nr]}\n\t"
3570#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
3571 : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [reg] "+r" (reg),
3572 [key] "+r" (key), [nr] "+r" (nr)
3573 :
3574#else
3575 :
3576 : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [reg] "r" (reg),
3577 [key] "r" (key), [nr] "r" (nr)
3578#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
3579 : "memory", "cc", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8",
3580 "q9", "q10", "q11", "q12", "q13", "q14", "q15"
3581 );
3582}
3583
3584#endif /* HAVE_AES_DECRYPT */
3585#endif /* HAVE_AES_CBC */
3586#ifdef WOLFSSL_AES_COUNTER
3587#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
3588WC_OMIT_FRAME_POINTER void AES_CTR_encrypt_AARCH32(const byte* in_p,
3589 byte* out_p, word32 sz_p, byte* reg_p, byte* key_p, byte* tmp_p,
3590 word32* left_p, word32 nr_p)
3591#else
3592WC_OMIT_FRAME_POINTER void AES_CTR_encrypt_AARCH32(const byte* in, byte* out,
3593 word32 sz, byte* reg, byte* key, byte* tmp, word32* left, word32 nr)
3594#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
3595{
3596#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
3597 register const byte* in __asm__ ("r0") = (const byte*)in_p;
3598 register byte* out __asm__ ("r1") = (byte*)out_p;
3599 register word32 sz __asm__ ("r2") = (word32)sz_p;
3600 register byte* reg __asm__ ("r3") = (byte*)reg_p;
3601 register byte* key __asm__ ("r12") = (byte*)key_p;
3602 register byte* tmp __asm__ ("lr") = (byte*)tmp_p;
3603 register word32* left __asm__ ("r4") = (word32*)left_p;
3604 register word32 nr __asm__ ("r5") = (word32)nr_p;
3605#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
3606
3607 __asm__ __volatile__ (
3608 "push {%[left], %[nr]}\n\t"
3609 "push {%[key], %[tmp]}\n\t"
3610 "vld1.32 {q0}, [%[reg]]\n\t"
3611 "ldr r12, [sp]\n\t"
3612 "vrev32.8 q2, q0\n\t"
3613 "lsr r4, %[sz], #4\n\t"
3614 "vmov r5, r6, d4\n\t"
3615 "and %[sz], %[sz], #15\n\t"
3616 "vmov r7, r8, d5\n\t"
3617 "vldm.32 r12!, {q3-q10}\n\t"
3618 "ldr lr, [sp, #12]\n\t"
3619 "cmp lr, #12\n\t"
3620 "blt L_aes_ctr_encrypt_arm32_crypto_start_128_%=\n\t"
3621 "bgt L_aes_ctr_encrypt_arm32_crypto_start_256_%=\n\t"
3622 /* AES_CTR_192 */
3623#ifndef NO_AES_192
3624 "vldm.32 r12!, {q11-q13}\n\t"
3625 "mov lr, #1\n\t"
3626 "cmp r4, #1\n\t"
3627 "blt L_aes_ctr_encrypt_arm32_crypto_192_done_%=\n\t"
3628 "beq L_aes_ctr_encrypt_arm32_crypto_192_start_1_%=\n\t"
3629 "adds r8, r8, #1\n\t"
3630 "adcs r7, r7, #0\n\t"
3631 "adcs r6, r6, #0\n\t"
3632 "adc r5, r5, #0\n\t"
3633 "vmov d3, r7, r8\n\t"
3634 "vmov d2, r5, r6\n\t"
3635 "vrev32.8 q1, q1\n\t"
3636 "\n"
3637 "L_aes_ctr_encrypt_arm32_crypto_192_start_2_%=:\n\t"
3638 "aese.8 q0, q3\n\t"
3639 "aesmc.8 q0, q0\n\t"
3640 "aese.8 q1, q3\n\t"
3641 "aesmc.8 q1, q1\n\t"
3642 "adds r8, r8, #1\n\t"
3643 "aese.8 q0, q4\n\t"
3644 "aesmc.8 q0, q0\n\t"
3645 "aese.8 q1, q4\n\t"
3646 "aesmc.8 q1, q1\n\t"
3647 "adcs r7, r7, #0\n\t"
3648 "aese.8 q0, q5\n\t"
3649 "aesmc.8 q0, q0\n\t"
3650 "aese.8 q1, q5\n\t"
3651 "aesmc.8 q1, q1\n\t"
3652 "adcs r6, r6, #0\n\t"
3653 "aese.8 q0, q6\n\t"
3654 "aesmc.8 q0, q0\n\t"
3655 "aese.8 q1, q6\n\t"
3656 "aesmc.8 q1, q1\n\t"
3657 "adc r5, r5, #0\n\t"
3658 "aese.8 q0, q7\n\t"
3659 "aesmc.8 q0, q0\n\t"
3660 "aese.8 q1, q7\n\t"
3661 "aesmc.8 q1, q1\n\t"
3662 "aese.8 q0, q8\n\t"
3663 "aesmc.8 q0, q0\n\t"
3664 "aese.8 q1, q8\n\t"
3665 "aesmc.8 q1, q1\n\t"
3666 "aese.8 q0, q9\n\t"
3667 "aesmc.8 q0, q0\n\t"
3668 "aese.8 q1, q9\n\t"
3669 "aesmc.8 q1, q1\n\t"
3670 "aese.8 q0, q10\n\t"
3671 "aesmc.8 q0, q0\n\t"
3672 "aese.8 q1, q10\n\t"
3673 "aesmc.8 q1, q1\n\t"
3674 "aese.8 q0, q11\n\t"
3675 "aesmc.8 q0, q0\n\t"
3676 "aese.8 q1, q11\n\t"
3677 "aesmc.8 q1, q1\n\t"
3678 "aese.8 q0, q12\n\t"
3679 "aesmc.8 q0, q0\n\t"
3680 "aese.8 q1, q12\n\t"
3681 "aesmc.8 q1, q1\n\t"
3682 "vld1.32 {q14}, [r12]!\n\t"
3683 "vmov d5, r7, r8\n\t"
3684 "aese.8 q0, q13\n\t"
3685 "aesmc.8 q0, q0\n\t"
3686 "aese.8 q1, q13\n\t"
3687 "aesmc.8 q1, q1\n\t"
3688 "vld1.32 {q15}, [r12]\n\t"
3689 "vmov d4, r5, r6\n\t"
3690 "aese.8 q0, q14\n\t"
3691 "aese.8 q1, q14\n\t"
3692 "sub r4, r4, #2\n\t"
3693 "veor.32 q0, q0, q15\n\t"
3694 "veor.32 q1, q1, q15\n\t"
3695 "adds r8, r8, #1\n\t"
3696 "vld1.8 {q14-q15}, [%[in]]!\n\t"
3697 "adcs r7, r7, #0\n\t"
3698 "sub r12, r12, #16\n\t"
3699 "veor.32 q14, q14, q0\n\t"
3700 "veor.32 q15, q15, q1\n\t"
3701 "adcs r6, r6, #0\n\t"
3702 "vrev32.8 q0, q2\n\t"
3703 "adc r5, r5, #0\n\t"
3704 "vmov d2, r5, r6\n\t"
3705 "vmov d3, r7, r8\n\t"
3706 "cmp r4, #1\n\t"
3707 "vst1.8 {q14-q15}, [%[out]]!\n\t"
3708 "vrev32.8 q1, q1\n\t"
3709 "bgt L_aes_ctr_encrypt_arm32_crypto_192_start_2_%=\n\t"
3710 "mov lr, #0\n\t"
3711 "blt L_aes_ctr_encrypt_arm32_crypto_192_done_%=\n\t"
3712 "\n"
3713 "L_aes_ctr_encrypt_arm32_crypto_192_start_1_%=:\n\t"
3714 "aese.8 q0, q3\n\t"
3715 "aesmc.8 q0, q0\n\t"
3716 "adds r8, r8, lr\n\t"
3717 "aese.8 q0, q4\n\t"
3718 "aesmc.8 q0, q0\n\t"
3719 "adcs r7, r7, #0\n\t"
3720 "aese.8 q0, q5\n\t"
3721 "aesmc.8 q0, q0\n\t"
3722 "adcs r6, r6, #0\n\t"
3723 "aese.8 q0, q6\n\t"
3724 "aesmc.8 q0, q0\n\t"
3725 "adc r5, r5, #0\n\t"
3726 "aese.8 q0, q7\n\t"
3727 "aesmc.8 q0, q0\n\t"
3728 "vmov d5, r7, r8\n\t"
3729 "aese.8 q0, q8\n\t"
3730 "aesmc.8 q0, q0\n\t"
3731 "vmov d4, r5, r6\n\t"
3732 "aese.8 q0, q9\n\t"
3733 "aesmc.8 q0, q0\n\t"
3734 "aese.8 q0, q10\n\t"
3735 "aesmc.8 q0, q0\n\t"
3736 "aese.8 q0, q11\n\t"
3737 "aesmc.8 q0, q0\n\t"
3738 "aese.8 q0, q12\n\t"
3739 "aesmc.8 q0, q0\n\t"
3740 "vld1.32 {q14}, [r12]!\n\t"
3741 "aese.8 q0, q13\n\t"
3742 "aesmc.8 q0, q0\n\t"
3743 "vld1.32 {q15}, [r12]\n\t"
3744 "aese.8 q0, q14\n\t"
3745 "vld1.8 {q14}, [%[in]]!\n\t"
3746 "veor.32 q0, q0, q15\n\t"
3747 "veor.32 q14, q14, q0\n\t"
3748 "sub r12, r12, #16\n\t"
3749 "vst1.8 {q14}, [%[out]]!\n\t"
3750 "mov lr, #1\n\t"
3751 "vrev32.8 q0, q2\n\t"
3752 "\n"
3753 "L_aes_ctr_encrypt_arm32_crypto_192_done_%=:\n\t"
3754 "cmp %[sz], #0\n\t"
3755 "beq L_aes_ctr_encrypt_arm32_crypto_192_partial_done_%=\n\t"
3756 "ldr r4, [sp, #8]\n\t"
3757 "aese.8 q0, q3\n\t"
3758 "aesmc.8 q0, q0\n\t"
3759 "adds r8, r8, lr\n\t"
3760 "aese.8 q0, q4\n\t"
3761 "aesmc.8 q0, q0\n\t"
3762 "adcs r7, r7, #0\n\t"
3763 "aese.8 q0, q5\n\t"
3764 "aesmc.8 q0, q0\n\t"
3765 "adcs r6, r6, #0\n\t"
3766 "aese.8 q0, q6\n\t"
3767 "aesmc.8 q0, q0\n\t"
3768 "adc r5, r5, #0\n\t"
3769 "aese.8 q0, q7\n\t"
3770 "aesmc.8 q0, q0\n\t"
3771 "vmov d5, r7, r8\n\t"
3772 "aese.8 q0, q8\n\t"
3773 "aesmc.8 q0, q0\n\t"
3774 "vmov d4, r5, r6\n\t"
3775 "aese.8 q0, q9\n\t"
3776 "aesmc.8 q0, q0\n\t"
3777 "aese.8 q0, q10\n\t"
3778 "aesmc.8 q0, q0\n\t"
3779 "aese.8 q0, q11\n\t"
3780 "aesmc.8 q0, q0\n\t"
3781 "aese.8 q0, q12\n\t"
3782 "aesmc.8 q0, q0\n\t"
3783 "vld1.32 {q14}, [r12]!\n\t"
3784 "aese.8 q0, q13\n\t"
3785 "aesmc.8 q0, q0\n\t"
3786 "vld1.32 {q15}, [r12]\n\t"
3787 "ldr lr, [sp, #4]\n\t"
3788 "aese.8 q0, q14\n\t"
3789 "veor.32 q0, q0, q15\n\t"
3790 "vst1.32 {q0}, [lr]\n\t"
3791 "vmov q0, q2\n\t"
3792 "mov r5, #16\n\t"
3793 "sub r5, r5, %[sz]\n\t"
3794 "\n"
3795 "L_aes_ctr_encrypt_arm32_crypto_192_start_byte_%=:\n\t"
3796 "ldrb r7, [lr], #1\n\t"
3797 "ldrb r8, [%[in]], #1\n\t"
3798 "eor r7, r7, r8\n\t"
3799 "subs %[sz], %[sz], #1\n\t"
3800 "strb r7, [%[out]], #1\n\t"
3801 "bgt L_aes_ctr_encrypt_arm32_crypto_192_start_byte_%=\n\t"
3802 "vrev32.8 q0, q2\n\t"
3803 "str r5, [r4]\n\t"
3804 "\n"
3805 "L_aes_ctr_encrypt_arm32_crypto_192_partial_done_%=:\n\t"
3806#endif /* !NO_AES_192 */
3807 "b L_aes_ctr_encrypt_arm32_crypto_done_%=\n\t"
3808 /* AES_CTR_256 */
3809 "\n"
3810 "L_aes_ctr_encrypt_arm32_crypto_start_256_%=:\n\t"
3811#ifndef NO_AES_256
3812 "vldm.32 r12!, {q11-q13}\n\t"
3813 "mov lr, #1\n\t"
3814 "cmp r4, #1\n\t"
3815 "blt L_aes_ctr_encrypt_arm32_crypto_256_done_%=\n\t"
3816 "beq L_aes_ctr_encrypt_arm32_crypto_256_start_1_%=\n\t"
3817 "adds r8, r8, #1\n\t"
3818 "adcs r7, r7, #0\n\t"
3819 "adcs r6, r6, #0\n\t"
3820 "adc r5, r5, #0\n\t"
3821 "vmov d3, r7, r8\n\t"
3822 "vmov d2, r5, r6\n\t"
3823 "vrev32.8 q1, q1\n\t"
3824 "\n"
3825 "L_aes_ctr_encrypt_arm32_crypto_256_start_2_%=:\n\t"
3826 "aese.8 q0, q3\n\t"
3827 "aesmc.8 q0, q0\n\t"
3828 "aese.8 q1, q3\n\t"
3829 "aesmc.8 q1, q1\n\t"
3830 "adds r8, r8, #1\n\t"
3831 "aese.8 q0, q4\n\t"
3832 "aesmc.8 q0, q0\n\t"
3833 "aese.8 q1, q4\n\t"
3834 "aesmc.8 q1, q1\n\t"
3835 "adcs r7, r7, #0\n\t"
3836 "aese.8 q0, q5\n\t"
3837 "aesmc.8 q0, q0\n\t"
3838 "aese.8 q1, q5\n\t"
3839 "aesmc.8 q1, q1\n\t"
3840 "adcs r6, r6, #0\n\t"
3841 "aese.8 q0, q6\n\t"
3842 "aesmc.8 q0, q0\n\t"
3843 "aese.8 q1, q6\n\t"
3844 "aesmc.8 q1, q1\n\t"
3845 "adc r5, r5, #0\n\t"
3846 "aese.8 q0, q7\n\t"
3847 "aesmc.8 q0, q0\n\t"
3848 "aese.8 q1, q7\n\t"
3849 "aesmc.8 q1, q1\n\t"
3850 "aese.8 q0, q8\n\t"
3851 "aesmc.8 q0, q0\n\t"
3852 "aese.8 q1, q8\n\t"
3853 "aesmc.8 q1, q1\n\t"
3854 "aese.8 q0, q9\n\t"
3855 "aesmc.8 q0, q0\n\t"
3856 "aese.8 q1, q9\n\t"
3857 "aesmc.8 q1, q1\n\t"
3858 "aese.8 q0, q10\n\t"
3859 "aesmc.8 q0, q0\n\t"
3860 "aese.8 q1, q10\n\t"
3861 "aesmc.8 q1, q1\n\t"
3862 "aese.8 q0, q11\n\t"
3863 "aesmc.8 q0, q0\n\t"
3864 "aese.8 q1, q11\n\t"
3865 "aesmc.8 q1, q1\n\t"
3866 "aese.8 q0, q12\n\t"
3867 "aesmc.8 q0, q0\n\t"
3868 "aese.8 q1, q12\n\t"
3869 "aesmc.8 q1, q1\n\t"
3870 "vld1.32 {q14}, [r12]!\n\t"
3871 "vmov d5, r7, r8\n\t"
3872 "aese.8 q0, q13\n\t"
3873 "aesmc.8 q0, q0\n\t"
3874 "aese.8 q1, q13\n\t"
3875 "aesmc.8 q1, q1\n\t"
3876 "vld1.32 {q15}, [r12]!\n\t"
3877 "vmov d4, r5, r6\n\t"
3878 "aese.8 q0, q14\n\t"
3879 "aesmc.8 q0, q0\n\t"
3880 "aese.8 q1, q14\n\t"
3881 "aesmc.8 q1, q1\n\t"
3882 "vld1.32 {q14}, [r12]!\n\t"
3883 "adds r8, r8, #1\n\t"
3884 "aese.8 q0, q15\n\t"
3885 "aesmc.8 q0, q0\n\t"
3886 "aese.8 q1, q15\n\t"
3887 "aesmc.8 q1, q1\n\t"
3888 "vld1.32 {q15}, [r12]\n\t"
3889 "adcs r7, r7, #0\n\t"
3890 "aese.8 q0, q14\n\t"
3891 "aese.8 q1, q14\n\t"
3892 "sub r4, r4, #2\n\t"
3893 "veor.32 q0, q0, q15\n\t"
3894 "veor.32 q1, q1, q15\n\t"
3895 "adcs r6, r6, #0\n\t"
3896 "vld1.8 {q14-q15}, [%[in]]!\n\t"
3897 "sub r12, r12, #48\n\t"
3898 "veor.32 q14, q14, q0\n\t"
3899 "veor.32 q15, q15, q1\n\t"
3900 "adc r5, r5, #0\n\t"
3901 "vrev32.8 q0, q2\n\t"
3902 "vmov d2, r5, r6\n\t"
3903 "vmov d3, r7, r8\n\t"
3904 "cmp r4, #1\n\t"
3905 "vst1.8 {q14-q15}, [%[out]]!\n\t"
3906 "vrev32.8 q1, q1\n\t"
3907 "bgt L_aes_ctr_encrypt_arm32_crypto_256_start_2_%=\n\t"
3908 "mov lr, #0\n\t"
3909 "blt L_aes_ctr_encrypt_arm32_crypto_256_done_%=\n\t"
3910 "\n"
3911 "L_aes_ctr_encrypt_arm32_crypto_256_start_1_%=:\n\t"
3912 "aese.8 q0, q3\n\t"
3913 "aesmc.8 q0, q0\n\t"
3914 "adds r8, r8, lr\n\t"
3915 "aese.8 q0, q4\n\t"
3916 "aesmc.8 q0, q0\n\t"
3917 "adcs r7, r7, #0\n\t"
3918 "aese.8 q0, q5\n\t"
3919 "aesmc.8 q0, q0\n\t"
3920 "adcs r6, r6, #0\n\t"
3921 "aese.8 q0, q6\n\t"
3922 "aesmc.8 q0, q0\n\t"
3923 "adc r5, r5, #0\n\t"
3924 "aese.8 q0, q7\n\t"
3925 "aesmc.8 q0, q0\n\t"
3926 "vmov d5, r7, r8\n\t"
3927 "aese.8 q0, q8\n\t"
3928 "aesmc.8 q0, q0\n\t"
3929 "vmov d4, r5, r6\n\t"
3930 "aese.8 q0, q9\n\t"
3931 "aesmc.8 q0, q0\n\t"
3932 "aese.8 q0, q10\n\t"
3933 "aesmc.8 q0, q0\n\t"
3934 "aese.8 q0, q11\n\t"
3935 "aesmc.8 q0, q0\n\t"
3936 "aese.8 q0, q12\n\t"
3937 "aesmc.8 q0, q0\n\t"
3938 "vld1.32 {q14}, [r12]!\n\t"
3939 "aese.8 q0, q13\n\t"
3940 "aesmc.8 q0, q0\n\t"
3941 "vld1.32 {q15}, [r12]!\n\t"
3942 "aese.8 q0, q14\n\t"
3943 "aesmc.8 q0, q0\n\t"
3944 "vld1.32 {q14}, [r12]!\n\t"
3945 "aese.8 q0, q15\n\t"
3946 "aesmc.8 q0, q0\n\t"
3947 "vld1.32 {q15}, [r12]\n\t"
3948 "aese.8 q0, q14\n\t"
3949 "vld1.8 {q14}, [%[in]]!\n\t"
3950 "veor.32 q0, q0, q15\n\t"
3951 "veor.32 q14, q14, q0\n\t"
3952 "sub r12, r12, #48\n\t"
3953 "vst1.8 {q14}, [%[out]]!\n\t"
3954 "mov lr, #1\n\t"
3955 "vrev32.8 q0, q2\n\t"
3956 "\n"
3957 "L_aes_ctr_encrypt_arm32_crypto_256_done_%=:\n\t"
3958 "cmp %[sz], #0\n\t"
3959 "beq L_aes_ctr_encrypt_arm32_crypto_256_partial_done_%=\n\t"
3960 "ldr r4, [sp, #8]\n\t"
3961 "aese.8 q0, q3\n\t"
3962 "aesmc.8 q0, q0\n\t"
3963 "adds r8, r8, lr\n\t"
3964 "aese.8 q0, q4\n\t"
3965 "aesmc.8 q0, q0\n\t"
3966 "adcs r7, r7, #0\n\t"
3967 "aese.8 q0, q5\n\t"
3968 "aesmc.8 q0, q0\n\t"
3969 "adcs r6, r6, #0\n\t"
3970 "aese.8 q0, q6\n\t"
3971 "aesmc.8 q0, q0\n\t"
3972 "adc r5, r5, #0\n\t"
3973 "aese.8 q0, q7\n\t"
3974 "aesmc.8 q0, q0\n\t"
3975 "vmov d5, r7, r8\n\t"
3976 "aese.8 q0, q8\n\t"
3977 "aesmc.8 q0, q0\n\t"
3978 "vmov d4, r5, r6\n\t"
3979 "aese.8 q0, q9\n\t"
3980 "aesmc.8 q0, q0\n\t"
3981 "aese.8 q0, q10\n\t"
3982 "aesmc.8 q0, q0\n\t"
3983 "aese.8 q0, q11\n\t"
3984 "aesmc.8 q0, q0\n\t"
3985 "aese.8 q0, q12\n\t"
3986 "aesmc.8 q0, q0\n\t"
3987 "vld1.32 {q14}, [r12]!\n\t"
3988 "aese.8 q0, q13\n\t"
3989 "aesmc.8 q0, q0\n\t"
3990 "vld1.32 {q15}, [r12]!\n\t"
3991 "aese.8 q0, q14\n\t"
3992 "aesmc.8 q0, q0\n\t"
3993 "vld1.32 {q14}, [r12]!\n\t"
3994 "aese.8 q0, q15\n\t"
3995 "aesmc.8 q0, q0\n\t"
3996 "vld1.32 {q15}, [r12]\n\t"
3997 "ldr lr, [sp, #4]\n\t"
3998 "aese.8 q0, q14\n\t"
3999 "veor.32 q0, q0, q15\n\t"
4000 "vst1.32 {q0}, [lr]\n\t"
4001 "vmov q0, q2\n\t"
4002 "mov r5, #16\n\t"
4003 "sub r5, r5, %[sz]\n\t"
4004 "\n"
4005 "L_aes_ctr_encrypt_arm32_crypto_256_start_byte_%=:\n\t"
4006 "ldrb r7, [lr], #1\n\t"
4007 "ldrb r8, [%[in]], #1\n\t"
4008 "eor r7, r7, r8\n\t"
4009 "subs %[sz], %[sz], #1\n\t"
4010 "strb r7, [%[out]], #1\n\t"
4011 "bgt L_aes_ctr_encrypt_arm32_crypto_256_start_byte_%=\n\t"
4012 "vrev32.8 q0, q2\n\t"
4013 "str r5, [r4]\n\t"
4014 "\n"
4015 "L_aes_ctr_encrypt_arm32_crypto_256_partial_done_%=:\n\t"
4016#endif /* !NO_AES_256 */
4017 "b L_aes_ctr_encrypt_arm32_crypto_done_%=\n\t"
4018 /* AES_CTR_128 */
4019 "\n"
4020 "L_aes_ctr_encrypt_arm32_crypto_start_128_%=:\n\t"
4021#ifndef NO_AES_128
4022 "vldm.32 r12!, {q11-q13}\n\t"
4023 "mov lr, #1\n\t"
4024 "cmp r4, #1\n\t"
4025 "blt L_aes_ctr_encrypt_arm32_crypto_128_done_%=\n\t"
4026 "beq L_aes_ctr_encrypt_arm32_crypto_128_start_1_%=\n\t"
4027 "adds r8, r8, #1\n\t"
4028 "adcs r7, r7, #0\n\t"
4029 "adcs r6, r6, #0\n\t"
4030 "adc r5, r5, #0\n\t"
4031 "vmov d3, r7, r8\n\t"
4032 "vmov d2, r5, r6\n\t"
4033 "vrev32.8 q1, q1\n\t"
4034 "\n"
4035 "L_aes_ctr_encrypt_arm32_crypto_128_start_2_%=:\n\t"
4036 "aese.8 q0, q3\n\t"
4037 "aesmc.8 q0, q0\n\t"
4038 "aese.8 q1, q3\n\t"
4039 "aesmc.8 q1, q1\n\t"
4040 "adds r8, r8, #1\n\t"
4041 "aese.8 q0, q4\n\t"
4042 "aesmc.8 q0, q0\n\t"
4043 "aese.8 q1, q4\n\t"
4044 "aesmc.8 q1, q1\n\t"
4045 "adcs r7, r7, #0\n\t"
4046 "aese.8 q0, q5\n\t"
4047 "aesmc.8 q0, q0\n\t"
4048 "aese.8 q1, q5\n\t"
4049 "aesmc.8 q1, q1\n\t"
4050 "adcs r6, r6, #0\n\t"
4051 "aese.8 q0, q6\n\t"
4052 "aesmc.8 q0, q0\n\t"
4053 "aese.8 q1, q6\n\t"
4054 "aesmc.8 q1, q1\n\t"
4055 "adc r5, r5, #0\n\t"
4056 "aese.8 q0, q7\n\t"
4057 "aesmc.8 q0, q0\n\t"
4058 "aese.8 q1, q7\n\t"
4059 "aesmc.8 q1, q1\n\t"
4060 "vmov d5, r7, r8\n\t"
4061 "aese.8 q0, q8\n\t"
4062 "aesmc.8 q0, q0\n\t"
4063 "aese.8 q1, q8\n\t"
4064 "aesmc.8 q1, q1\n\t"
4065 "vmov d4, r5, r6\n\t"
4066 "aese.8 q0, q9\n\t"
4067 "aesmc.8 q0, q0\n\t"
4068 "aese.8 q1, q9\n\t"
4069 "aesmc.8 q1, q1\n\t"
4070 "adds r8, r8, #1\n\t"
4071 "aese.8 q0, q10\n\t"
4072 "aesmc.8 q0, q0\n\t"
4073 "aese.8 q1, q10\n\t"
4074 "aesmc.8 q1, q1\n\t"
4075 "adcs r7, r7, #0\n\t"
4076 "aese.8 q0, q11\n\t"
4077 "aesmc.8 q0, q0\n\t"
4078 "aese.8 q1, q11\n\t"
4079 "aesmc.8 q1, q1\n\t"
4080 "adcs r6, r6, #0\n\t"
4081 "vld1.8 {q14-q15}, [%[in]]!\n\t"
4082 "adc r5, r5, #0\n\t"
4083 "aese.8 q0, q12\n\t"
4084 "aese.8 q1, q12\n\t"
4085 "sub r4, r4, #2\n\t"
4086 "veor.32 q14, q14, q13\n\t"
4087 "veor.32 q15, q15, q13\n\t"
4088 "veor.32 q14, q14, q0\n\t"
4089 "veor.32 q15, q15, q1\n\t"
4090 "vrev32.8 q0, q2\n\t"
4091 "vmov d2, r5, r6\n\t"
4092 "vmov d3, r7, r8\n\t"
4093 "cmp r4, #1\n\t"
4094 "vst1.8 {q14-q15}, [%[out]]!\n\t"
4095 "vrev32.8 q1, q1\n\t"
4096 "bgt L_aes_ctr_encrypt_arm32_crypto_128_start_2_%=\n\t"
4097 "mov lr, #0\n\t"
4098 "blt L_aes_ctr_encrypt_arm32_crypto_128_done_%=\n\t"
4099 "\n"
4100 "L_aes_ctr_encrypt_arm32_crypto_128_start_1_%=:\n\t"
4101 "aese.8 q0, q3\n\t"
4102 "aesmc.8 q0, q0\n\t"
4103 "adds r8, r8, lr\n\t"
4104 "aese.8 q0, q4\n\t"
4105 "aesmc.8 q0, q0\n\t"
4106 "adcs r7, r7, #0\n\t"
4107 "aese.8 q0, q5\n\t"
4108 "aesmc.8 q0, q0\n\t"
4109 "adcs r6, r6, #0\n\t"
4110 "aese.8 q0, q6\n\t"
4111 "aesmc.8 q0, q0\n\t"
4112 "adc r5, r5, #0\n\t"
4113 "aese.8 q0, q7\n\t"
4114 "aesmc.8 q0, q0\n\t"
4115 "vmov d5, r7, r8\n\t"
4116 "aese.8 q0, q8\n\t"
4117 "aesmc.8 q0, q0\n\t"
4118 "vmov d4, r5, r6\n\t"
4119 "aese.8 q0, q9\n\t"
4120 "aesmc.8 q0, q0\n\t"
4121 "aese.8 q0, q10\n\t"
4122 "aesmc.8 q0, q0\n\t"
4123 "aese.8 q0, q11\n\t"
4124 "aesmc.8 q0, q0\n\t"
4125 "vld1.8 {q14}, [%[in]]!\n\t"
4126 "aese.8 q0, q12\n\t"
4127 "veor.32 q0, q0, q13\n\t"
4128 "veor.32 q14, q14, q0\n\t"
4129 "vst1.8 {q14}, [%[out]]!\n\t"
4130 "mov lr, #1\n\t"
4131 "vrev32.8 q0, q2\n\t"
4132 "\n"
4133 "L_aes_ctr_encrypt_arm32_crypto_128_done_%=:\n\t"
4134 "cmp %[sz], #0\n\t"
4135 "beq L_aes_ctr_encrypt_arm32_crypto_128_partial_done_%=\n\t"
4136 "ldr r4, [sp, #8]\n\t"
4137 "aese.8 q0, q3\n\t"
4138 "aesmc.8 q0, q0\n\t"
4139 "adds r8, r8, lr\n\t"
4140 "aese.8 q0, q4\n\t"
4141 "aesmc.8 q0, q0\n\t"
4142 "adcs r7, r7, #0\n\t"
4143 "aese.8 q0, q5\n\t"
4144 "aesmc.8 q0, q0\n\t"
4145 "adcs r6, r6, #0\n\t"
4146 "aese.8 q0, q6\n\t"
4147 "aesmc.8 q0, q0\n\t"
4148 "adc r5, r5, #0\n\t"
4149 "aese.8 q0, q7\n\t"
4150 "aesmc.8 q0, q0\n\t"
4151 "vmov d5, r7, r8\n\t"
4152 "aese.8 q0, q8\n\t"
4153 "aesmc.8 q0, q0\n\t"
4154 "vmov d4, r5, r6\n\t"
4155 "aese.8 q0, q9\n\t"
4156 "aesmc.8 q0, q0\n\t"
4157 "aese.8 q0, q10\n\t"
4158 "aesmc.8 q0, q0\n\t"
4159 "aese.8 q0, q11\n\t"
4160 "aesmc.8 q0, q0\n\t"
4161 "ldr lr, [sp, #4]\n\t"
4162 "aese.8 q0, q12\n\t"
4163 "veor.32 q0, q0, q13\n\t"
4164 "vst1.32 {q0}, [lr]\n\t"
4165 "vmov q0, q2\n\t"
4166 "mov r5, #16\n\t"
4167 "sub r5, r5, %[sz]\n\t"
4168 "\n"
4169 "L_aes_ctr_encrypt_arm32_crypto_128_start_byte_%=:\n\t"
4170 "ldrb r7, [lr], #1\n\t"
4171 "ldrb r8, [%[in]], #1\n\t"
4172 "eor r7, r7, r8\n\t"
4173 "subs %[sz], %[sz], #1\n\t"
4174 "strb r7, [%[out]], #1\n\t"
4175 "bgt L_aes_ctr_encrypt_arm32_crypto_128_start_byte_%=\n\t"
4176 "vrev32.8 q0, q2\n\t"
4177 "str r5, [r4]\n\t"
4178 "\n"
4179 "L_aes_ctr_encrypt_arm32_crypto_128_partial_done_%=:\n\t"
4180#endif /* !NO_AES_128 */
4181 "\n"
4182 "L_aes_ctr_encrypt_arm32_crypto_done_%=:\n\t"
4183 "vst1.32 {q0}, [%[reg]]\n\t"
4184 "pop {%[key], %[tmp]}\n\t"
4185 "pop {%[left], %[nr]}\n\t"
4186#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
4187 : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [reg] "+r" (reg),
4188 [key] "+r" (key), [tmp] "+r" (tmp), [left] "+r" (left),
4189 [nr] "+r" (nr)
4190 :
4191#else
4192 :
4193 : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [reg] "r" (reg),
4194 [key] "r" (key), [tmp] "r" (tmp), [left] "r" (left), [nr] "r" (nr)
4195#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
4196 : "memory", "cc", "r6", "r7", "r8", "q0", "q1", "q2", "q3", "q4", "q5",
4197 "q6", "q7", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
4198 );
4199}
4200
4201#endif /* WOLFSSL_AES_COUNTER */
4202#ifdef HAVE_AESGCM
4203#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
4204WC_OMIT_FRAME_POINTER void AES_GCM_set_key_AARCH32(const byte* nonce_p,
4205 const byte* key_p, byte* gcm_h_p, int nr_p)
4206#else
4207WC_OMIT_FRAME_POINTER void AES_GCM_set_key_AARCH32(const byte* nonce,
4208 const byte* key, byte* gcm_h, int nr)
4209#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
4210{
4211#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
4212 register const byte* nonce __asm__ ("r0") = (const byte*)nonce_p;
4213 register const byte* key __asm__ ("r1") = (const byte*)key_p;
4214 register byte* gcm_h __asm__ ("r2") = (byte*)gcm_h_p;
4215 register int nr __asm__ ("r3") = (int)nr_p;
4216#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
4217
4218 __asm__ __volatile__ (
4219 "vld1.8 {q0}, [%[nonce]]\n\t"
4220 "vld1.8 {q1-q2}, [%[key]]!\n\t"
4221 "vld1.8 {q3-q4}, [%[key]]!\n\t"
4222 "aese.8 q0, q1\n\t"
4223 "aesmc.8 q0, q0\n\t"
4224 "aese.8 q0, q2\n\t"
4225 "aesmc.8 q0, q0\n\t"
4226 "aese.8 q0, q3\n\t"
4227 "aesmc.8 q0, q0\n\t"
4228 "aese.8 q0, q4\n\t"
4229 "aesmc.8 q0, q0\n\t"
4230 "vld1.8 {q1-q2}, [%[key]]!\n\t"
4231 "vld1.8 {q3-q4}, [%[key]]!\n\t"
4232 "aese.8 q0, q1\n\t"
4233 "aesmc.8 q0, q0\n\t"
4234 "aese.8 q0, q2\n\t"
4235 "aesmc.8 q0, q0\n\t"
4236 "aese.8 q0, q3\n\t"
4237 "aesmc.8 q0, q0\n\t"
4238 "aese.8 q0, q4\n\t"
4239 "aesmc.8 q0, q0\n\t"
4240 "subs %[nr], %[nr], #10\n\t"
4241 "vld1.8 {q1-q2}, [%[key]]!\n\t"
4242 "aese.8 q0, q1\n\t"
4243 "aesmc.8 q0, q0\n\t"
4244 "aese.8 q0, q2\n\t"
4245 "beq L_aes_gcm_set_key_arm32_crypto_round_done_%=\n\t"
4246 "vld1.8 {q1-q2}, [%[key]]!\n\t"
4247 "subs %[nr], %[nr], #2\n\t"
4248 "aesmc.8 q0, q0\n\t"
4249 "aese.8 q0, q1\n\t"
4250 "aesmc.8 q0, q0\n\t"
4251 "aese.8 q0, q2\n\t"
4252 "beq L_aes_gcm_set_key_arm32_crypto_round_done_%=\n\t"
4253 "vld1.8 {q1-q2}, [%[key]]!\n\t"
4254 "aesmc.8 q0, q0\n\t"
4255 "aese.8 q0, q1\n\t"
4256 "aesmc.8 q0, q0\n\t"
4257 "aese.8 q0, q2\n\t"
4258 "\n"
4259 "L_aes_gcm_set_key_arm32_crypto_round_done_%=:\n\t"
4260 "vld1.8 {q1}, [%[key]]\n\t"
4261 "veor q0, q0, q1\n\t"
4262 "vmov.i8 q1, #0x55\n\t"
4263 "vshl.u8 q2, q0, #1\n\t"
4264 "vshr.u8 q0, q0, #1\n\t"
4265 "vbif.8 q0, q2, q1\n\t"
4266 "vmov.i8 q1, #51\n\t"
4267 "vshl.u8 q2, q0, #2\n\t"
4268 "vshr.u8 q0, q0, #2\n\t"
4269 "vbit.8 q2, q0, q1\n\t"
4270 "vshl.u8 q0, q2, #4\n\t"
4271 "vsri.u8 q0, q2, #4\n\t"
4272 "vst1.32 {q0}, [%[gcm_h]]\n\t"
4273#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
4274 : [nonce] "+r" (nonce), [key] "+r" (key), [gcm_h] "+r" (gcm_h),
4275 [nr] "+r" (nr)
4276 :
4277#else
4278 :
4279 : [nonce] "r" (nonce), [key] "r" (key), [gcm_h] "r" (gcm_h),
4280 [nr] "r" (nr)
4281#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
4282 : "memory", "cc", "r12", "q0", "q1", "q2", "q3", "q4"
4283 );
4284}
4285
4286#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
4287WC_OMIT_FRAME_POINTER void AES_GCM_encrypt_AARCH32(const byte* in_p,
4288 byte* out_p, word32 sz_p, const byte* nonce_p, word32 nonceSz_p,
4289 byte* tag_p, word32 tagSz_p, const byte* aad_p, word32 aadSz_p, byte* key_p,
4290 byte* gcm_h_p, byte* tmp_p, byte* reg_p, int nr_p)
4291#else
4292WC_OMIT_FRAME_POINTER void AES_GCM_encrypt_AARCH32(const byte* in, byte* out,
4293 word32 sz, const byte* nonce, word32 nonceSz, byte* tag, word32 tagSz,
4294 const byte* aad, word32 aadSz, byte* key, byte* gcm_h, byte* tmp, byte* reg,
4295 int nr)
4296#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
4297{
4298#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
4299 register const byte* in __asm__ ("r0") = (const byte*)in_p;
4300 register byte* out __asm__ ("r1") = (byte*)out_p;
4301 register word32 sz __asm__ ("r2") = (word32)sz_p;
4302 register const byte* nonce __asm__ ("r3") = (const byte*)nonce_p;
4303 register word32 nonceSz __asm__ ("r12") = (word32)nonceSz_p;
4304 register byte* tag __asm__ ("lr") = (byte*)tag_p;
4305 register word32 tagSz __asm__ ("r4") = (word32)tagSz_p;
4306 register const byte* aad __asm__ ("r5") = (const byte*)aad_p;
4307 register word32 aadSz __asm__ ("r6") = (word32)aadSz_p;
4308 register byte* key __asm__ ("r7") = (byte*)key_p;
4309 register byte* gcm_h __asm__ ("r8") = (byte*)gcm_h_p;
4310 register byte* tmp __asm__ ("r9") = (byte*)tmp_p;
4311 register byte* reg __asm__ ("r10") = (byte*)reg_p;
4312 register int nr __asm__ ("r11") = (int)nr_p;
4313#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
4314
4315 __asm__ __volatile__ (
4316 "push {%[tagSz], %[aad], %[aadSz], %[key], %[gcm_h], %[tmp], %[reg], %[nr]}\n\t"
4317 "push {%[nonceSz], %[tag]}\n\t"
4318 /* key */
4319 "ldr r7, [sp, #20]\n\t"
4320 /* tmp */
4321 "ldr r9, [sp, #28]\n\t"
4322 /* nonceSz */
4323 "ldr r12, [sp]\n\t"
4324 "cmp r12, #12\n\t"
4325 "beq L_aes_gcm_encrypt_arm32_crypto_nonce_setup_done_%=\n\t"
4326 "vmov.i8 q13, #0x87\n\t"
4327 /* gcm_h */
4328 "ldr r8, [sp, #24]\n\t"
4329 "veor.8 q6, q6, q6\n\t"
4330 "vshr.u64 q13, q13, #56\n\t"
4331 "vld1.32 {q8}, [r8]\n\t"
4332 "\n"
4333 "L_aes_gcm_encrypt_arm32_crypto_nonce_setup_done_%=:\n\t"
4334 /* Load Nonce */
4335 "cmp r12, #12\n\t"
4336 "bne L_aes_gcm_encrypt_arm32_crypto_ghash_nonce_%=\n\t"
4337 "ldr r5, [%[nonce]]\n\t"
4338 "ldr r8, [%[nonce], #4]\n\t"
4339 "ldr r12, [%[nonce], #8]\n\t"
4340 "vmov.i32 q6, #0x1000000\n\t"
4341 "vmov.32 s24, r5\n\t"
4342 "vmov.32 s25, r8\n\t"
4343 "vmov.32 s26, r12\n\t"
4344 "mov r5, #1\n\t"
4345 "b L_aes_gcm_encrypt_arm32_crypto_done_nonce_%=\n\t"
4346 "\n"
4347 "L_aes_gcm_encrypt_arm32_crypto_ghash_nonce_%=:\n\t"
4348 "lsr r10, r12, #4\n\t"
4349 "cmp r10, #0\n\t"
4350 "beq L_aes_gcm_encrypt_arm32_crypto_nonce_done_%=\n\t"
4351 "\n"
4352 "L_aes_gcm_encrypt_arm32_crypto_nonce_start_1_%=:\n\t"
4353 "vld1.32 {q14}, [%[nonce]]!\n\t"
4354 "vmov.i8 q12, #0x55\n\t"
4355 "vshl.u8 q0, q14, #1\n\t"
4356 "vshr.u8 q14, q14, #1\n\t"
4357 "vbif.8 q14, q0, q12\n\t"
4358 "vmov.i8 q12, #51\n\t"
4359 "vshl.u8 q0, q14, #2\n\t"
4360 "vshr.u8 q14, q14, #2\n\t"
4361 "vbit.8 q0, q14, q12\n\t"
4362 "vshl.u8 q14, q0, #4\n\t"
4363 "vsri.u8 q14, q0, #4\n\t"
4364 "veor.8 q12, q6, q14\n\t"
4365 /* X = C * H^1 */
4366 "vmull.p64 q2, d25, d16\n\t"
4367 "vmull.p64 q6, d24, d17\n\t"
4368 "vmull.p64 q0, d24, d16\n\t"
4369 "vmull.p64 q1, d25, d17\n\t"
4370 "veor.8 q2, q2, q6\n\t"
4371 /* Reduce */
4372 "vmull.p64 q6, d3, d27\n\t"
4373 "veor.8 d2, d2, d5\n\t"
4374 "veor.8 d1, d1, d4\n\t"
4375 "veor.8 d2, d2, d13\n\t"
4376 "veor.8 d1, d1, d12\n\t"
4377 "vmull.p64 q6, d2, d26\n\t"
4378 "veor.8 q6, q6, q0\n\t"
4379 /* Done GHASH */
4380 "subs r10, r10, #1\n\t"
4381 "bne L_aes_gcm_encrypt_arm32_crypto_nonce_start_1_%=\n\t"
4382 "\n"
4383 "L_aes_gcm_encrypt_arm32_crypto_nonce_done_%=:\n\t"
4384 "ands r11, r12, #15\n\t"
4385 "beq L_aes_gcm_encrypt_arm32_crypto_nonce_partial_done_%=\n\t"
4386 "veor.8 q0, q0, q0\n\t"
4387 "mov r12, r11\n\t"
4388 "vst1.32 {q0}, [r9]\n\t"
4389 "cmp r12, #4\n\t"
4390 "blt L_aes_gcm_encrypt_arm32_crypto_nonce_start_sw_%=\n\t"
4391 "\n"
4392 "L_aes_gcm_encrypt_arm32_crypto_nonce_start_dw_%=:\n\t"
4393 "ldr r8, [%[nonce]], #4\n\t"
4394 "sub r12, r12, #4\n\t"
4395 "str r8, [r9], #4\n\t"
4396 "cmp r12, #4\n\t"
4397 "bge L_aes_gcm_encrypt_arm32_crypto_nonce_start_dw_%=\n\t"
4398 "\n"
4399 "L_aes_gcm_encrypt_arm32_crypto_nonce_start_sw_%=:\n\t"
4400 "cmp r12, #2\n\t"
4401 "blt L_aes_gcm_encrypt_arm32_crypto_nonce_start_byte_%=\n\t"
4402 "ldrh r8, [%[nonce]], #2\n\t"
4403 "sub r12, r12, #2\n\t"
4404 "strh r8, [r9], #2\n\t"
4405 "\n"
4406 "L_aes_gcm_encrypt_arm32_crypto_nonce_start_byte_%=:\n\t"
4407 "cmp r12, #1\n\t"
4408 "blt L_aes_gcm_encrypt_arm32_crypto_nonce_end_bytes_%=\n\t"
4409 "ldrb r8, [%[nonce]], #1\n\t"
4410 "subs r12, r12, #1\n\t"
4411 "strb r8, [r9], #1\n\t"
4412 "bne L_aes_gcm_encrypt_arm32_crypto_nonce_start_byte_%=\n\t"
4413 "\n"
4414 "L_aes_gcm_encrypt_arm32_crypto_nonce_end_bytes_%=:\n\t"
4415 "sub r9, r9, r11\n\t"
4416 "vld1.32 {q14}, [r9]\n\t"
4417 "vmov.i8 q12, #0x55\n\t"
4418 "vshl.u8 q0, q14, #1\n\t"
4419 "vshr.u8 q14, q14, #1\n\t"
4420 "vbif.8 q14, q0, q12\n\t"
4421 "vmov.i8 q12, #51\n\t"
4422 "vshl.u8 q0, q14, #2\n\t"
4423 "vshr.u8 q14, q14, #2\n\t"
4424 "vbit.8 q0, q14, q12\n\t"
4425 "vshl.u8 q14, q0, #4\n\t"
4426 "vsri.u8 q14, q0, #4\n\t"
4427 "veor.8 q12, q6, q14\n\t"
4428 /* X = C * H^1 */
4429 "vmull.p64 q2, d25, d16\n\t"
4430 "vmull.p64 q6, d24, d17\n\t"
4431 "vmull.p64 q0, d24, d16\n\t"
4432 "vmull.p64 q1, d25, d17\n\t"
4433 "veor.8 q2, q2, q6\n\t"
4434 /* Reduce */
4435 "vmull.p64 q6, d3, d27\n\t"
4436 "veor.8 d2, d2, d5\n\t"
4437 "veor.8 d1, d1, d4\n\t"
4438 "veor.8 d2, d2, d13\n\t"
4439 "veor.8 d1, d1, d12\n\t"
4440 "vmull.p64 q6, d2, d26\n\t"
4441 "veor.8 q6, q6, q0\n\t"
4442 /* Done GHASH */
4443 "\n"
4444 "L_aes_gcm_encrypt_arm32_crypto_nonce_partial_done_%=:\n\t"
4445 "veor.8 q0, q0, q0\n\t"
4446 /* nonceSz */
4447 "ldr r12, [sp]\n\t"
4448 "lsr r10, r12, #29\n\t"
4449 "lsl r11, r12, #3\n\t"
4450 "rbit r10, r10\n\t"
4451 "rbit r11, r11\n\t"
4452 "vmov.32 s2, r10\n\t"
4453 "vmov.32 s3, r11\n\t"
4454 "veor.8 q6, q6, q0\n\t"
4455 "vmull.p64 q2, d13, d16\n\t"
4456 "vmull.p64 q12, d12, d17\n\t"
4457 "vmull.p64 q0, d12, d16\n\t"
4458 "vmull.p64 q1, d13, d17\n\t"
4459 "veor.8 q2, q2, q12\n\t"
4460 "vmull.p64 q6, d3, d27\n\t"
4461 "veor.8 d2, d2, d5\n\t"
4462 "veor.8 d1, d1, d4\n\t"
4463 "veor.8 d2, d2, d13\n\t"
4464 "veor.8 d1, d1, d12\n\t"
4465 "vmull.p64 q6, d2, d26\n\t"
4466 "veor.8 q6, q6, q0\n\t"
4467 "vmov.32 r5, s24\n\t"
4468 "vmov.32 r8, s25\n\t"
4469 "vmov.32 r12, s26\n\t"
4470 "rbit r5, r5\n\t"
4471 "rbit r8, r8\n\t"
4472 "rbit r12, r12\n\t"
4473 "rev r5, r5\n\t"
4474 "rev r8, r8\n\t"
4475 "rev r12, r12\n\t"
4476 "vmov.32 s24, r5\n\t"
4477 "vmov.32 s25, r8\n\t"
4478 "vmov.32 s26, r12\n\t"
4479 "vmov.32 r5, s27\n\t"
4480 "rbit r5, r5\n\t"
4481 "rev r5, r5\n\t"
4482 "vmov.32 s27, r5\n\t"
4483 "rev r5, r5\n\t"
4484 "\n"
4485 "L_aes_gcm_encrypt_arm32_crypto_done_nonce_%=:\n\t"
4486 "vldm.32 r7!, {q0-q3}\n\t"
4487 "vldm.32 r7!, {q7-q13}\n\t"
4488 /* nr */
4489 "ldr r12, [sp, #36]\n\t"
4490 "lsr r10, %[sz], #4\n\t"
4491 "cmp r12, #12\n\t"
4492 "blt L_aes_gcm_encrypt_arm32_crypto_start_128_%=\n\t"
4493 "bgt L_aes_gcm_encrypt_arm32_crypto_start_256_%=\n\t"
4494 /* AES_GCM_192 */
4495#ifndef NO_AES_192
4496 "cmp r10, #1\n\t"
4497 "blt L_aes_gcm_encrypt_arm32_crypto_192_done_%=\n\t"
4498 "beq L_aes_gcm_encrypt_arm32_crypto_192_start_1_%=\n\t"
4499 "\n"
4500 "L_aes_gcm_encrypt_arm32_crypto_192_start_2_%=:\n\t"
4501 "add r8, r5, #1\n\t"
4502 "vmov.8 q4, q6\n\t"
4503 "add r5, r5, #2\n\t"
4504 "vmov.8 q5, q6\n\t"
4505 "rev r8, r8\n\t"
4506 "rev r12, r5\n\t"
4507 "vmov s19, r8\n\t"
4508 "vmov s23, r12\n\t"
4509 "aese.8 q4, q0\n\t"
4510 "aesmc.8 q4, q4\n\t"
4511 "aese.8 q5, q0\n\t"
4512 "aesmc.8 q5, q5\n\t"
4513 "aese.8 q4, q1\n\t"
4514 "aesmc.8 q4, q4\n\t"
4515 "aese.8 q5, q1\n\t"
4516 "aesmc.8 q5, q5\n\t"
4517 "aese.8 q4, q2\n\t"
4518 "aesmc.8 q4, q4\n\t"
4519 "aese.8 q5, q2\n\t"
4520 "aesmc.8 q5, q5\n\t"
4521 "aese.8 q4, q3\n\t"
4522 "aesmc.8 q4, q4\n\t"
4523 "aese.8 q5, q3\n\t"
4524 "aesmc.8 q5, q5\n\t"
4525 "aese.8 q4, q7\n\t"
4526 "aesmc.8 q4, q4\n\t"
4527 "aese.8 q5, q7\n\t"
4528 "aesmc.8 q5, q5\n\t"
4529 "aese.8 q4, q8\n\t"
4530 "aesmc.8 q4, q4\n\t"
4531 "aese.8 q5, q8\n\t"
4532 "aesmc.8 q5, q5\n\t"
4533 "aese.8 q4, q9\n\t"
4534 "aesmc.8 q4, q4\n\t"
4535 "aese.8 q5, q9\n\t"
4536 "aesmc.8 q5, q5\n\t"
4537 "subs r10, r10, #2\n\t"
4538 "aese.8 q4, q10\n\t"
4539 "aesmc.8 q4, q4\n\t"
4540 "aese.8 q5, q10\n\t"
4541 "aesmc.8 q5, q5\n\t"
4542 "aese.8 q4, q11\n\t"
4543 "aesmc.8 q4, q4\n\t"
4544 "aese.8 q5, q11\n\t"
4545 "aesmc.8 q5, q5\n\t"
4546 "aese.8 q4, q12\n\t"
4547 "aesmc.8 q4, q4\n\t"
4548 "aese.8 q5, q12\n\t"
4549 "aesmc.8 q5, q5\n\t"
4550 "vld1.32 {q14}, [r7]!\n\t"
4551 "aese.8 q4, q13\n\t"
4552 "aesmc.8 q4, q4\n\t"
4553 "aese.8 q5, q13\n\t"
4554 "aesmc.8 q5, q5\n\t"
4555 "vld1.32 {q15}, [r7]\n\t"
4556 "aese.8 q4, q14\n\t"
4557 "veor.8 q4, q4, q15\n\t"
4558 "aese.8 q5, q14\n\t"
4559 "veor.8 q5, q5, q15\n\t"
4560 "vld1.8 {q14-q15}, [%[in]]!\n\t"
4561 "sub r7, r7, #16\n\t"
4562 "veor.8 q14, q14, q4\n\t"
4563 "veor.8 q15, q15, q5\n\t"
4564 "vst1.8 {q14-q15}, [%[out]]!\n\t"
4565 "cmp r10, #1\n\t"
4566 "bgt L_aes_gcm_encrypt_arm32_crypto_192_start_2_%=\n\t"
4567 "blt L_aes_gcm_encrypt_arm32_crypto_192_done_%=\n\t"
4568 "\n"
4569 "L_aes_gcm_encrypt_arm32_crypto_192_start_1_%=:\n\t"
4570 "add r5, r5, #1\n\t"
4571 "vmov.8 q4, q6\n\t"
4572 "rev r8, r5\n\t"
4573 "vmov s19, r8\n\t"
4574 "aese.8 q4, q0\n\t"
4575 "aesmc.8 q4, q4\n\t"
4576 "aese.8 q4, q1\n\t"
4577 "aesmc.8 q4, q4\n\t"
4578 "aese.8 q4, q2\n\t"
4579 "aesmc.8 q4, q4\n\t"
4580 "aese.8 q4, q3\n\t"
4581 "aesmc.8 q4, q4\n\t"
4582 "aese.8 q4, q7\n\t"
4583 "aesmc.8 q4, q4\n\t"
4584 "aese.8 q4, q8\n\t"
4585 "aesmc.8 q4, q4\n\t"
4586 "aese.8 q4, q9\n\t"
4587 "aesmc.8 q4, q4\n\t"
4588 "aese.8 q4, q10\n\t"
4589 "aesmc.8 q4, q4\n\t"
4590 "aese.8 q4, q11\n\t"
4591 "aesmc.8 q4, q4\n\t"
4592 "aese.8 q4, q12\n\t"
4593 "aesmc.8 q4, q4\n\t"
4594 "vld1.32 {q14}, [r7]!\n\t"
4595 "aese.8 q4, q13\n\t"
4596 "aesmc.8 q4, q4\n\t"
4597 "vld1.32 {q15}, [r7]\n\t"
4598 "aese.8 q4, q14\n\t"
4599 "veor.8 q4, q4, q15\n\t"
4600 "vld1.8 {q14}, [%[in]]!\n\t"
4601 "sub r7, r7, #16\n\t"
4602 "veor.8 q14, q14, q4\n\t"
4603 "vst1.32 {q14}, [%[out]]!\n\t"
4604 "\n"
4605 "L_aes_gcm_encrypt_arm32_crypto_192_done_%=:\n\t"
4606 "ands r11, %[sz], #15\n\t"
4607 "beq L_aes_gcm_encrypt_arm32_crypto_192_partial_done_%=\n\t"
4608 "veor.8 q14, q14, q14\n\t"
4609 "mov r4, r11\n\t"
4610 "vst1.32 {q14}, [r9]\n\t"
4611 "cmp r4, #4\n\t"
4612 "blt L_aes_gcm_encrypt_arm32_crypto_192_start_sw_%=\n\t"
4613 "\n"
4614 "L_aes_gcm_encrypt_arm32_crypto_192_start_dw_%=:\n\t"
4615 "ldr lr, [%[in]], #4\n\t"
4616 "sub r4, r4, #4\n\t"
4617 "str lr, [r9], #4\n\t"
4618 "cmp r4, #4\n\t"
4619 "bge L_aes_gcm_encrypt_arm32_crypto_192_start_dw_%=\n\t"
4620 "\n"
4621 "L_aes_gcm_encrypt_arm32_crypto_192_start_sw_%=:\n\t"
4622 "cmp r4, #2\n\t"
4623 "blt L_aes_gcm_encrypt_arm32_crypto_192_start_byte_%=\n\t"
4624 "ldrh lr, [%[in]], #2\n\t"
4625 "sub r4, r4, #2\n\t"
4626 "strh lr, [r9], #2\n\t"
4627 "\n"
4628 "L_aes_gcm_encrypt_arm32_crypto_192_start_byte_%=:\n\t"
4629 "cmp r4, #1\n\t"
4630 "blt L_aes_gcm_encrypt_arm32_crypto_192_end_bytes_%=\n\t"
4631 "ldrb lr, [%[in]], #1\n\t"
4632 "subs r4, r4, #1\n\t"
4633 "strb lr, [r9], #1\n\t"
4634 "bne L_aes_gcm_encrypt_arm32_crypto_192_start_byte_%=\n\t"
4635 "\n"
4636 "L_aes_gcm_encrypt_arm32_crypto_192_end_bytes_%=:\n\t"
4637 "sub r9, r9, r11\n\t"
4638 "add r5, r5, #1\n\t"
4639 "vmov.8 q4, q6\n\t"
4640 "rev r8, r5\n\t"
4641 "vmov s19, r8\n\t"
4642 "aese.8 q4, q0\n\t"
4643 "aesmc.8 q4, q4\n\t"
4644 "aese.8 q4, q1\n\t"
4645 "aesmc.8 q4, q4\n\t"
4646 "aese.8 q4, q2\n\t"
4647 "aesmc.8 q4, q4\n\t"
4648 "aese.8 q4, q3\n\t"
4649 "aesmc.8 q4, q4\n\t"
4650 "aese.8 q4, q7\n\t"
4651 "aesmc.8 q4, q4\n\t"
4652 "aese.8 q4, q8\n\t"
4653 "aesmc.8 q4, q4\n\t"
4654 "aese.8 q4, q9\n\t"
4655 "aesmc.8 q4, q4\n\t"
4656 "aese.8 q4, q10\n\t"
4657 "aesmc.8 q4, q4\n\t"
4658 "aese.8 q4, q11\n\t"
4659 "aesmc.8 q4, q4\n\t"
4660 "aese.8 q4, q12\n\t"
4661 "aesmc.8 q4, q4\n\t"
4662 "vld1.32 {q14}, [r7]!\n\t"
4663 "aese.8 q4, q13\n\t"
4664 "aesmc.8 q4, q4\n\t"
4665 "vld1.32 {q15}, [r7]\n\t"
4666 "aese.8 q4, q14\n\t"
4667 "veor.8 q4, q4, q15\n\t"
4668 "vld1.8 {q14}, [r9]\n\t"
4669 "sub r7, r7, #16\n\t"
4670 "veor.8 q14, q14, q4\n\t"
4671 "vst1.32 {q14}, [r9]\n\t"
4672 "mov r4, r11\n\t"
4673 "cmp r4, #4\n\t"
4674 "blt L_aes_gcm_encrypt_arm32_crypto_192_out_start_sw_%=\n\t"
4675 "\n"
4676 "L_aes_gcm_encrypt_arm32_crypto_192_out_start_dw_%=:\n\t"
4677 "ldr lr, [r9], #4\n\t"
4678 "sub r4, r4, #4\n\t"
4679 "str lr, [%[out]], #4\n\t"
4680 "cmp r4, #4\n\t"
4681 "bge L_aes_gcm_encrypt_arm32_crypto_192_out_start_dw_%=\n\t"
4682 "\n"
4683 "L_aes_gcm_encrypt_arm32_crypto_192_out_start_sw_%=:\n\t"
4684 "cmp r4, #2\n\t"
4685 "blt L_aes_gcm_encrypt_arm32_crypto_192_out_start_byte_%=\n\t"
4686 "ldrh lr, [r9], #2\n\t"
4687 "sub r4, r4, #2\n\t"
4688 "strh lr, [%[out]], #2\n\t"
4689 "\n"
4690 "L_aes_gcm_encrypt_arm32_crypto_192_out_start_byte_%=:\n\t"
4691 "cmp r4, #1\n\t"
4692 "blt L_aes_gcm_encrypt_arm32_crypto_192_out_end_bytes_%=\n\t"
4693 "ldrb lr, [r9], #1\n\t"
4694 "subs r4, r4, #1\n\t"
4695 "strb lr, [%[out]], #1\n\t"
4696 "bne L_aes_gcm_encrypt_arm32_crypto_192_out_start_byte_%=\n\t"
4697 "\n"
4698 "L_aes_gcm_encrypt_arm32_crypto_192_out_end_bytes_%=:\n\t"
4699 "\n"
4700 "L_aes_gcm_encrypt_arm32_crypto_192_partial_done_%=:\n\t"
4701 /* Finish */
4702 "add r8, %[sz], #15\n\t"
4703 "sub r8, r5, r8, lsr #4\n\t"
4704 "rev r8, r8\n\t"
4705 "vmov.32 s27, r8\n\t"
4706 "aese.8 q6, q0\n\t"
4707 "aesmc.8 q6, q6\n\t"
4708 "aese.8 q6, q1\n\t"
4709 "aesmc.8 q6, q6\n\t"
4710 "aese.8 q6, q2\n\t"
4711 "aesmc.8 q6, q6\n\t"
4712 "aese.8 q6, q3\n\t"
4713 "aesmc.8 q6, q6\n\t"
4714 "aese.8 q6, q7\n\t"
4715 "aesmc.8 q6, q6\n\t"
4716 "aese.8 q6, q8\n\t"
4717 "aesmc.8 q6, q6\n\t"
4718 "aese.8 q6, q9\n\t"
4719 "aesmc.8 q6, q6\n\t"
4720 "aese.8 q6, q10\n\t"
4721 "aesmc.8 q6, q6\n\t"
4722 "aese.8 q6, q11\n\t"
4723 "aesmc.8 q6, q6\n\t"
4724 "aese.8 q6, q12\n\t"
4725 "aesmc.8 q6, q6\n\t"
4726 "vld1.32 {q14}, [r7]!\n\t"
4727 "aese.8 q6, q13\n\t"
4728 "aesmc.8 q6, q6\n\t"
4729 "vld1.32 {q15}, [r7]\n\t"
4730 "aese.8 q6, q14\n\t"
4731 "veor.8 q6, q6, q15\n\t"
4732 "sub r7, r7, #16\n\t"
4733#endif /* !NO_AES_192 */
4734 "b L_aes_gcm_encrypt_arm32_crypto_done_enc_%=\n\t"
4735 /* AES_GCM_256 */
4736 "\n"
4737 "L_aes_gcm_encrypt_arm32_crypto_start_256_%=:\n\t"
4738#ifndef NO_AES_256
4739 "cmp r10, #1\n\t"
4740 "blt L_aes_gcm_encrypt_arm32_crypto_256_done_%=\n\t"
4741 "beq L_aes_gcm_encrypt_arm32_crypto_256_start_1_%=\n\t"
4742 "\n"
4743 "L_aes_gcm_encrypt_arm32_crypto_256_start_2_%=:\n\t"
4744 "add r8, r5, #1\n\t"
4745 "vmov.8 q4, q6\n\t"
4746 "add r5, r5, #2\n\t"
4747 "vmov.8 q5, q6\n\t"
4748 "rev r8, r8\n\t"
4749 "rev r12, r5\n\t"
4750 "vmov s19, r8\n\t"
4751 "vmov s23, r12\n\t"
4752 "aese.8 q4, q0\n\t"
4753 "aesmc.8 q4, q4\n\t"
4754 "aese.8 q5, q0\n\t"
4755 "aesmc.8 q5, q5\n\t"
4756 "aese.8 q4, q1\n\t"
4757 "aesmc.8 q4, q4\n\t"
4758 "aese.8 q5, q1\n\t"
4759 "aesmc.8 q5, q5\n\t"
4760 "aese.8 q4, q2\n\t"
4761 "aesmc.8 q4, q4\n\t"
4762 "aese.8 q5, q2\n\t"
4763 "aesmc.8 q5, q5\n\t"
4764 "aese.8 q4, q3\n\t"
4765 "aesmc.8 q4, q4\n\t"
4766 "aese.8 q5, q3\n\t"
4767 "aesmc.8 q5, q5\n\t"
4768 "aese.8 q4, q7\n\t"
4769 "aesmc.8 q4, q4\n\t"
4770 "aese.8 q5, q7\n\t"
4771 "aesmc.8 q5, q5\n\t"
4772 "aese.8 q4, q8\n\t"
4773 "aesmc.8 q4, q4\n\t"
4774 "aese.8 q5, q8\n\t"
4775 "aesmc.8 q5, q5\n\t"
4776 "aese.8 q4, q9\n\t"
4777 "aesmc.8 q4, q4\n\t"
4778 "aese.8 q5, q9\n\t"
4779 "aesmc.8 q5, q5\n\t"
4780 "subs r10, r10, #2\n\t"
4781 "aese.8 q4, q10\n\t"
4782 "aesmc.8 q4, q4\n\t"
4783 "aese.8 q5, q10\n\t"
4784 "aesmc.8 q5, q5\n\t"
4785 "aese.8 q4, q11\n\t"
4786 "aesmc.8 q4, q4\n\t"
4787 "aese.8 q5, q11\n\t"
4788 "aesmc.8 q5, q5\n\t"
4789 "aese.8 q4, q12\n\t"
4790 "aesmc.8 q4, q4\n\t"
4791 "aese.8 q5, q12\n\t"
4792 "aesmc.8 q5, q5\n\t"
4793 "vld1.32 {q14}, [r7]!\n\t"
4794 "aese.8 q4, q13\n\t"
4795 "aesmc.8 q4, q4\n\t"
4796 "aese.8 q5, q13\n\t"
4797 "aesmc.8 q5, q5\n\t"
4798 "vld1.32 {q15}, [r7]!\n\t"
4799 "aese.8 q4, q14\n\t"
4800 "aesmc.8 q4, q4\n\t"
4801 "aese.8 q5, q14\n\t"
4802 "aesmc.8 q5, q5\n\t"
4803 "vld1.32 {q14}, [r7]!\n\t"
4804 "aese.8 q4, q15\n\t"
4805 "aesmc.8 q4, q4\n\t"
4806 "aese.8 q5, q15\n\t"
4807 "aesmc.8 q5, q5\n\t"
4808 "vld1.32 {q15}, [r7]\n\t"
4809 "aese.8 q4, q14\n\t"
4810 "veor.8 q4, q4, q15\n\t"
4811 "aese.8 q5, q14\n\t"
4812 "veor.8 q5, q5, q15\n\t"
4813 "vld1.8 {q14-q15}, [%[in]]!\n\t"
4814 "sub r7, r7, #48\n\t"
4815 "veor.8 q14, q14, q4\n\t"
4816 "veor.8 q15, q15, q5\n\t"
4817 "vst1.8 {q14-q15}, [%[out]]!\n\t"
4818 "cmp r10, #1\n\t"
4819 "bgt L_aes_gcm_encrypt_arm32_crypto_256_start_2_%=\n\t"
4820 "blt L_aes_gcm_encrypt_arm32_crypto_256_done_%=\n\t"
4821 "\n"
4822 "L_aes_gcm_encrypt_arm32_crypto_256_start_1_%=:\n\t"
4823 "add r5, r5, #1\n\t"
4824 "vmov.8 q4, q6\n\t"
4825 "rev r8, r5\n\t"
4826 "vmov s19, r8\n\t"
4827 "aese.8 q4, q0\n\t"
4828 "aesmc.8 q4, q4\n\t"
4829 "aese.8 q4, q1\n\t"
4830 "aesmc.8 q4, q4\n\t"
4831 "aese.8 q4, q2\n\t"
4832 "aesmc.8 q4, q4\n\t"
4833 "aese.8 q4, q3\n\t"
4834 "aesmc.8 q4, q4\n\t"
4835 "aese.8 q4, q7\n\t"
4836 "aesmc.8 q4, q4\n\t"
4837 "aese.8 q4, q8\n\t"
4838 "aesmc.8 q4, q4\n\t"
4839 "aese.8 q4, q9\n\t"
4840 "aesmc.8 q4, q4\n\t"
4841 "aese.8 q4, q10\n\t"
4842 "aesmc.8 q4, q4\n\t"
4843 "aese.8 q4, q11\n\t"
4844 "aesmc.8 q4, q4\n\t"
4845 "aese.8 q4, q12\n\t"
4846 "aesmc.8 q4, q4\n\t"
4847 "vld1.32 {q14}, [r7]!\n\t"
4848 "aese.8 q4, q13\n\t"
4849 "aesmc.8 q4, q4\n\t"
4850 "vld1.32 {q15}, [r7]!\n\t"
4851 "aese.8 q4, q14\n\t"
4852 "aesmc.8 q4, q4\n\t"
4853 "vld1.32 {q14}, [r7]!\n\t"
4854 "aese.8 q4, q15\n\t"
4855 "aesmc.8 q4, q4\n\t"
4856 "vld1.32 {q15}, [r7]\n\t"
4857 "aese.8 q4, q14\n\t"
4858 "veor.8 q4, q4, q15\n\t"
4859 "vld1.8 {q14}, [%[in]]!\n\t"
4860 "sub r7, r7, #48\n\t"
4861 "veor.8 q14, q14, q4\n\t"
4862 "vst1.32 {q14}, [%[out]]!\n\t"
4863 "\n"
4864 "L_aes_gcm_encrypt_arm32_crypto_256_done_%=:\n\t"
4865 "ands r11, %[sz], #15\n\t"
4866 "beq L_aes_gcm_encrypt_arm32_crypto_256_partial_done_%=\n\t"
4867 "veor.8 q14, q14, q14\n\t"
4868 "mov r4, r11\n\t"
4869 "vst1.32 {q14}, [r9]\n\t"
4870 "cmp r4, #4\n\t"
4871 "blt L_aes_gcm_encrypt_arm32_crypto_256_start_sw_%=\n\t"
4872 "\n"
4873 "L_aes_gcm_encrypt_arm32_crypto_256_start_dw_%=:\n\t"
4874 "ldr lr, [%[in]], #4\n\t"
4875 "sub r4, r4, #4\n\t"
4876 "str lr, [r9], #4\n\t"
4877 "cmp r4, #4\n\t"
4878 "bge L_aes_gcm_encrypt_arm32_crypto_256_start_dw_%=\n\t"
4879 "\n"
4880 "L_aes_gcm_encrypt_arm32_crypto_256_start_sw_%=:\n\t"
4881 "cmp r4, #2\n\t"
4882 "blt L_aes_gcm_encrypt_arm32_crypto_256_start_byte_%=\n\t"
4883 "ldrh lr, [%[in]], #2\n\t"
4884 "sub r4, r4, #2\n\t"
4885 "strh lr, [r9], #2\n\t"
4886 "\n"
4887 "L_aes_gcm_encrypt_arm32_crypto_256_start_byte_%=:\n\t"
4888 "cmp r4, #1\n\t"
4889 "blt L_aes_gcm_encrypt_arm32_crypto_256_end_bytes_%=\n\t"
4890 "ldrb lr, [%[in]], #1\n\t"
4891 "subs r4, r4, #1\n\t"
4892 "strb lr, [r9], #1\n\t"
4893 "bne L_aes_gcm_encrypt_arm32_crypto_256_start_byte_%=\n\t"
4894 "\n"
4895 "L_aes_gcm_encrypt_arm32_crypto_256_end_bytes_%=:\n\t"
4896 "sub r9, r9, r11\n\t"
4897 "add r5, r5, #1\n\t"
4898 "vmov.8 q4, q6\n\t"
4899 "rev r8, r5\n\t"
4900 "vmov s19, r8\n\t"
4901 "aese.8 q4, q0\n\t"
4902 "aesmc.8 q4, q4\n\t"
4903 "aese.8 q4, q1\n\t"
4904 "aesmc.8 q4, q4\n\t"
4905 "aese.8 q4, q2\n\t"
4906 "aesmc.8 q4, q4\n\t"
4907 "aese.8 q4, q3\n\t"
4908 "aesmc.8 q4, q4\n\t"
4909 "aese.8 q4, q7\n\t"
4910 "aesmc.8 q4, q4\n\t"
4911 "aese.8 q4, q8\n\t"
4912 "aesmc.8 q4, q4\n\t"
4913 "aese.8 q4, q9\n\t"
4914 "aesmc.8 q4, q4\n\t"
4915 "aese.8 q4, q10\n\t"
4916 "aesmc.8 q4, q4\n\t"
4917 "aese.8 q4, q11\n\t"
4918 "aesmc.8 q4, q4\n\t"
4919 "aese.8 q4, q12\n\t"
4920 "aesmc.8 q4, q4\n\t"
4921 "vld1.32 {q14}, [r7]!\n\t"
4922 "aese.8 q4, q13\n\t"
4923 "aesmc.8 q4, q4\n\t"
4924 "vld1.32 {q15}, [r7]!\n\t"
4925 "aese.8 q4, q14\n\t"
4926 "aesmc.8 q4, q4\n\t"
4927 "vld1.32 {q14}, [r7]!\n\t"
4928 "aese.8 q4, q15\n\t"
4929 "aesmc.8 q4, q4\n\t"
4930 "vld1.32 {q15}, [r7]\n\t"
4931 "aese.8 q4, q14\n\t"
4932 "veor.8 q4, q4, q15\n\t"
4933 "vld1.8 {q14}, [r9]\n\t"
4934 "sub r7, r7, #48\n\t"
4935 "veor.8 q14, q14, q4\n\t"
4936 "vst1.32 {q14}, [r9]\n\t"
4937 "mov r4, r11\n\t"
4938 "cmp r4, #4\n\t"
4939 "blt L_aes_gcm_encrypt_arm32_crypto_256_out_start_sw_%=\n\t"
4940 "\n"
4941 "L_aes_gcm_encrypt_arm32_crypto_256_out_start_dw_%=:\n\t"
4942 "ldr lr, [r9], #4\n\t"
4943 "sub r4, r4, #4\n\t"
4944 "str lr, [%[out]], #4\n\t"
4945 "cmp r4, #4\n\t"
4946 "bge L_aes_gcm_encrypt_arm32_crypto_256_out_start_dw_%=\n\t"
4947 "\n"
4948 "L_aes_gcm_encrypt_arm32_crypto_256_out_start_sw_%=:\n\t"
4949 "cmp r4, #2\n\t"
4950 "blt L_aes_gcm_encrypt_arm32_crypto_256_out_start_byte_%=\n\t"
4951 "ldrh lr, [r9], #2\n\t"
4952 "sub r4, r4, #2\n\t"
4953 "strh lr, [%[out]], #2\n\t"
4954 "\n"
4955 "L_aes_gcm_encrypt_arm32_crypto_256_out_start_byte_%=:\n\t"
4956 "cmp r4, #1\n\t"
4957 "blt L_aes_gcm_encrypt_arm32_crypto_256_out_end_bytes_%=\n\t"
4958 "ldrb lr, [r9], #1\n\t"
4959 "subs r4, r4, #1\n\t"
4960 "strb lr, [%[out]], #1\n\t"
4961 "bne L_aes_gcm_encrypt_arm32_crypto_256_out_start_byte_%=\n\t"
4962 "\n"
4963 "L_aes_gcm_encrypt_arm32_crypto_256_out_end_bytes_%=:\n\t"
4964 "\n"
4965 "L_aes_gcm_encrypt_arm32_crypto_256_partial_done_%=:\n\t"
4966 /* Finish */
4967 "add r8, %[sz], #15\n\t"
4968 "sub r8, r5, r8, lsr #4\n\t"
4969 "rev r8, r8\n\t"
4970 "vmov.32 s27, r8\n\t"
4971 "aese.8 q6, q0\n\t"
4972 "aesmc.8 q6, q6\n\t"
4973 "aese.8 q6, q1\n\t"
4974 "aesmc.8 q6, q6\n\t"
4975 "aese.8 q6, q2\n\t"
4976 "aesmc.8 q6, q6\n\t"
4977 "aese.8 q6, q3\n\t"
4978 "aesmc.8 q6, q6\n\t"
4979 "aese.8 q6, q7\n\t"
4980 "aesmc.8 q6, q6\n\t"
4981 "aese.8 q6, q8\n\t"
4982 "aesmc.8 q6, q6\n\t"
4983 "aese.8 q6, q9\n\t"
4984 "aesmc.8 q6, q6\n\t"
4985 "aese.8 q6, q10\n\t"
4986 "aesmc.8 q6, q6\n\t"
4987 "aese.8 q6, q11\n\t"
4988 "aesmc.8 q6, q6\n\t"
4989 "aese.8 q6, q12\n\t"
4990 "aesmc.8 q6, q6\n\t"
4991 "vld1.32 {q14}, [r7]!\n\t"
4992 "aese.8 q6, q13\n\t"
4993 "aesmc.8 q6, q6\n\t"
4994 "vld1.32 {q15}, [r7]!\n\t"
4995 "aese.8 q6, q14\n\t"
4996 "aesmc.8 q6, q6\n\t"
4997 "vld1.32 {q14}, [r7]!\n\t"
4998 "aese.8 q6, q15\n\t"
4999 "aesmc.8 q6, q6\n\t"
5000 "vld1.32 {q15}, [r7]\n\t"
5001 "aese.8 q6, q14\n\t"
5002 "veor.8 q6, q6, q15\n\t"
5003 "sub r7, r7, #48\n\t"
5004#endif /* !NO_AES_256 */
5005 "b L_aes_gcm_encrypt_arm32_crypto_done_enc_%=\n\t"
5006 /* AES_GCM_128 */
5007 "\n"
5008 "L_aes_gcm_encrypt_arm32_crypto_start_128_%=:\n\t"
5009#ifndef NO_AES_128
5010 "cmp r10, #1\n\t"
5011 "blt L_aes_gcm_encrypt_arm32_crypto_128_done_%=\n\t"
5012 "beq L_aes_gcm_encrypt_arm32_crypto_128_start_1_%=\n\t"
5013 "\n"
5014 "L_aes_gcm_encrypt_arm32_crypto_128_start_2_%=:\n\t"
5015 "add r8, r5, #1\n\t"
5016 "vmov.8 q4, q6\n\t"
5017 "add r5, r5, #2\n\t"
5018 "vmov.8 q5, q6\n\t"
5019 "rev r8, r8\n\t"
5020 "rev r12, r5\n\t"
5021 "vmov s19, r8\n\t"
5022 "vmov s23, r12\n\t"
5023 "aese.8 q4, q0\n\t"
5024 "aesmc.8 q4, q4\n\t"
5025 "aese.8 q5, q0\n\t"
5026 "aesmc.8 q5, q5\n\t"
5027 "aese.8 q4, q1\n\t"
5028 "aesmc.8 q4, q4\n\t"
5029 "aese.8 q5, q1\n\t"
5030 "aesmc.8 q5, q5\n\t"
5031 "aese.8 q4, q2\n\t"
5032 "aesmc.8 q4, q4\n\t"
5033 "aese.8 q5, q2\n\t"
5034 "aesmc.8 q5, q5\n\t"
5035 "aese.8 q4, q3\n\t"
5036 "aesmc.8 q4, q4\n\t"
5037 "aese.8 q5, q3\n\t"
5038 "aesmc.8 q5, q5\n\t"
5039 "aese.8 q4, q7\n\t"
5040 "aesmc.8 q4, q4\n\t"
5041 "aese.8 q5, q7\n\t"
5042 "aesmc.8 q5, q5\n\t"
5043 "aese.8 q4, q8\n\t"
5044 "aesmc.8 q4, q4\n\t"
5045 "aese.8 q5, q8\n\t"
5046 "aesmc.8 q5, q5\n\t"
5047 "aese.8 q4, q9\n\t"
5048 "aesmc.8 q4, q4\n\t"
5049 "aese.8 q5, q9\n\t"
5050 "aesmc.8 q5, q5\n\t"
5051 "subs r10, r10, #2\n\t"
5052 "aese.8 q4, q10\n\t"
5053 "aesmc.8 q4, q4\n\t"
5054 "aese.8 q5, q10\n\t"
5055 "aesmc.8 q5, q5\n\t"
5056 "aese.8 q4, q11\n\t"
5057 "aesmc.8 q4, q4\n\t"
5058 "aese.8 q5, q11\n\t"
5059 "aesmc.8 q5, q5\n\t"
5060 "vld1.8 {q14-q15}, [%[in]]!\n\t"
5061 "aese.8 q4, q12\n\t"
5062 "veor.8 q4, q4, q13\n\t"
5063 "aese.8 q5, q12\n\t"
5064 "veor.8 q5, q5, q13\n\t"
5065 "veor.8 q14, q14, q4\n\t"
5066 "veor.8 q15, q15, q5\n\t"
5067 "vst1.8 {q14-q15}, [%[out]]!\n\t"
5068 "cmp r10, #1\n\t"
5069 "bgt L_aes_gcm_encrypt_arm32_crypto_128_start_2_%=\n\t"
5070 "blt L_aes_gcm_encrypt_arm32_crypto_128_done_%=\n\t"
5071 "\n"
5072 "L_aes_gcm_encrypt_arm32_crypto_128_start_1_%=:\n\t"
5073 "add r5, r5, #1\n\t"
5074 "vmov.8 q4, q6\n\t"
5075 "rev r8, r5\n\t"
5076 "vmov s19, r8\n\t"
5077 "aese.8 q4, q0\n\t"
5078 "aesmc.8 q4, q4\n\t"
5079 "aese.8 q4, q1\n\t"
5080 "aesmc.8 q4, q4\n\t"
5081 "aese.8 q4, q2\n\t"
5082 "aesmc.8 q4, q4\n\t"
5083 "aese.8 q4, q3\n\t"
5084 "aesmc.8 q4, q4\n\t"
5085 "aese.8 q4, q7\n\t"
5086 "aesmc.8 q4, q4\n\t"
5087 "aese.8 q4, q8\n\t"
5088 "aesmc.8 q4, q4\n\t"
5089 "aese.8 q4, q9\n\t"
5090 "aesmc.8 q4, q4\n\t"
5091 "aese.8 q4, q10\n\t"
5092 "aesmc.8 q4, q4\n\t"
5093 "aese.8 q4, q11\n\t"
5094 "aesmc.8 q4, q4\n\t"
5095 "vld1.8 {q14}, [%[in]]!\n\t"
5096 "aese.8 q4, q12\n\t"
5097 "veor.8 q4, q4, q13\n\t"
5098 "veor.8 q14, q14, q4\n\t"
5099 "vst1.32 {q14}, [%[out]]!\n\t"
5100 "\n"
5101 "L_aes_gcm_encrypt_arm32_crypto_128_done_%=:\n\t"
5102 "ands r11, %[sz], #15\n\t"
5103 "beq L_aes_gcm_encrypt_arm32_crypto_128_partial_done_%=\n\t"
5104 "veor.8 q14, q14, q14\n\t"
5105 "mov r4, r11\n\t"
5106 "vst1.32 {q14}, [r9]\n\t"
5107 "cmp r4, #4\n\t"
5108 "blt L_aes_gcm_encrypt_arm32_crypto_128_start_sw_%=\n\t"
5109 "\n"
5110 "L_aes_gcm_encrypt_arm32_crypto_128_start_dw_%=:\n\t"
5111 "ldr lr, [%[in]], #4\n\t"
5112 "sub r4, r4, #4\n\t"
5113 "str lr, [r9], #4\n\t"
5114 "cmp r4, #4\n\t"
5115 "bge L_aes_gcm_encrypt_arm32_crypto_128_start_dw_%=\n\t"
5116 "\n"
5117 "L_aes_gcm_encrypt_arm32_crypto_128_start_sw_%=:\n\t"
5118 "cmp r4, #2\n\t"
5119 "blt L_aes_gcm_encrypt_arm32_crypto_128_start_byte_%=\n\t"
5120 "ldrh lr, [%[in]], #2\n\t"
5121 "sub r4, r4, #2\n\t"
5122 "strh lr, [r9], #2\n\t"
5123 "\n"
5124 "L_aes_gcm_encrypt_arm32_crypto_128_start_byte_%=:\n\t"
5125 "cmp r4, #1\n\t"
5126 "blt L_aes_gcm_encrypt_arm32_crypto_128_end_bytes_%=\n\t"
5127 "ldrb lr, [%[in]], #1\n\t"
5128 "subs r4, r4, #1\n\t"
5129 "strb lr, [r9], #1\n\t"
5130 "bne L_aes_gcm_encrypt_arm32_crypto_128_start_byte_%=\n\t"
5131 "\n"
5132 "L_aes_gcm_encrypt_arm32_crypto_128_end_bytes_%=:\n\t"
5133 "sub r9, r9, r11\n\t"
5134 "add r5, r5, #1\n\t"
5135 "vmov.8 q4, q6\n\t"
5136 "rev r8, r5\n\t"
5137 "vmov s19, r8\n\t"
5138 "aese.8 q4, q0\n\t"
5139 "aesmc.8 q4, q4\n\t"
5140 "aese.8 q4, q1\n\t"
5141 "aesmc.8 q4, q4\n\t"
5142 "aese.8 q4, q2\n\t"
5143 "aesmc.8 q4, q4\n\t"
5144 "aese.8 q4, q3\n\t"
5145 "aesmc.8 q4, q4\n\t"
5146 "aese.8 q4, q7\n\t"
5147 "aesmc.8 q4, q4\n\t"
5148 "aese.8 q4, q8\n\t"
5149 "aesmc.8 q4, q4\n\t"
5150 "aese.8 q4, q9\n\t"
5151 "aesmc.8 q4, q4\n\t"
5152 "aese.8 q4, q10\n\t"
5153 "aesmc.8 q4, q4\n\t"
5154 "aese.8 q4, q11\n\t"
5155 "aesmc.8 q4, q4\n\t"
5156 "vld1.8 {q14}, [r9]\n\t"
5157 "aese.8 q4, q12\n\t"
5158 "veor.8 q4, q4, q13\n\t"
5159 "veor.8 q14, q14, q4\n\t"
5160 "vst1.32 {q14}, [r9]\n\t"
5161 "mov r4, r11\n\t"
5162 "cmp r4, #4\n\t"
5163 "blt L_aes_gcm_encrypt_arm32_crypto_128_out_start_sw_%=\n\t"
5164 "\n"
5165 "L_aes_gcm_encrypt_arm32_crypto_128_out_start_dw_%=:\n\t"
5166 "ldr lr, [r9], #4\n\t"
5167 "sub r4, r4, #4\n\t"
5168 "str lr, [%[out]], #4\n\t"
5169 "cmp r4, #4\n\t"
5170 "bge L_aes_gcm_encrypt_arm32_crypto_128_out_start_dw_%=\n\t"
5171 "\n"
5172 "L_aes_gcm_encrypt_arm32_crypto_128_out_start_sw_%=:\n\t"
5173 "cmp r4, #2\n\t"
5174 "blt L_aes_gcm_encrypt_arm32_crypto_128_out_start_byte_%=\n\t"
5175 "ldrh lr, [r9], #2\n\t"
5176 "sub r4, r4, #2\n\t"
5177 "strh lr, [%[out]], #2\n\t"
5178 "\n"
5179 "L_aes_gcm_encrypt_arm32_crypto_128_out_start_byte_%=:\n\t"
5180 "cmp r4, #1\n\t"
5181 "blt L_aes_gcm_encrypt_arm32_crypto_128_out_end_bytes_%=\n\t"
5182 "ldrb lr, [r9], #1\n\t"
5183 "subs r4, r4, #1\n\t"
5184 "strb lr, [%[out]], #1\n\t"
5185 "bne L_aes_gcm_encrypt_arm32_crypto_128_out_start_byte_%=\n\t"
5186 "\n"
5187 "L_aes_gcm_encrypt_arm32_crypto_128_out_end_bytes_%=:\n\t"
5188 "\n"
5189 "L_aes_gcm_encrypt_arm32_crypto_128_partial_done_%=:\n\t"
5190 /* Finish */
5191 "add r8, %[sz], #15\n\t"
5192 "sub r8, r5, r8, lsr #4\n\t"
5193 "rev r8, r8\n\t"
5194 "vmov.32 s27, r8\n\t"
5195 "aese.8 q6, q0\n\t"
5196 "aesmc.8 q6, q6\n\t"
5197 "aese.8 q6, q1\n\t"
5198 "aesmc.8 q6, q6\n\t"
5199 "aese.8 q6, q2\n\t"
5200 "aesmc.8 q6, q6\n\t"
5201 "aese.8 q6, q3\n\t"
5202 "aesmc.8 q6, q6\n\t"
5203 "aese.8 q6, q7\n\t"
5204 "aesmc.8 q6, q6\n\t"
5205 "aese.8 q6, q8\n\t"
5206 "aesmc.8 q6, q6\n\t"
5207 "aese.8 q6, q9\n\t"
5208 "aesmc.8 q6, q6\n\t"
5209 "aese.8 q6, q10\n\t"
5210 "aesmc.8 q6, q6\n\t"
5211 "aese.8 q6, q11\n\t"
5212 "aesmc.8 q6, q6\n\t"
5213 "aese.8 q6, q12\n\t"
5214 "veor.8 q6, q6, q13\n\t"
5215#endif /* !NO_AES_128 */
5216 "\n"
5217 "L_aes_gcm_encrypt_arm32_crypto_done_enc_%=:\n\t"
5218 /* aadSz */
5219 "ldr r6, [sp, #16]\n\t"
5220 /* gcm_h */
5221 "ldr r8, [sp, #24]\n\t"
5222 "sub %[out], %[out], %[sz]\n\t"
5223 "vmov.i8 q13, #0x87\n\t"
5224 "veor.8 q7, q7, q7\n\t"
5225 "vshr.u64 q13, q13, #56\n\t"
5226 "vld1.32 {q8}, [r8]\n\t"
5227 "orr r10, r6, %[sz]\n\t"
5228 "cmp r10, #32\n\t"
5229 "blt L_aes_gcm_encrypt_arm32_crypto_h_done_%=\n\t"
5230 /* Square H => H^2 */
5231 "vmull.p64 q1, d17, d17\n\t"
5232 "vmull.p64 q0, d16, d16\n\t"
5233 "vmull.p64 q9, d3, d27\n\t"
5234 "veor.8 d2, d2, d19\n\t"
5235 "veor.8 d1, d1, d18\n\t"
5236 "vmull.p64 q9, d2, d26\n\t"
5237 "veor.8 q9, q9, q0\n\t"
5238 "cmp r10, #0x40\n\t"
5239 "blt L_aes_gcm_encrypt_arm32_crypto_h_done_%=\n\t"
5240 /* Multiply H and H^2 => H^3 */
5241 "vmull.p64 q2, d17, d18\n\t"
5242 "vmull.p64 q3, d16, d19\n\t"
5243 "vmull.p64 q0, d16, d18\n\t"
5244 "vmull.p64 q1, d17, d19\n\t"
5245 "veor.8 q2, q2, q3\n\t"
5246 /* Reduce */
5247 "vmull.p64 q10, d3, d27\n\t"
5248 "veor.8 d2, d2, d5\n\t"
5249 "veor.8 d1, d1, d4\n\t"
5250 "veor.8 d2, d2, d21\n\t"
5251 "veor.8 d1, d1, d20\n\t"
5252 "vmull.p64 q10, d2, d26\n\t"
5253 "veor.8 q10, q10, q0\n\t"
5254 /* Square H^2 => H^4 */
5255 "vmull.p64 q1, d19, d19\n\t"
5256 "vmull.p64 q0, d18, d18\n\t"
5257 "vmull.p64 q11, d3, d27\n\t"
5258 "veor.8 d2, d2, d23\n\t"
5259 "veor.8 d1, d1, d22\n\t"
5260 "vmull.p64 q11, d2, d26\n\t"
5261 "veor.8 q11, q11, q0\n\t"
5262 /* Done */
5263 "\n"
5264 "L_aes_gcm_encrypt_arm32_crypto_h_done_%=:\n\t"
5265 /* aad */
5266 "ldr r5, [sp, #12]\n\t"
5267 "lsr r10, r6, #4\n\t"
5268 "cmp r10, #1\n\t"
5269 "blt L_aes_gcm_encrypt_arm32_crypto_aad_done_%=\n\t"
5270 "beq L_aes_gcm_encrypt_arm32_crypto_aad_start_1_%=\n\t"
5271 "cmp r10, #4\n\t"
5272 "blt L_aes_gcm_encrypt_arm32_crypto_aad_start_2_%=\n\t"
5273 "\n"
5274 "L_aes_gcm_encrypt_arm32_crypto_aad_start_4_%=:\n\t"
5275 "vldm r5!, {q0-q2}\n\t"
5276 "vmov.i8 q12, #0x55\n\t"
5277 "vmov.i8 q5, #51\n\t"
5278 "vshl.u8 q14, q0, #1\n\t"
5279 "vshl.u8 q15, q1, #1\n\t"
5280 "vshl.u8 q4, q2, #1\n\t"
5281 "ldr lr, [r5], #4\n\t"
5282 "vshr.u8 q0, q0, #1\n\t"
5283 "vshr.u8 q1, q1, #1\n\t"
5284 "vshr.u8 q2, q2, #1\n\t"
5285 "ldr r4, [r5], #4\n\t"
5286 "vbit.8 q14, q0, q12\n\t"
5287 "vbit.8 q15, q1, q12\n\t"
5288 "vbit.8 q4, q2, q12\n\t"
5289 "ldr r8, [r5], #4\n\t"
5290 "vshl.u8 q0, q14, #2\n\t"
5291 "vshl.u8 q1, q15, #2\n\t"
5292 "vshl.u8 q2, q4, #2\n\t"
5293 "ldr r12, [r5], #4\n\t"
5294 "vshr.u8 q14, q14, #2\n\t"
5295 "vshr.u8 q15, q15, #2\n\t"
5296 "vshr.u8 q4, q4, #2\n\t"
5297 "rbit lr, lr\n\t"
5298 "vbit.8 q0, q14, q5\n\t"
5299 "rbit r4, r4\n\t"
5300 "vbit.8 q1, q15, q5\n\t"
5301 "rbit r8, r8\n\t"
5302 "vbit.8 q2, q4, q5\n\t"
5303 "rbit r12, r12\n\t"
5304 "vshl.u8 q14, q0, #4\n\t"
5305 "rev lr, lr\n\t"
5306 "vshl.u8 q15, q1, #4\n\t"
5307 "rev r4, r4\n\t"
5308 "vshl.u8 q4, q2, #4\n\t"
5309 "rev r8, r8\n\t"
5310 "vsri.u8 q14, q0, #4\n\t"
5311 "rev r12, r12\n\t"
5312 "vsri.u8 q15, q1, #4\n\t"
5313 "vsri.u8 q4, q2, #4\n\t"
5314 "vmov d10, lr, r4\n\t"
5315 "vmov d11, r8, r12\n\t"
5316 "veor.8 q12, q7, q14\n\t"
5317 /* X = C * H^1 */
5318 "vmull.p64 q2, d11, d16\n\t"
5319 "vmull.p64 q7, d10, d17\n\t"
5320 "vmull.p64 q0, d10, d16\n\t"
5321 "vmull.p64 q1, d11, d17\n\t"
5322 "veor.8 q2, q2, q7\n\t"
5323 /* X += C * H^2 */
5324 "vmull.p64 q3, d8, d18\n\t"
5325 "vmull.p64 q7, d9, d19\n\t"
5326 "veor.8 q0, q0, q3\n\t"
5327 "veor.8 q1, q1, q7\n\t"
5328 "vmull.p64 q3, d9, d18\n\t"
5329 "vmull.p64 q7, d8, d19\n\t"
5330 "veor.8 q2, q2, q3\n\t"
5331 "veor.8 q2, q2, q7\n\t"
5332 /* X += C * H^3 */
5333 "vmull.p64 q3, d30, d20\n\t"
5334 "vmull.p64 q7, d31, d21\n\t"
5335 "veor.8 q0, q0, q3\n\t"
5336 "veor.8 q1, q1, q7\n\t"
5337 "vmull.p64 q3, d31, d20\n\t"
5338 "vmull.p64 q7, d30, d21\n\t"
5339 "veor.8 q2, q2, q3\n\t"
5340 "veor.8 q2, q2, q7\n\t"
5341 /* X += C * H^4 */
5342 "vmull.p64 q3, d24, d22\n\t"
5343 "vmull.p64 q7, d25, d23\n\t"
5344 "veor.8 q0, q0, q3\n\t"
5345 "veor.8 q1, q1, q7\n\t"
5346 "vmull.p64 q3, d25, d22\n\t"
5347 "vmull.p64 q7, d24, d23\n\t"
5348 "veor.8 q2, q2, q3\n\t"
5349 "veor.8 q2, q2, q7\n\t"
5350 /* Reduce */
5351 "vmull.p64 q7, d3, d27\n\t"
5352 "veor.8 d2, d2, d5\n\t"
5353 "veor.8 d1, d1, d4\n\t"
5354 "veor.8 d2, d2, d15\n\t"
5355 "veor.8 d1, d1, d14\n\t"
5356 "vmull.p64 q7, d2, d26\n\t"
5357 "veor.8 q7, q7, q0\n\t"
5358 /* Done GHASH */
5359 "sub r10, r10, #4\n\t"
5360 "cmp r10, #4\n\t"
5361 "bge L_aes_gcm_encrypt_arm32_crypto_aad_start_4_%=\n\t"
5362 "cmp r10, #1\n\t"
5363 "blt L_aes_gcm_encrypt_arm32_crypto_aad_done_%=\n\t"
5364 "beq L_aes_gcm_encrypt_arm32_crypto_aad_start_1_%=\n\t"
5365 "\n"
5366 "L_aes_gcm_encrypt_arm32_crypto_aad_start_2_%=:\n\t"
5367 "vld1.32 {q14-q15}, [r5]!\n\t"
5368 "vmov.i8 q12, #0x55\n\t"
5369 "vshl.u8 q0, q14, #1\n\t"
5370 "vshl.u8 q1, q15, #1\n\t"
5371 "vshr.u8 q14, q14, #1\n\t"
5372 "vshr.u8 q15, q15, #1\n\t"
5373 "vbif.8 q14, q0, q12\n\t"
5374 "vbif.8 q15, q1, q12\n\t"
5375 "vmov.i8 q12, #51\n\t"
5376 "vshl.u8 q0, q14, #2\n\t"
5377 "vshl.u8 q1, q15, #2\n\t"
5378 "vshr.u8 q14, q14, #2\n\t"
5379 "vshr.u8 q15, q15, #2\n\t"
5380 "vbit.8 q0, q14, q12\n\t"
5381 "vbit.8 q1, q15, q12\n\t"
5382 "vshl.u8 q14, q0, #4\n\t"
5383 "vshl.u8 q15, q1, #4\n\t"
5384 "vsri.u8 q14, q0, #4\n\t"
5385 "vsri.u8 q15, q1, #4\n\t"
5386 "veor.8 q12, q7, q14\n\t"
5387 /* X = C * H^1 */
5388 "vmull.p64 q2, d31, d16\n\t"
5389 "vmull.p64 q7, d30, d17\n\t"
5390 "vmull.p64 q0, d30, d16\n\t"
5391 "vmull.p64 q1, d31, d17\n\t"
5392 "veor.8 q2, q2, q7\n\t"
5393 /* X += C * H^2 */
5394 "vmull.p64 q3, d24, d18\n\t"
5395 "vmull.p64 q7, d25, d19\n\t"
5396 "veor.8 q0, q0, q3\n\t"
5397 "veor.8 q1, q1, q7\n\t"
5398 "vmull.p64 q3, d25, d18\n\t"
5399 "vmull.p64 q7, d24, d19\n\t"
5400 "veor.8 q2, q2, q3\n\t"
5401 "veor.8 q2, q2, q7\n\t"
5402 /* Reduce */
5403 "vmull.p64 q7, d3, d27\n\t"
5404 "veor.8 d2, d2, d5\n\t"
5405 "veor.8 d1, d1, d4\n\t"
5406 "veor.8 d2, d2, d15\n\t"
5407 "veor.8 d1, d1, d14\n\t"
5408 "vmull.p64 q7, d2, d26\n\t"
5409 "veor.8 q7, q7, q0\n\t"
5410 /* Done GHASH */
5411 "sub r10, r10, #2\n\t"
5412 "cmp r10, #0\n\t"
5413 "beq L_aes_gcm_encrypt_arm32_crypto_aad_done_%=\n\t"
5414 "\n"
5415 "L_aes_gcm_encrypt_arm32_crypto_aad_start_1_%=:\n\t"
5416 "vld1.32 {q14}, [r5]!\n\t"
5417 "vmov.i8 q12, #0x55\n\t"
5418 "vshl.u8 q0, q14, #1\n\t"
5419 "vshr.u8 q14, q14, #1\n\t"
5420 "vbif.8 q14, q0, q12\n\t"
5421 "vmov.i8 q12, #51\n\t"
5422 "vshl.u8 q0, q14, #2\n\t"
5423 "vshr.u8 q14, q14, #2\n\t"
5424 "vbit.8 q0, q14, q12\n\t"
5425 "vshl.u8 q14, q0, #4\n\t"
5426 "vsri.u8 q14, q0, #4\n\t"
5427 "veor.8 q12, q7, q14\n\t"
5428 /* X = C * H^1 */
5429 "vmull.p64 q2, d25, d16\n\t"
5430 "vmull.p64 q7, d24, d17\n\t"
5431 "vmull.p64 q0, d24, d16\n\t"
5432 "vmull.p64 q1, d25, d17\n\t"
5433 "veor.8 q2, q2, q7\n\t"
5434 /* Reduce */
5435 "vmull.p64 q7, d3, d27\n\t"
5436 "veor.8 d2, d2, d5\n\t"
5437 "veor.8 d1, d1, d4\n\t"
5438 "veor.8 d2, d2, d15\n\t"
5439 "veor.8 d1, d1, d14\n\t"
5440 "vmull.p64 q7, d2, d26\n\t"
5441 "veor.8 q7, q7, q0\n\t"
5442 /* Done GHASH */
5443 "\n"
5444 "L_aes_gcm_encrypt_arm32_crypto_aad_done_%=:\n\t"
5445 "ands r11, r6, #15\n\t"
5446 "beq L_aes_gcm_encrypt_arm32_crypto_aad_partial_done_%=\n\t"
5447 "veor.8 q0, q0, q0\n\t"
5448 "mov r12, r11\n\t"
5449 "vst1.32 {q0}, [r9]\n\t"
5450 "cmp r12, #4\n\t"
5451 "blt L_aes_gcm_encrypt_arm32_crypto_aad_start_sw_%=\n\t"
5452 "\n"
5453 "L_aes_gcm_encrypt_arm32_crypto_aad_start_dw_%=:\n\t"
5454 "ldr r8, [r5], #4\n\t"
5455 "sub r12, r12, #4\n\t"
5456 "str r8, [r9], #4\n\t"
5457 "cmp r12, #4\n\t"
5458 "bge L_aes_gcm_encrypt_arm32_crypto_aad_start_dw_%=\n\t"
5459 "\n"
5460 "L_aes_gcm_encrypt_arm32_crypto_aad_start_sw_%=:\n\t"
5461 "cmp r12, #2\n\t"
5462 "blt L_aes_gcm_encrypt_arm32_crypto_aad_start_byte_%=\n\t"
5463 "ldrh r8, [r5], #2\n\t"
5464 "sub r12, r12, #2\n\t"
5465 "strh r8, [r9], #2\n\t"
5466 "\n"
5467 "L_aes_gcm_encrypt_arm32_crypto_aad_start_byte_%=:\n\t"
5468 "cmp r12, #1\n\t"
5469 "blt L_aes_gcm_encrypt_arm32_crypto_aad_end_bytes_%=\n\t"
5470 "ldrb r8, [r5], #1\n\t"
5471 "subs r12, r12, #1\n\t"
5472 "strb r8, [r9], #1\n\t"
5473 "bne L_aes_gcm_encrypt_arm32_crypto_aad_start_byte_%=\n\t"
5474 "\n"
5475 "L_aes_gcm_encrypt_arm32_crypto_aad_end_bytes_%=:\n\t"
5476 "sub r9, r9, r11\n\t"
5477 "vld1.32 {q14}, [r9]\n\t"
5478 "vmov.i8 q12, #0x55\n\t"
5479 "vshl.u8 q0, q14, #1\n\t"
5480 "vshr.u8 q14, q14, #1\n\t"
5481 "vbif.8 q14, q0, q12\n\t"
5482 "vmov.i8 q12, #51\n\t"
5483 "vshl.u8 q0, q14, #2\n\t"
5484 "vshr.u8 q14, q14, #2\n\t"
5485 "vbit.8 q0, q14, q12\n\t"
5486 "vshl.u8 q14, q0, #4\n\t"
5487 "vsri.u8 q14, q0, #4\n\t"
5488 "veor.8 q12, q7, q14\n\t"
5489 /* X = C * H^1 */
5490 "vmull.p64 q2, d25, d16\n\t"
5491 "vmull.p64 q7, d24, d17\n\t"
5492 "vmull.p64 q0, d24, d16\n\t"
5493 "vmull.p64 q1, d25, d17\n\t"
5494 "veor.8 q2, q2, q7\n\t"
5495 /* Reduce */
5496 "vmull.p64 q7, d3, d27\n\t"
5497 "veor.8 d2, d2, d5\n\t"
5498 "veor.8 d1, d1, d4\n\t"
5499 "veor.8 d2, d2, d15\n\t"
5500 "veor.8 d1, d1, d14\n\t"
5501 "vmull.p64 q7, d2, d26\n\t"
5502 "veor.8 q7, q7, q0\n\t"
5503 /* Done GHASH */
5504 "\n"
5505 "L_aes_gcm_encrypt_arm32_crypto_aad_partial_done_%=:\n\t"
5506 /* out */
5507 "lsr r10, %[sz], #4\n\t"
5508 "cmp r10, #1\n\t"
5509 "blt L_aes_gcm_encrypt_arm32_crypto_out_done_%=\n\t"
5510 "beq L_aes_gcm_encrypt_arm32_crypto_out_start_1_%=\n\t"
5511 "cmp r10, #4\n\t"
5512 "blt L_aes_gcm_encrypt_arm32_crypto_out_start_2_%=\n\t"
5513 "\n"
5514 "L_aes_gcm_encrypt_arm32_crypto_out_start_4_%=:\n\t"
5515 "vldm %[out]!, {q0-q2}\n\t"
5516 "vmov.i8 q12, #0x55\n\t"
5517 "vmov.i8 q5, #51\n\t"
5518 "vshl.u8 q14, q0, #1\n\t"
5519 "vshl.u8 q15, q1, #1\n\t"
5520 "vshl.u8 q4, q2, #1\n\t"
5521 "ldr lr, [%[out]], #4\n\t"
5522 "vshr.u8 q0, q0, #1\n\t"
5523 "vshr.u8 q1, q1, #1\n\t"
5524 "vshr.u8 q2, q2, #1\n\t"
5525 "ldr r4, [%[out]], #4\n\t"
5526 "vbit.8 q14, q0, q12\n\t"
5527 "vbit.8 q15, q1, q12\n\t"
5528 "vbit.8 q4, q2, q12\n\t"
5529 "ldr r8, [%[out]], #4\n\t"
5530 "vshl.u8 q0, q14, #2\n\t"
5531 "vshl.u8 q1, q15, #2\n\t"
5532 "vshl.u8 q2, q4, #2\n\t"
5533 "ldr r12, [%[out]], #4\n\t"
5534 "vshr.u8 q14, q14, #2\n\t"
5535 "vshr.u8 q15, q15, #2\n\t"
5536 "vshr.u8 q4, q4, #2\n\t"
5537 "rbit lr, lr\n\t"
5538 "vbit.8 q0, q14, q5\n\t"
5539 "rbit r4, r4\n\t"
5540 "vbit.8 q1, q15, q5\n\t"
5541 "rbit r8, r8\n\t"
5542 "vbit.8 q2, q4, q5\n\t"
5543 "rbit r12, r12\n\t"
5544 "vshl.u8 q14, q0, #4\n\t"
5545 "rev lr, lr\n\t"
5546 "vshl.u8 q15, q1, #4\n\t"
5547 "rev r4, r4\n\t"
5548 "vshl.u8 q4, q2, #4\n\t"
5549 "rev r8, r8\n\t"
5550 "vsri.u8 q14, q0, #4\n\t"
5551 "rev r12, r12\n\t"
5552 "vsri.u8 q15, q1, #4\n\t"
5553 "vsri.u8 q4, q2, #4\n\t"
5554 "vmov d10, lr, r4\n\t"
5555 "vmov d11, r8, r12\n\t"
5556 "veor.8 q12, q7, q14\n\t"
5557 /* X = C * H^1 */
5558 "vmull.p64 q2, d11, d16\n\t"
5559 "vmull.p64 q7, d10, d17\n\t"
5560 "vmull.p64 q0, d10, d16\n\t"
5561 "vmull.p64 q1, d11, d17\n\t"
5562 "veor.8 q2, q2, q7\n\t"
5563 /* X += C * H^2 */
5564 "vmull.p64 q3, d8, d18\n\t"
5565 "vmull.p64 q7, d9, d19\n\t"
5566 "veor.8 q0, q0, q3\n\t"
5567 "veor.8 q1, q1, q7\n\t"
5568 "vmull.p64 q3, d9, d18\n\t"
5569 "vmull.p64 q7, d8, d19\n\t"
5570 "veor.8 q2, q2, q3\n\t"
5571 "veor.8 q2, q2, q7\n\t"
5572 /* X += C * H^3 */
5573 "vmull.p64 q3, d30, d20\n\t"
5574 "vmull.p64 q7, d31, d21\n\t"
5575 "veor.8 q0, q0, q3\n\t"
5576 "veor.8 q1, q1, q7\n\t"
5577 "vmull.p64 q3, d31, d20\n\t"
5578 "vmull.p64 q7, d30, d21\n\t"
5579 "veor.8 q2, q2, q3\n\t"
5580 "veor.8 q2, q2, q7\n\t"
5581 /* X += C * H^4 */
5582 "vmull.p64 q3, d24, d22\n\t"
5583 "vmull.p64 q7, d25, d23\n\t"
5584 "veor.8 q0, q0, q3\n\t"
5585 "veor.8 q1, q1, q7\n\t"
5586 "vmull.p64 q3, d25, d22\n\t"
5587 "vmull.p64 q7, d24, d23\n\t"
5588 "veor.8 q2, q2, q3\n\t"
5589 "veor.8 q2, q2, q7\n\t"
5590 /* Reduce */
5591 "vmull.p64 q7, d3, d27\n\t"
5592 "veor.8 d2, d2, d5\n\t"
5593 "veor.8 d1, d1, d4\n\t"
5594 "veor.8 d2, d2, d15\n\t"
5595 "veor.8 d1, d1, d14\n\t"
5596 "vmull.p64 q7, d2, d26\n\t"
5597 "veor.8 q7, q7, q0\n\t"
5598 /* Done GHASH */
5599 "sub r10, r10, #4\n\t"
5600 "cmp r10, #4\n\t"
5601 "bge L_aes_gcm_encrypt_arm32_crypto_out_start_4_%=\n\t"
5602 "cmp r10, #1\n\t"
5603 "blt L_aes_gcm_encrypt_arm32_crypto_out_done_%=\n\t"
5604 "beq L_aes_gcm_encrypt_arm32_crypto_out_start_1_%=\n\t"
5605 "\n"
5606 "L_aes_gcm_encrypt_arm32_crypto_out_start_2_%=:\n\t"
5607 "vld1.32 {q14-q15}, [%[out]]!\n\t"
5608 "vmov.i8 q12, #0x55\n\t"
5609 "vshl.u8 q0, q14, #1\n\t"
5610 "vshl.u8 q1, q15, #1\n\t"
5611 "vshr.u8 q14, q14, #1\n\t"
5612 "vshr.u8 q15, q15, #1\n\t"
5613 "vbif.8 q14, q0, q12\n\t"
5614 "vbif.8 q15, q1, q12\n\t"
5615 "vmov.i8 q12, #51\n\t"
5616 "vshl.u8 q0, q14, #2\n\t"
5617 "vshl.u8 q1, q15, #2\n\t"
5618 "vshr.u8 q14, q14, #2\n\t"
5619 "vshr.u8 q15, q15, #2\n\t"
5620 "vbit.8 q0, q14, q12\n\t"
5621 "vbit.8 q1, q15, q12\n\t"
5622 "vshl.u8 q14, q0, #4\n\t"
5623 "vshl.u8 q15, q1, #4\n\t"
5624 "vsri.u8 q14, q0, #4\n\t"
5625 "vsri.u8 q15, q1, #4\n\t"
5626 "veor.8 q12, q7, q14\n\t"
5627 /* X = C * H^1 */
5628 "vmull.p64 q2, d31, d16\n\t"
5629 "vmull.p64 q7, d30, d17\n\t"
5630 "vmull.p64 q0, d30, d16\n\t"
5631 "vmull.p64 q1, d31, d17\n\t"
5632 "veor.8 q2, q2, q7\n\t"
5633 /* X += C * H^2 */
5634 "vmull.p64 q3, d24, d18\n\t"
5635 "vmull.p64 q7, d25, d19\n\t"
5636 "veor.8 q0, q0, q3\n\t"
5637 "veor.8 q1, q1, q7\n\t"
5638 "vmull.p64 q3, d25, d18\n\t"
5639 "vmull.p64 q7, d24, d19\n\t"
5640 "veor.8 q2, q2, q3\n\t"
5641 "veor.8 q2, q2, q7\n\t"
5642 /* Reduce */
5643 "vmull.p64 q7, d3, d27\n\t"
5644 "veor.8 d2, d2, d5\n\t"
5645 "veor.8 d1, d1, d4\n\t"
5646 "veor.8 d2, d2, d15\n\t"
5647 "veor.8 d1, d1, d14\n\t"
5648 "vmull.p64 q7, d2, d26\n\t"
5649 "veor.8 q7, q7, q0\n\t"
5650 /* Done GHASH */
5651 "sub r10, r10, #2\n\t"
5652 "cmp r10, #0\n\t"
5653 "beq L_aes_gcm_encrypt_arm32_crypto_out_done_%=\n\t"
5654 "\n"
5655 "L_aes_gcm_encrypt_arm32_crypto_out_start_1_%=:\n\t"
5656 "vld1.32 {q14}, [%[out]]!\n\t"
5657 "vmov.i8 q12, #0x55\n\t"
5658 "vshl.u8 q0, q14, #1\n\t"
5659 "vshr.u8 q14, q14, #1\n\t"
5660 "vbif.8 q14, q0, q12\n\t"
5661 "vmov.i8 q12, #51\n\t"
5662 "vshl.u8 q0, q14, #2\n\t"
5663 "vshr.u8 q14, q14, #2\n\t"
5664 "vbit.8 q0, q14, q12\n\t"
5665 "vshl.u8 q14, q0, #4\n\t"
5666 "vsri.u8 q14, q0, #4\n\t"
5667 "veor.8 q12, q7, q14\n\t"
5668 /* X = C * H^1 */
5669 "vmull.p64 q2, d25, d16\n\t"
5670 "vmull.p64 q7, d24, d17\n\t"
5671 "vmull.p64 q0, d24, d16\n\t"
5672 "vmull.p64 q1, d25, d17\n\t"
5673 "veor.8 q2, q2, q7\n\t"
5674 /* Reduce */
5675 "vmull.p64 q7, d3, d27\n\t"
5676 "veor.8 d2, d2, d5\n\t"
5677 "veor.8 d1, d1, d4\n\t"
5678 "veor.8 d2, d2, d15\n\t"
5679 "veor.8 d1, d1, d14\n\t"
5680 "vmull.p64 q7, d2, d26\n\t"
5681 "veor.8 q7, q7, q0\n\t"
5682 /* Done GHASH */
5683 "\n"
5684 "L_aes_gcm_encrypt_arm32_crypto_out_done_%=:\n\t"
5685 "ands r11, %[sz], #15\n\t"
5686 "beq L_aes_gcm_encrypt_arm32_crypto_out_partial_done_%=\n\t"
5687 "veor.8 q0, q0, q0\n\t"
5688 "mov r12, r11\n\t"
5689 "vst1.32 {q0}, [r9]\n\t"
5690 "cmp r12, #4\n\t"
5691 "blt L_aes_gcm_encrypt_arm32_crypto_out_start_sw_%=\n\t"
5692 "\n"
5693 "L_aes_gcm_encrypt_arm32_crypto_out_start_dw_%=:\n\t"
5694 "ldr r8, [%[out]], #4\n\t"
5695 "sub r12, r12, #4\n\t"
5696 "str r8, [r9], #4\n\t"
5697 "cmp r12, #4\n\t"
5698 "bge L_aes_gcm_encrypt_arm32_crypto_out_start_dw_%=\n\t"
5699 "\n"
5700 "L_aes_gcm_encrypt_arm32_crypto_out_start_sw_%=:\n\t"
5701 "cmp r12, #2\n\t"
5702 "blt L_aes_gcm_encrypt_arm32_crypto_out_start_byte_%=\n\t"
5703 "ldrh r8, [%[out]], #2\n\t"
5704 "sub r12, r12, #2\n\t"
5705 "strh r8, [r9], #2\n\t"
5706 "\n"
5707 "L_aes_gcm_encrypt_arm32_crypto_out_start_byte_%=:\n\t"
5708 "cmp r12, #1\n\t"
5709 "blt L_aes_gcm_encrypt_arm32_crypto_out_end_bytes_%=\n\t"
5710 "ldrb r8, [%[out]], #1\n\t"
5711 "subs r12, r12, #1\n\t"
5712 "strb r8, [r9], #1\n\t"
5713 "bne L_aes_gcm_encrypt_arm32_crypto_out_start_byte_%=\n\t"
5714 "\n"
5715 "L_aes_gcm_encrypt_arm32_crypto_out_end_bytes_%=:\n\t"
5716 "sub r9, r9, r11\n\t"
5717 "vld1.32 {q14}, [r9]\n\t"
5718 "vmov.i8 q12, #0x55\n\t"
5719 "vshl.u8 q0, q14, #1\n\t"
5720 "vshr.u8 q14, q14, #1\n\t"
5721 "vbif.8 q14, q0, q12\n\t"
5722 "vmov.i8 q12, #51\n\t"
5723 "vshl.u8 q0, q14, #2\n\t"
5724 "vshr.u8 q14, q14, #2\n\t"
5725 "vbit.8 q0, q14, q12\n\t"
5726 "vshl.u8 q14, q0, #4\n\t"
5727 "vsri.u8 q14, q0, #4\n\t"
5728 "veor.8 q12, q7, q14\n\t"
5729 /* X = C * H^1 */
5730 "vmull.p64 q2, d25, d16\n\t"
5731 "vmull.p64 q7, d24, d17\n\t"
5732 "vmull.p64 q0, d24, d16\n\t"
5733 "vmull.p64 q1, d25, d17\n\t"
5734 "veor.8 q2, q2, q7\n\t"
5735 /* Reduce */
5736 "vmull.p64 q7, d3, d27\n\t"
5737 "veor.8 d2, d2, d5\n\t"
5738 "veor.8 d1, d1, d4\n\t"
5739 "veor.8 d2, d2, d15\n\t"
5740 "veor.8 d1, d1, d14\n\t"
5741 "vmull.p64 q7, d2, d26\n\t"
5742 "veor.8 q7, q7, q0\n\t"
5743 /* Done GHASH */
5744 "\n"
5745 "L_aes_gcm_encrypt_arm32_crypto_out_partial_done_%=:\n\t"
5746 "lsr lr, r6, #29\n\t"
5747 "lsl r6, r6, #3\n\t"
5748 "rbit lr, lr\n\t"
5749 "rbit r6, r6\n\t"
5750 "vmov s0, lr\n\t"
5751 "vmov s1, r6\n\t"
5752 "lsr lr, %[sz], #29\n\t"
5753 "lsl %[sz], %[sz], #3\n\t"
5754 "rbit lr, lr\n\t"
5755 "rbit %[sz], %[sz]\n\t"
5756 "vmov s2, lr\n\t"
5757 "vmov s3, %[sz]\n\t"
5758 "veor.8 q7, q7, q0\n\t"
5759 "vmull.p64 q2, d15, d16\n\t"
5760 "vmull.p64 q3, d14, d17\n\t"
5761 "vmull.p64 q0, d14, d16\n\t"
5762 "vmull.p64 q1, d15, d17\n\t"
5763 "veor.8 q2, q2, q3\n\t"
5764 /* Reduce */
5765 "vmull.p64 q7, d3, d27\n\t"
5766 "veor.8 d2, d2, d5\n\t"
5767 "veor.8 d1, d1, d4\n\t"
5768 "veor.8 d2, d2, d15\n\t"
5769 "veor.8 d1, d1, d14\n\t"
5770 "vmull.p64 q7, d2, d26\n\t"
5771 "veor.8 q7, q7, q0\n\t"
5772 "vmov.i8 q0, #0x55\n\t"
5773 "vshl.u8 q1, q7, #1\n\t"
5774 "vshr.u8 q7, q7, #1\n\t"
5775 "vbif.8 q7, q1, q0\n\t"
5776 "vmov.i8 q0, #51\n\t"
5777 "vshl.u8 q1, q7, #2\n\t"
5778 "vshr.u8 q7, q7, #2\n\t"
5779 "vbit.8 q1, q7, q0\n\t"
5780 "vshl.u8 q7, q1, #4\n\t"
5781 "vsri.u8 q7, q1, #4\n\t"
5782 /* DONE */
5783 "veor.8 q7, q7, q6\n\t"
5784 /* tag */
5785 "ldr lr, [sp, #4]\n\t"
5786 /* tagSz */
5787 "ldr r4, [sp, #8]\n\t"
5788 "cmp r4, #16\n\t"
5789 "bne L_aes_gcm_encrypt_arm32_crypto_tag_tag_partial_%=\n\t"
5790 "vst1.8 {q7}, [lr]\n\t"
5791 "b L_aes_gcm_encrypt_arm32_crypto_done_gcm_%=\n\t"
5792 "\n"
5793 "L_aes_gcm_encrypt_arm32_crypto_tag_tag_partial_%=:\n\t"
5794 "vst1.8 {q7}, [r9]\n\t"
5795 "cmp r4, #4\n\t"
5796 "blt L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_sw_%=\n\t"
5797 "\n"
5798 "L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_dw_%=:\n\t"
5799 "ldr r8, [r9], #4\n\t"
5800 "sub r4, r4, #4\n\t"
5801 "str r8, [lr], #4\n\t"
5802 "cmp r4, #4\n\t"
5803 "bge L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_dw_%=\n\t"
5804 "\n"
5805 "L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_sw_%=:\n\t"
5806 "cmp r4, #2\n\t"
5807 "blt L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_byte_%=\n\t"
5808 "ldrh r8, [r9], #2\n\t"
5809 "sub r4, r4, #2\n\t"
5810 "strh r8, [lr], #2\n\t"
5811 "\n"
5812 "L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_byte_%=:\n\t"
5813 "cmp r4, #1\n\t"
5814 "blt L_aes_gcm_encrypt_arm32_crypto_tag_tag_end_bytes_%=\n\t"
5815 "ldrb r8, [r9], #1\n\t"
5816 "subs r4, r4, #1\n\t"
5817 "strb r8, [lr], #1\n\t"
5818 "bne L_aes_gcm_encrypt_arm32_crypto_tag_tag_start_byte_%=\n\t"
5819 "\n"
5820 "L_aes_gcm_encrypt_arm32_crypto_tag_tag_end_bytes_%=:\n\t"
5821 "\n"
5822 "L_aes_gcm_encrypt_arm32_crypto_done_gcm_%=:\n\t"
5823 "pop {%[nonceSz], %[tag]}\n\t"
5824 "pop {%[tagSz], %[aad], %[aadSz], %[key], %[gcm_h], %[tmp], %[reg], %[nr]}\n\t"
5825#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
5826 : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz),
5827 [nonce] "+r" (nonce), [nonceSz] "+r" (nonceSz), [tag] "+r" (tag),
5828 [tagSz] "+r" (tagSz), [aad] "+r" (aad), [aadSz] "+r" (aadSz),
5829 [key] "+r" (key), [gcm_h] "+r" (gcm_h), [tmp] "+r" (tmp),
5830 [reg] "+r" (reg), [nr] "+r" (nr)
5831 :
5832#else
5833 :
5834 : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [nonce] "r" (nonce),
5835 [nonceSz] "r" (nonceSz), [tag] "r" (tag), [tagSz] "r" (tagSz),
5836 [aad] "r" (aad), [aadSz] "r" (aadSz), [key] "r" (key),
5837 [gcm_h] "r" (gcm_h), [tmp] "r" (tmp), [reg] "r" (reg), [nr] "r" (nr)
5838#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
5839 : "memory", "cc", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8",
5840 "q9", "q10", "q11", "q12", "q13", "q14", "q15"
5841 );
5842}
5843
5844#ifdef HAVE_AES_DECRYPT
5845#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
5846WC_OMIT_FRAME_POINTER int AES_GCM_decrypt_AARCH32(const byte* in_p, byte* out_p,
5847 word32 sz_p, const byte* nonce_p, word32 nonceSz_p, const byte* tag_p,
5848 word32 tagSz_p, const byte* aad_p, word32 aadSz_p, byte* key_p,
5849 byte* gcm_h_p, byte* tmp_p, byte* reg_p, int nr_p)
5850#else
5851WC_OMIT_FRAME_POINTER int AES_GCM_decrypt_AARCH32(const byte* in, byte* out,
5852 word32 sz, const byte* nonce, word32 nonceSz, const byte* tag, word32 tagSz,
5853 const byte* aad, word32 aadSz, byte* key, byte* gcm_h, byte* tmp, byte* reg,
5854 int nr)
5855#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
5856{
5857#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
5858 register const byte* in __asm__ ("r0") = (const byte*)in_p;
5859 register byte* out __asm__ ("r1") = (byte*)out_p;
5860 register word32 sz __asm__ ("r2") = (word32)sz_p;
5861 register const byte* nonce __asm__ ("r3") = (const byte*)nonce_p;
5862 register word32 nonceSz __asm__ ("r12") = (word32)nonceSz_p;
5863 register const byte* tag __asm__ ("lr") = (const byte*)tag_p;
5864 register word32 tagSz __asm__ ("r4") = (word32)tagSz_p;
5865 register const byte* aad __asm__ ("r5") = (const byte*)aad_p;
5866 register word32 aadSz __asm__ ("r6") = (word32)aadSz_p;
5867 register byte* key __asm__ ("r7") = (byte*)key_p;
5868 register byte* gcm_h __asm__ ("r8") = (byte*)gcm_h_p;
5869 register byte* tmp __asm__ ("r9") = (byte*)tmp_p;
5870 register byte* reg __asm__ ("r10") = (byte*)reg_p;
5871 register int nr __asm__ ("r11") = (int)nr_p;
5872#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
5873
5874 __asm__ __volatile__ (
5875 "push {%[tagSz], %[aad], %[aadSz], %[key], %[gcm_h], %[tmp], %[reg], %[nr]}\n\t"
5876 "push {%[nonceSz], %[tag]}\n\t"
5877 /* key */
5878 "ldr r7, [sp, #20]\n\t"
5879 /* tmp */
5880 "ldr r9, [sp, #28]\n\t"
5881 /* aadSz */
5882 "ldr r6, [sp, #16]\n\t"
5883 /* gcm_h */
5884 "ldr r8, [sp, #24]\n\t"
5885 "vmov.i8 q13, #0x87\n\t"
5886 "veor.8 q7, q7, q7\n\t"
5887 "vshr.u64 q13, q13, #56\n\t"
5888 "vld1.32 {q8}, [r8]\n\t"
5889 "orr r10, r6, %[sz]\n\t"
5890 "cmp r10, #32\n\t"
5891 "blt L_aes_gcm_decrypt_arm32_crypto_h_done_%=\n\t"
5892 /* Square H => H^2 */
5893 "vmull.p64 q1, d17, d17\n\t"
5894 "vmull.p64 q0, d16, d16\n\t"
5895 "vmull.p64 q9, d3, d27\n\t"
5896 "veor.8 d2, d2, d19\n\t"
5897 "veor.8 d1, d1, d18\n\t"
5898 "vmull.p64 q9, d2, d26\n\t"
5899 "veor.8 q9, q9, q0\n\t"
5900 "cmp r10, #0x40\n\t"
5901 "blt L_aes_gcm_decrypt_arm32_crypto_h_done_%=\n\t"
5902 /* Multiply H and H^2 => H^3 */
5903 "vmull.p64 q2, d17, d18\n\t"
5904 "vmull.p64 q3, d16, d19\n\t"
5905 "vmull.p64 q0, d16, d18\n\t"
5906 "vmull.p64 q1, d17, d19\n\t"
5907 "veor.8 q2, q2, q3\n\t"
5908 /* Reduce */
5909 "vmull.p64 q10, d3, d27\n\t"
5910 "veor.8 d2, d2, d5\n\t"
5911 "veor.8 d1, d1, d4\n\t"
5912 "veor.8 d2, d2, d21\n\t"
5913 "veor.8 d1, d1, d20\n\t"
5914 "vmull.p64 q10, d2, d26\n\t"
5915 "veor.8 q10, q10, q0\n\t"
5916 /* Square H^2 => H^4 */
5917 "vmull.p64 q1, d19, d19\n\t"
5918 "vmull.p64 q0, d18, d18\n\t"
5919 "vmull.p64 q11, d3, d27\n\t"
5920 "veor.8 d2, d2, d23\n\t"
5921 "veor.8 d1, d1, d22\n\t"
5922 "vmull.p64 q11, d2, d26\n\t"
5923 "veor.8 q11, q11, q0\n\t"
5924 /* Done */
5925 "\n"
5926 "L_aes_gcm_decrypt_arm32_crypto_h_done_%=:\n\t"
5927 /* aad */
5928 "ldr r5, [sp, #12]\n\t"
5929 "lsr r10, r6, #4\n\t"
5930 "cmp r10, #1\n\t"
5931 "blt L_aes_gcm_decrypt_arm32_crypto_aad_done_%=\n\t"
5932 "beq L_aes_gcm_decrypt_arm32_crypto_aad_start_1_%=\n\t"
5933 "cmp r10, #4\n\t"
5934 "blt L_aes_gcm_decrypt_arm32_crypto_aad_start_2_%=\n\t"
5935 "\n"
5936 "L_aes_gcm_decrypt_arm32_crypto_aad_start_4_%=:\n\t"
5937 "vldm r5!, {q0-q2}\n\t"
5938 "vmov.i8 q12, #0x55\n\t"
5939 "vmov.i8 q5, #51\n\t"
5940 "vshl.u8 q14, q0, #1\n\t"
5941 "vshl.u8 q15, q1, #1\n\t"
5942 "vshl.u8 q4, q2, #1\n\t"
5943 "ldr lr, [r5], #4\n\t"
5944 "vshr.u8 q0, q0, #1\n\t"
5945 "vshr.u8 q1, q1, #1\n\t"
5946 "vshr.u8 q2, q2, #1\n\t"
5947 "ldr r4, [r5], #4\n\t"
5948 "vbit.8 q14, q0, q12\n\t"
5949 "vbit.8 q15, q1, q12\n\t"
5950 "vbit.8 q4, q2, q12\n\t"
5951 "ldr r8, [r5], #4\n\t"
5952 "vshl.u8 q0, q14, #2\n\t"
5953 "vshl.u8 q1, q15, #2\n\t"
5954 "vshl.u8 q2, q4, #2\n\t"
5955 "ldr r12, [r5], #4\n\t"
5956 "vshr.u8 q14, q14, #2\n\t"
5957 "vshr.u8 q15, q15, #2\n\t"
5958 "vshr.u8 q4, q4, #2\n\t"
5959 "rbit lr, lr\n\t"
5960 "vbit.8 q0, q14, q5\n\t"
5961 "rbit r4, r4\n\t"
5962 "vbit.8 q1, q15, q5\n\t"
5963 "rbit r8, r8\n\t"
5964 "vbit.8 q2, q4, q5\n\t"
5965 "rbit r12, r12\n\t"
5966 "vshl.u8 q14, q0, #4\n\t"
5967 "rev lr, lr\n\t"
5968 "vshl.u8 q15, q1, #4\n\t"
5969 "rev r4, r4\n\t"
5970 "vshl.u8 q4, q2, #4\n\t"
5971 "rev r8, r8\n\t"
5972 "vsri.u8 q14, q0, #4\n\t"
5973 "rev r12, r12\n\t"
5974 "vsri.u8 q15, q1, #4\n\t"
5975 "vsri.u8 q4, q2, #4\n\t"
5976 "vmov d10, lr, r4\n\t"
5977 "vmov d11, r8, r12\n\t"
5978 "veor.8 q12, q7, q14\n\t"
5979 /* X = C * H^1 */
5980 "vmull.p64 q2, d11, d16\n\t"
5981 "vmull.p64 q7, d10, d17\n\t"
5982 "vmull.p64 q0, d10, d16\n\t"
5983 "vmull.p64 q1, d11, d17\n\t"
5984 "veor.8 q2, q2, q7\n\t"
5985 /* X += C * H^2 */
5986 "vmull.p64 q3, d8, d18\n\t"
5987 "vmull.p64 q7, d9, d19\n\t"
5988 "veor.8 q0, q0, q3\n\t"
5989 "veor.8 q1, q1, q7\n\t"
5990 "vmull.p64 q3, d9, d18\n\t"
5991 "vmull.p64 q7, d8, d19\n\t"
5992 "veor.8 q2, q2, q3\n\t"
5993 "veor.8 q2, q2, q7\n\t"
5994 /* X += C * H^3 */
5995 "vmull.p64 q3, d30, d20\n\t"
5996 "vmull.p64 q7, d31, d21\n\t"
5997 "veor.8 q0, q0, q3\n\t"
5998 "veor.8 q1, q1, q7\n\t"
5999 "vmull.p64 q3, d31, d20\n\t"
6000 "vmull.p64 q7, d30, d21\n\t"
6001 "veor.8 q2, q2, q3\n\t"
6002 "veor.8 q2, q2, q7\n\t"
6003 /* X += C * H^4 */
6004 "vmull.p64 q3, d24, d22\n\t"
6005 "vmull.p64 q7, d25, d23\n\t"
6006 "veor.8 q0, q0, q3\n\t"
6007 "veor.8 q1, q1, q7\n\t"
6008 "vmull.p64 q3, d25, d22\n\t"
6009 "vmull.p64 q7, d24, d23\n\t"
6010 "veor.8 q2, q2, q3\n\t"
6011 "veor.8 q2, q2, q7\n\t"
6012 /* Reduce */
6013 "vmull.p64 q7, d3, d27\n\t"
6014 "veor.8 d2, d2, d5\n\t"
6015 "veor.8 d1, d1, d4\n\t"
6016 "veor.8 d2, d2, d15\n\t"
6017 "veor.8 d1, d1, d14\n\t"
6018 "vmull.p64 q7, d2, d26\n\t"
6019 "veor.8 q7, q7, q0\n\t"
6020 /* Done GHASH */
6021 "sub r10, r10, #4\n\t"
6022 "cmp r10, #4\n\t"
6023 "bge L_aes_gcm_decrypt_arm32_crypto_aad_start_4_%=\n\t"
6024 "cmp r10, #1\n\t"
6025 "blt L_aes_gcm_decrypt_arm32_crypto_aad_done_%=\n\t"
6026 "beq L_aes_gcm_decrypt_arm32_crypto_aad_start_1_%=\n\t"
6027 "\n"
6028 "L_aes_gcm_decrypt_arm32_crypto_aad_start_2_%=:\n\t"
6029 "vld1.32 {q14-q15}, [r5]!\n\t"
6030 "vmov.i8 q12, #0x55\n\t"
6031 "vshl.u8 q0, q14, #1\n\t"
6032 "vshl.u8 q1, q15, #1\n\t"
6033 "vshr.u8 q14, q14, #1\n\t"
6034 "vshr.u8 q15, q15, #1\n\t"
6035 "vbif.8 q14, q0, q12\n\t"
6036 "vbif.8 q15, q1, q12\n\t"
6037 "vmov.i8 q12, #51\n\t"
6038 "vshl.u8 q0, q14, #2\n\t"
6039 "vshl.u8 q1, q15, #2\n\t"
6040 "vshr.u8 q14, q14, #2\n\t"
6041 "vshr.u8 q15, q15, #2\n\t"
6042 "vbit.8 q0, q14, q12\n\t"
6043 "vbit.8 q1, q15, q12\n\t"
6044 "vshl.u8 q14, q0, #4\n\t"
6045 "vshl.u8 q15, q1, #4\n\t"
6046 "vsri.u8 q14, q0, #4\n\t"
6047 "vsri.u8 q15, q1, #4\n\t"
6048 "veor.8 q12, q7, q14\n\t"
6049 /* X = C * H^1 */
6050 "vmull.p64 q2, d31, d16\n\t"
6051 "vmull.p64 q7, d30, d17\n\t"
6052 "vmull.p64 q0, d30, d16\n\t"
6053 "vmull.p64 q1, d31, d17\n\t"
6054 "veor.8 q2, q2, q7\n\t"
6055 /* X += C * H^2 */
6056 "vmull.p64 q3, d24, d18\n\t"
6057 "vmull.p64 q7, d25, d19\n\t"
6058 "veor.8 q0, q0, q3\n\t"
6059 "veor.8 q1, q1, q7\n\t"
6060 "vmull.p64 q3, d25, d18\n\t"
6061 "vmull.p64 q7, d24, d19\n\t"
6062 "veor.8 q2, q2, q3\n\t"
6063 "veor.8 q2, q2, q7\n\t"
6064 /* Reduce */
6065 "vmull.p64 q7, d3, d27\n\t"
6066 "veor.8 d2, d2, d5\n\t"
6067 "veor.8 d1, d1, d4\n\t"
6068 "veor.8 d2, d2, d15\n\t"
6069 "veor.8 d1, d1, d14\n\t"
6070 "vmull.p64 q7, d2, d26\n\t"
6071 "veor.8 q7, q7, q0\n\t"
6072 /* Done GHASH */
6073 "sub r10, r10, #2\n\t"
6074 "cmp r10, #0\n\t"
6075 "beq L_aes_gcm_decrypt_arm32_crypto_aad_done_%=\n\t"
6076 "\n"
6077 "L_aes_gcm_decrypt_arm32_crypto_aad_start_1_%=:\n\t"
6078 "vld1.32 {q14}, [r5]!\n\t"
6079 "vmov.i8 q12, #0x55\n\t"
6080 "vshl.u8 q0, q14, #1\n\t"
6081 "vshr.u8 q14, q14, #1\n\t"
6082 "vbif.8 q14, q0, q12\n\t"
6083 "vmov.i8 q12, #51\n\t"
6084 "vshl.u8 q0, q14, #2\n\t"
6085 "vshr.u8 q14, q14, #2\n\t"
6086 "vbit.8 q0, q14, q12\n\t"
6087 "vshl.u8 q14, q0, #4\n\t"
6088 "vsri.u8 q14, q0, #4\n\t"
6089 "veor.8 q12, q7, q14\n\t"
6090 /* X = C * H^1 */
6091 "vmull.p64 q2, d25, d16\n\t"
6092 "vmull.p64 q7, d24, d17\n\t"
6093 "vmull.p64 q0, d24, d16\n\t"
6094 "vmull.p64 q1, d25, d17\n\t"
6095 "veor.8 q2, q2, q7\n\t"
6096 /* Reduce */
6097 "vmull.p64 q7, d3, d27\n\t"
6098 "veor.8 d2, d2, d5\n\t"
6099 "veor.8 d1, d1, d4\n\t"
6100 "veor.8 d2, d2, d15\n\t"
6101 "veor.8 d1, d1, d14\n\t"
6102 "vmull.p64 q7, d2, d26\n\t"
6103 "veor.8 q7, q7, q0\n\t"
6104 /* Done GHASH */
6105 "\n"
6106 "L_aes_gcm_decrypt_arm32_crypto_aad_done_%=:\n\t"
6107 "ands r11, r6, #15\n\t"
6108 "beq L_aes_gcm_decrypt_arm32_crypto_aad_partial_done_%=\n\t"
6109 "veor.8 q0, q0, q0\n\t"
6110 "mov r12, r11\n\t"
6111 "vst1.32 {q0}, [r9]\n\t"
6112 "cmp r12, #4\n\t"
6113 "blt L_aes_gcm_decrypt_arm32_crypto_aad_start_sw_%=\n\t"
6114 "\n"
6115 "L_aes_gcm_decrypt_arm32_crypto_aad_start_dw_%=:\n\t"
6116 "ldr r8, [r5], #4\n\t"
6117 "sub r12, r12, #4\n\t"
6118 "str r8, [r9], #4\n\t"
6119 "cmp r12, #4\n\t"
6120 "bge L_aes_gcm_decrypt_arm32_crypto_aad_start_dw_%=\n\t"
6121 "\n"
6122 "L_aes_gcm_decrypt_arm32_crypto_aad_start_sw_%=:\n\t"
6123 "cmp r12, #2\n\t"
6124 "blt L_aes_gcm_decrypt_arm32_crypto_aad_start_byte_%=\n\t"
6125 "ldrh r8, [r5], #2\n\t"
6126 "sub r12, r12, #2\n\t"
6127 "strh r8, [r9], #2\n\t"
6128 "\n"
6129 "L_aes_gcm_decrypt_arm32_crypto_aad_start_byte_%=:\n\t"
6130 "cmp r12, #1\n\t"
6131 "blt L_aes_gcm_decrypt_arm32_crypto_aad_end_bytes_%=\n\t"
6132 "ldrb r8, [r5], #1\n\t"
6133 "subs r12, r12, #1\n\t"
6134 "strb r8, [r9], #1\n\t"
6135 "bne L_aes_gcm_decrypt_arm32_crypto_aad_start_byte_%=\n\t"
6136 "\n"
6137 "L_aes_gcm_decrypt_arm32_crypto_aad_end_bytes_%=:\n\t"
6138 "sub r9, r9, r11\n\t"
6139 "vld1.32 {q14}, [r9]\n\t"
6140 "vmov.i8 q12, #0x55\n\t"
6141 "vshl.u8 q0, q14, #1\n\t"
6142 "vshr.u8 q14, q14, #1\n\t"
6143 "vbif.8 q14, q0, q12\n\t"
6144 "vmov.i8 q12, #51\n\t"
6145 "vshl.u8 q0, q14, #2\n\t"
6146 "vshr.u8 q14, q14, #2\n\t"
6147 "vbit.8 q0, q14, q12\n\t"
6148 "vshl.u8 q14, q0, #4\n\t"
6149 "vsri.u8 q14, q0, #4\n\t"
6150 "veor.8 q12, q7, q14\n\t"
6151 /* X = C * H^1 */
6152 "vmull.p64 q2, d25, d16\n\t"
6153 "vmull.p64 q7, d24, d17\n\t"
6154 "vmull.p64 q0, d24, d16\n\t"
6155 "vmull.p64 q1, d25, d17\n\t"
6156 "veor.8 q2, q2, q7\n\t"
6157 /* Reduce */
6158 "vmull.p64 q7, d3, d27\n\t"
6159 "veor.8 d2, d2, d5\n\t"
6160 "veor.8 d1, d1, d4\n\t"
6161 "veor.8 d2, d2, d15\n\t"
6162 "veor.8 d1, d1, d14\n\t"
6163 "vmull.p64 q7, d2, d26\n\t"
6164 "veor.8 q7, q7, q0\n\t"
6165 /* Done GHASH */
6166 "\n"
6167 "L_aes_gcm_decrypt_arm32_crypto_aad_partial_done_%=:\n\t"
6168 /* in */
6169 "lsr r10, %[sz], #4\n\t"
6170 "cmp r10, #1\n\t"
6171 "blt L_aes_gcm_decrypt_arm32_crypto_in_done_%=\n\t"
6172 "beq L_aes_gcm_decrypt_arm32_crypto_in_start_1_%=\n\t"
6173 "cmp r10, #4\n\t"
6174 "blt L_aes_gcm_decrypt_arm32_crypto_in_start_2_%=\n\t"
6175 "\n"
6176 "L_aes_gcm_decrypt_arm32_crypto_in_start_4_%=:\n\t"
6177 "vldm %[in]!, {q0-q2}\n\t"
6178 "vmov.i8 q12, #0x55\n\t"
6179 "vmov.i8 q5, #51\n\t"
6180 "vshl.u8 q14, q0, #1\n\t"
6181 "vshl.u8 q15, q1, #1\n\t"
6182 "vshl.u8 q4, q2, #1\n\t"
6183 "ldr lr, [%[in]], #4\n\t"
6184 "vshr.u8 q0, q0, #1\n\t"
6185 "vshr.u8 q1, q1, #1\n\t"
6186 "vshr.u8 q2, q2, #1\n\t"
6187 "ldr r4, [%[in]], #4\n\t"
6188 "vbit.8 q14, q0, q12\n\t"
6189 "vbit.8 q15, q1, q12\n\t"
6190 "vbit.8 q4, q2, q12\n\t"
6191 "ldr r8, [%[in]], #4\n\t"
6192 "vshl.u8 q0, q14, #2\n\t"
6193 "vshl.u8 q1, q15, #2\n\t"
6194 "vshl.u8 q2, q4, #2\n\t"
6195 "ldr r12, [%[in]], #4\n\t"
6196 "vshr.u8 q14, q14, #2\n\t"
6197 "vshr.u8 q15, q15, #2\n\t"
6198 "vshr.u8 q4, q4, #2\n\t"
6199 "rbit lr, lr\n\t"
6200 "vbit.8 q0, q14, q5\n\t"
6201 "rbit r4, r4\n\t"
6202 "vbit.8 q1, q15, q5\n\t"
6203 "rbit r8, r8\n\t"
6204 "vbit.8 q2, q4, q5\n\t"
6205 "rbit r12, r12\n\t"
6206 "vshl.u8 q14, q0, #4\n\t"
6207 "rev lr, lr\n\t"
6208 "vshl.u8 q15, q1, #4\n\t"
6209 "rev r4, r4\n\t"
6210 "vshl.u8 q4, q2, #4\n\t"
6211 "rev r8, r8\n\t"
6212 "vsri.u8 q14, q0, #4\n\t"
6213 "rev r12, r12\n\t"
6214 "vsri.u8 q15, q1, #4\n\t"
6215 "vsri.u8 q4, q2, #4\n\t"
6216 "vmov d10, lr, r4\n\t"
6217 "vmov d11, r8, r12\n\t"
6218 "veor.8 q12, q7, q14\n\t"
6219 /* X = C * H^1 */
6220 "vmull.p64 q2, d11, d16\n\t"
6221 "vmull.p64 q7, d10, d17\n\t"
6222 "vmull.p64 q0, d10, d16\n\t"
6223 "vmull.p64 q1, d11, d17\n\t"
6224 "veor.8 q2, q2, q7\n\t"
6225 /* X += C * H^2 */
6226 "vmull.p64 q3, d8, d18\n\t"
6227 "vmull.p64 q7, d9, d19\n\t"
6228 "veor.8 q0, q0, q3\n\t"
6229 "veor.8 q1, q1, q7\n\t"
6230 "vmull.p64 q3, d9, d18\n\t"
6231 "vmull.p64 q7, d8, d19\n\t"
6232 "veor.8 q2, q2, q3\n\t"
6233 "veor.8 q2, q2, q7\n\t"
6234 /* X += C * H^3 */
6235 "vmull.p64 q3, d30, d20\n\t"
6236 "vmull.p64 q7, d31, d21\n\t"
6237 "veor.8 q0, q0, q3\n\t"
6238 "veor.8 q1, q1, q7\n\t"
6239 "vmull.p64 q3, d31, d20\n\t"
6240 "vmull.p64 q7, d30, d21\n\t"
6241 "veor.8 q2, q2, q3\n\t"
6242 "veor.8 q2, q2, q7\n\t"
6243 /* X += C * H^4 */
6244 "vmull.p64 q3, d24, d22\n\t"
6245 "vmull.p64 q7, d25, d23\n\t"
6246 "veor.8 q0, q0, q3\n\t"
6247 "veor.8 q1, q1, q7\n\t"
6248 "vmull.p64 q3, d25, d22\n\t"
6249 "vmull.p64 q7, d24, d23\n\t"
6250 "veor.8 q2, q2, q3\n\t"
6251 "veor.8 q2, q2, q7\n\t"
6252 /* Reduce */
6253 "vmull.p64 q7, d3, d27\n\t"
6254 "veor.8 d2, d2, d5\n\t"
6255 "veor.8 d1, d1, d4\n\t"
6256 "veor.8 d2, d2, d15\n\t"
6257 "veor.8 d1, d1, d14\n\t"
6258 "vmull.p64 q7, d2, d26\n\t"
6259 "veor.8 q7, q7, q0\n\t"
6260 /* Done GHASH */
6261 "sub r10, r10, #4\n\t"
6262 "cmp r10, #4\n\t"
6263 "bge L_aes_gcm_decrypt_arm32_crypto_in_start_4_%=\n\t"
6264 "cmp r10, #1\n\t"
6265 "blt L_aes_gcm_decrypt_arm32_crypto_in_done_%=\n\t"
6266 "beq L_aes_gcm_decrypt_arm32_crypto_in_start_1_%=\n\t"
6267 "\n"
6268 "L_aes_gcm_decrypt_arm32_crypto_in_start_2_%=:\n\t"
6269 "vld1.32 {q14-q15}, [%[in]]!\n\t"
6270 "vmov.i8 q12, #0x55\n\t"
6271 "vshl.u8 q0, q14, #1\n\t"
6272 "vshl.u8 q1, q15, #1\n\t"
6273 "vshr.u8 q14, q14, #1\n\t"
6274 "vshr.u8 q15, q15, #1\n\t"
6275 "vbif.8 q14, q0, q12\n\t"
6276 "vbif.8 q15, q1, q12\n\t"
6277 "vmov.i8 q12, #51\n\t"
6278 "vshl.u8 q0, q14, #2\n\t"
6279 "vshl.u8 q1, q15, #2\n\t"
6280 "vshr.u8 q14, q14, #2\n\t"
6281 "vshr.u8 q15, q15, #2\n\t"
6282 "vbit.8 q0, q14, q12\n\t"
6283 "vbit.8 q1, q15, q12\n\t"
6284 "vshl.u8 q14, q0, #4\n\t"
6285 "vshl.u8 q15, q1, #4\n\t"
6286 "vsri.u8 q14, q0, #4\n\t"
6287 "vsri.u8 q15, q1, #4\n\t"
6288 "veor.8 q12, q7, q14\n\t"
6289 /* X = C * H^1 */
6290 "vmull.p64 q2, d31, d16\n\t"
6291 "vmull.p64 q7, d30, d17\n\t"
6292 "vmull.p64 q0, d30, d16\n\t"
6293 "vmull.p64 q1, d31, d17\n\t"
6294 "veor.8 q2, q2, q7\n\t"
6295 /* X += C * H^2 */
6296 "vmull.p64 q3, d24, d18\n\t"
6297 "vmull.p64 q7, d25, d19\n\t"
6298 "veor.8 q0, q0, q3\n\t"
6299 "veor.8 q1, q1, q7\n\t"
6300 "vmull.p64 q3, d25, d18\n\t"
6301 "vmull.p64 q7, d24, d19\n\t"
6302 "veor.8 q2, q2, q3\n\t"
6303 "veor.8 q2, q2, q7\n\t"
6304 /* Reduce */
6305 "vmull.p64 q7, d3, d27\n\t"
6306 "veor.8 d2, d2, d5\n\t"
6307 "veor.8 d1, d1, d4\n\t"
6308 "veor.8 d2, d2, d15\n\t"
6309 "veor.8 d1, d1, d14\n\t"
6310 "vmull.p64 q7, d2, d26\n\t"
6311 "veor.8 q7, q7, q0\n\t"
6312 /* Done GHASH */
6313 "sub r10, r10, #2\n\t"
6314 "cmp r10, #0\n\t"
6315 "beq L_aes_gcm_decrypt_arm32_crypto_in_done_%=\n\t"
6316 "\n"
6317 "L_aes_gcm_decrypt_arm32_crypto_in_start_1_%=:\n\t"
6318 "vld1.32 {q14}, [%[in]]!\n\t"
6319 "vmov.i8 q12, #0x55\n\t"
6320 "vshl.u8 q0, q14, #1\n\t"
6321 "vshr.u8 q14, q14, #1\n\t"
6322 "vbif.8 q14, q0, q12\n\t"
6323 "vmov.i8 q12, #51\n\t"
6324 "vshl.u8 q0, q14, #2\n\t"
6325 "vshr.u8 q14, q14, #2\n\t"
6326 "vbit.8 q0, q14, q12\n\t"
6327 "vshl.u8 q14, q0, #4\n\t"
6328 "vsri.u8 q14, q0, #4\n\t"
6329 "veor.8 q12, q7, q14\n\t"
6330 /* X = C * H^1 */
6331 "vmull.p64 q2, d25, d16\n\t"
6332 "vmull.p64 q7, d24, d17\n\t"
6333 "vmull.p64 q0, d24, d16\n\t"
6334 "vmull.p64 q1, d25, d17\n\t"
6335 "veor.8 q2, q2, q7\n\t"
6336 /* Reduce */
6337 "vmull.p64 q7, d3, d27\n\t"
6338 "veor.8 d2, d2, d5\n\t"
6339 "veor.8 d1, d1, d4\n\t"
6340 "veor.8 d2, d2, d15\n\t"
6341 "veor.8 d1, d1, d14\n\t"
6342 "vmull.p64 q7, d2, d26\n\t"
6343 "veor.8 q7, q7, q0\n\t"
6344 /* Done GHASH */
6345 "\n"
6346 "L_aes_gcm_decrypt_arm32_crypto_in_done_%=:\n\t"
6347 "ands r11, %[sz], #15\n\t"
6348 "beq L_aes_gcm_decrypt_arm32_crypto_in_partial_done_%=\n\t"
6349 "veor.8 q0, q0, q0\n\t"
6350 "mov r12, r11\n\t"
6351 "vst1.32 {q0}, [r9]\n\t"
6352 "cmp r12, #4\n\t"
6353 "blt L_aes_gcm_decrypt_arm32_crypto_in_start_sw_%=\n\t"
6354 "\n"
6355 "L_aes_gcm_decrypt_arm32_crypto_in_start_dw_%=:\n\t"
6356 "ldr r8, [%[in]], #4\n\t"
6357 "sub r12, r12, #4\n\t"
6358 "str r8, [r9], #4\n\t"
6359 "cmp r12, #4\n\t"
6360 "bge L_aes_gcm_decrypt_arm32_crypto_in_start_dw_%=\n\t"
6361 "\n"
6362 "L_aes_gcm_decrypt_arm32_crypto_in_start_sw_%=:\n\t"
6363 "cmp r12, #2\n\t"
6364 "blt L_aes_gcm_decrypt_arm32_crypto_in_start_byte_%=\n\t"
6365 "ldrh r8, [%[in]], #2\n\t"
6366 "sub r12, r12, #2\n\t"
6367 "strh r8, [r9], #2\n\t"
6368 "\n"
6369 "L_aes_gcm_decrypt_arm32_crypto_in_start_byte_%=:\n\t"
6370 "cmp r12, #1\n\t"
6371 "blt L_aes_gcm_decrypt_arm32_crypto_in_end_bytes_%=\n\t"
6372 "ldrb r8, [%[in]], #1\n\t"
6373 "subs r12, r12, #1\n\t"
6374 "strb r8, [r9], #1\n\t"
6375 "bne L_aes_gcm_decrypt_arm32_crypto_in_start_byte_%=\n\t"
6376 "\n"
6377 "L_aes_gcm_decrypt_arm32_crypto_in_end_bytes_%=:\n\t"
6378 "sub r9, r9, r11\n\t"
6379 "vld1.32 {q14}, [r9]\n\t"
6380 "vmov.i8 q12, #0x55\n\t"
6381 "vshl.u8 q0, q14, #1\n\t"
6382 "vshr.u8 q14, q14, #1\n\t"
6383 "vbif.8 q14, q0, q12\n\t"
6384 "vmov.i8 q12, #51\n\t"
6385 "vshl.u8 q0, q14, #2\n\t"
6386 "vshr.u8 q14, q14, #2\n\t"
6387 "vbit.8 q0, q14, q12\n\t"
6388 "vshl.u8 q14, q0, #4\n\t"
6389 "vsri.u8 q14, q0, #4\n\t"
6390 "veor.8 q12, q7, q14\n\t"
6391 /* X = C * H^1 */
6392 "vmull.p64 q2, d25, d16\n\t"
6393 "vmull.p64 q7, d24, d17\n\t"
6394 "vmull.p64 q0, d24, d16\n\t"
6395 "vmull.p64 q1, d25, d17\n\t"
6396 "veor.8 q2, q2, q7\n\t"
6397 /* Reduce */
6398 "vmull.p64 q7, d3, d27\n\t"
6399 "veor.8 d2, d2, d5\n\t"
6400 "veor.8 d1, d1, d4\n\t"
6401 "veor.8 d2, d2, d15\n\t"
6402 "veor.8 d1, d1, d14\n\t"
6403 "vmull.p64 q7, d2, d26\n\t"
6404 "veor.8 q7, q7, q0\n\t"
6405 /* Done GHASH */
6406 "\n"
6407 "L_aes_gcm_decrypt_arm32_crypto_in_partial_done_%=:\n\t"
6408 "sub %[in], %[in], %[sz]\n\t"
6409 "\n"
6410 "L_aes_gcm_decrypt_arm32_crypto_done_gcm_%=:\n\t"
6411 /* nonceSz */
6412 "ldr r12, [sp]\n\t"
6413 /* Load Nonce */
6414 "cmp r12, #12\n\t"
6415 "bne L_aes_gcm_decrypt_arm32_crypto_ghash_nonce_%=\n\t"
6416 "ldr r5, [%[nonce]]\n\t"
6417 "ldr r8, [%[nonce], #4]\n\t"
6418 "ldr r12, [%[nonce], #8]\n\t"
6419 "vmov.i32 q6, #0x1000000\n\t"
6420 "vmov.32 s24, r5\n\t"
6421 "vmov.32 s25, r8\n\t"
6422 "vmov.32 s26, r12\n\t"
6423 "mov r5, #1\n\t"
6424 "b L_aes_gcm_decrypt_arm32_crypto_done_nonce_%=\n\t"
6425 "\n"
6426 "L_aes_gcm_decrypt_arm32_crypto_ghash_nonce_%=:\n\t"
6427 "lsr r10, r12, #4\n\t"
6428 "cmp r10, #0\n\t"
6429 "beq L_aes_gcm_decrypt_arm32_crypto_nonce_done_%=\n\t"
6430 "\n"
6431 "L_aes_gcm_decrypt_arm32_crypto_nonce_start_1_%=:\n\t"
6432 "vld1.32 {q14}, [%[nonce]]!\n\t"
6433 "vmov.i8 q12, #0x55\n\t"
6434 "vshl.u8 q0, q14, #1\n\t"
6435 "vshr.u8 q14, q14, #1\n\t"
6436 "vbif.8 q14, q0, q12\n\t"
6437 "vmov.i8 q12, #51\n\t"
6438 "vshl.u8 q0, q14, #2\n\t"
6439 "vshr.u8 q14, q14, #2\n\t"
6440 "vbit.8 q0, q14, q12\n\t"
6441 "vshl.u8 q14, q0, #4\n\t"
6442 "vsri.u8 q14, q0, #4\n\t"
6443 "veor.8 q12, q6, q14\n\t"
6444 /* X = C * H^1 */
6445 "vmull.p64 q2, d25, d16\n\t"
6446 "vmull.p64 q6, d24, d17\n\t"
6447 "vmull.p64 q0, d24, d16\n\t"
6448 "vmull.p64 q1, d25, d17\n\t"
6449 "veor.8 q2, q2, q6\n\t"
6450 /* Reduce */
6451 "vmull.p64 q6, d3, d27\n\t"
6452 "veor.8 d2, d2, d5\n\t"
6453 "veor.8 d1, d1, d4\n\t"
6454 "veor.8 d2, d2, d13\n\t"
6455 "veor.8 d1, d1, d12\n\t"
6456 "vmull.p64 q6, d2, d26\n\t"
6457 "veor.8 q6, q6, q0\n\t"
6458 /* Done GHASH */
6459 "subs r10, r10, #1\n\t"
6460 "bne L_aes_gcm_decrypt_arm32_crypto_nonce_start_1_%=\n\t"
6461 "\n"
6462 "L_aes_gcm_decrypt_arm32_crypto_nonce_done_%=:\n\t"
6463 "ands r11, r12, #15\n\t"
6464 "beq L_aes_gcm_decrypt_arm32_crypto_nonce_partial_done_%=\n\t"
6465 "veor.8 q0, q0, q0\n\t"
6466 "mov r12, r11\n\t"
6467 "vst1.32 {q0}, [r9]\n\t"
6468 "cmp r12, #4\n\t"
6469 "blt L_aes_gcm_decrypt_arm32_crypto_nonce_start_sw_%=\n\t"
6470 "\n"
6471 "L_aes_gcm_decrypt_arm32_crypto_nonce_start_dw_%=:\n\t"
6472 "ldr r8, [%[nonce]], #4\n\t"
6473 "sub r12, r12, #4\n\t"
6474 "str r8, [r9], #4\n\t"
6475 "cmp r12, #4\n\t"
6476 "bge L_aes_gcm_decrypt_arm32_crypto_nonce_start_dw_%=\n\t"
6477 "\n"
6478 "L_aes_gcm_decrypt_arm32_crypto_nonce_start_sw_%=:\n\t"
6479 "cmp r12, #2\n\t"
6480 "blt L_aes_gcm_decrypt_arm32_crypto_nonce_start_byte_%=\n\t"
6481 "ldrh r8, [%[nonce]], #2\n\t"
6482 "sub r12, r12, #2\n\t"
6483 "strh r8, [r9], #2\n\t"
6484 "\n"
6485 "L_aes_gcm_decrypt_arm32_crypto_nonce_start_byte_%=:\n\t"
6486 "cmp r12, #1\n\t"
6487 "blt L_aes_gcm_decrypt_arm32_crypto_nonce_end_bytes_%=\n\t"
6488 "ldrb r8, [%[nonce]], #1\n\t"
6489 "subs r12, r12, #1\n\t"
6490 "strb r8, [r9], #1\n\t"
6491 "bne L_aes_gcm_decrypt_arm32_crypto_nonce_start_byte_%=\n\t"
6492 "\n"
6493 "L_aes_gcm_decrypt_arm32_crypto_nonce_end_bytes_%=:\n\t"
6494 "sub r9, r9, r11\n\t"
6495 "vld1.32 {q14}, [r9]\n\t"
6496 "vmov.i8 q12, #0x55\n\t"
6497 "vshl.u8 q0, q14, #1\n\t"
6498 "vshr.u8 q14, q14, #1\n\t"
6499 "vbif.8 q14, q0, q12\n\t"
6500 "vmov.i8 q12, #51\n\t"
6501 "vshl.u8 q0, q14, #2\n\t"
6502 "vshr.u8 q14, q14, #2\n\t"
6503 "vbit.8 q0, q14, q12\n\t"
6504 "vshl.u8 q14, q0, #4\n\t"
6505 "vsri.u8 q14, q0, #4\n\t"
6506 "veor.8 q12, q6, q14\n\t"
6507 /* X = C * H^1 */
6508 "vmull.p64 q2, d25, d16\n\t"
6509 "vmull.p64 q6, d24, d17\n\t"
6510 "vmull.p64 q0, d24, d16\n\t"
6511 "vmull.p64 q1, d25, d17\n\t"
6512 "veor.8 q2, q2, q6\n\t"
6513 /* Reduce */
6514 "vmull.p64 q6, d3, d27\n\t"
6515 "veor.8 d2, d2, d5\n\t"
6516 "veor.8 d1, d1, d4\n\t"
6517 "veor.8 d2, d2, d13\n\t"
6518 "veor.8 d1, d1, d12\n\t"
6519 "vmull.p64 q6, d2, d26\n\t"
6520 "veor.8 q6, q6, q0\n\t"
6521 /* Done GHASH */
6522 "\n"
6523 "L_aes_gcm_decrypt_arm32_crypto_nonce_partial_done_%=:\n\t"
6524 "veor.8 q0, q0, q0\n\t"
6525 /* nonceSz */
6526 "ldr r12, [sp]\n\t"
6527 "lsr r10, r12, #29\n\t"
6528 "lsl r11, r12, #3\n\t"
6529 "rbit r10, r10\n\t"
6530 "rbit r11, r11\n\t"
6531 "vmov.32 s2, r10\n\t"
6532 "vmov.32 s3, r11\n\t"
6533 "veor.8 q6, q6, q0\n\t"
6534 "vmull.p64 q2, d13, d16\n\t"
6535 "vmull.p64 q12, d12, d17\n\t"
6536 "vmull.p64 q0, d12, d16\n\t"
6537 "vmull.p64 q1, d13, d17\n\t"
6538 "veor.8 q2, q2, q12\n\t"
6539 "vmull.p64 q6, d3, d27\n\t"
6540 "veor.8 d2, d2, d5\n\t"
6541 "veor.8 d1, d1, d4\n\t"
6542 "veor.8 d2, d2, d13\n\t"
6543 "veor.8 d1, d1, d12\n\t"
6544 "vmull.p64 q6, d2, d26\n\t"
6545 "veor.8 q6, q6, q0\n\t"
6546 "vmov.32 r5, s24\n\t"
6547 "vmov.32 r8, s25\n\t"
6548 "vmov.32 r12, s26\n\t"
6549 "rbit r5, r5\n\t"
6550 "rbit r8, r8\n\t"
6551 "rbit r12, r12\n\t"
6552 "rev r5, r5\n\t"
6553 "rev r8, r8\n\t"
6554 "rev r12, r12\n\t"
6555 "vmov.32 s24, r5\n\t"
6556 "vmov.32 s25, r8\n\t"
6557 "vmov.32 s26, r12\n\t"
6558 "vmov.32 r5, s27\n\t"
6559 "rbit r5, r5\n\t"
6560 "rev r5, r5\n\t"
6561 "vmov.32 s27, r5\n\t"
6562 "rev r5, r5\n\t"
6563 "\n"
6564 "L_aes_gcm_decrypt_arm32_crypto_done_nonce_%=:\n\t"
6565 /* reg */
6566 "ldr r9, [sp, #32]\n\t"
6567 "vst1.32 {q7}, [r9]\n\t"
6568 /* tmp */
6569 "ldr r9, [sp, #28]\n\t"
6570 "vldm.32 r7!, {q0-q3}\n\t"
6571 "vldm.32 r7!, {q7-q13}\n\t"
6572 /* nr */
6573 "ldr r12, [sp, #36]\n\t"
6574 "lsr r10, %[sz], #4\n\t"
6575 "and r11, %[sz], #15\n\t"
6576 "cmp r12, #12\n\t"
6577 "blt L_aes_gcm_decrypt_arm32_crypto_start_128_%=\n\t"
6578 "bgt L_aes_gcm_decrypt_arm32_crypto_start_256_%=\n\t"
6579 /* AES_GCM_192 */
6580#ifndef NO_AES_192
6581 "cmp r10, #1\n\t"
6582 "blt L_aes_gcm_decrypt_arm32_crypto_192_done_%=\n\t"
6583 "beq L_aes_gcm_decrypt_arm32_crypto_192_start_1_%=\n\t"
6584 "\n"
6585 "L_aes_gcm_decrypt_arm32_crypto_192_start_2_%=:\n\t"
6586 "add r8, r5, #1\n\t"
6587 "vmov.8 q4, q6\n\t"
6588 "add r5, r5, #2\n\t"
6589 "vmov.8 q5, q6\n\t"
6590 "rev r8, r8\n\t"
6591 "rev r12, r5\n\t"
6592 "vmov s19, r8\n\t"
6593 "vmov s23, r12\n\t"
6594 "aese.8 q4, q0\n\t"
6595 "aesmc.8 q4, q4\n\t"
6596 "aese.8 q5, q0\n\t"
6597 "aesmc.8 q5, q5\n\t"
6598 "aese.8 q4, q1\n\t"
6599 "aesmc.8 q4, q4\n\t"
6600 "aese.8 q5, q1\n\t"
6601 "aesmc.8 q5, q5\n\t"
6602 "aese.8 q4, q2\n\t"
6603 "aesmc.8 q4, q4\n\t"
6604 "aese.8 q5, q2\n\t"
6605 "aesmc.8 q5, q5\n\t"
6606 "aese.8 q4, q3\n\t"
6607 "aesmc.8 q4, q4\n\t"
6608 "aese.8 q5, q3\n\t"
6609 "aesmc.8 q5, q5\n\t"
6610 "aese.8 q4, q7\n\t"
6611 "aesmc.8 q4, q4\n\t"
6612 "aese.8 q5, q7\n\t"
6613 "aesmc.8 q5, q5\n\t"
6614 "aese.8 q4, q8\n\t"
6615 "aesmc.8 q4, q4\n\t"
6616 "aese.8 q5, q8\n\t"
6617 "aesmc.8 q5, q5\n\t"
6618 "aese.8 q4, q9\n\t"
6619 "aesmc.8 q4, q4\n\t"
6620 "aese.8 q5, q9\n\t"
6621 "aesmc.8 q5, q5\n\t"
6622 "subs r10, r10, #2\n\t"
6623 "aese.8 q4, q10\n\t"
6624 "aesmc.8 q4, q4\n\t"
6625 "aese.8 q5, q10\n\t"
6626 "aesmc.8 q5, q5\n\t"
6627 "aese.8 q4, q11\n\t"
6628 "aesmc.8 q4, q4\n\t"
6629 "aese.8 q5, q11\n\t"
6630 "aesmc.8 q5, q5\n\t"
6631 "aese.8 q4, q12\n\t"
6632 "aesmc.8 q4, q4\n\t"
6633 "aese.8 q5, q12\n\t"
6634 "aesmc.8 q5, q5\n\t"
6635 "vld1.32 {q14}, [r7]!\n\t"
6636 "aese.8 q4, q13\n\t"
6637 "aesmc.8 q4, q4\n\t"
6638 "aese.8 q5, q13\n\t"
6639 "aesmc.8 q5, q5\n\t"
6640 "vld1.32 {q15}, [r7]\n\t"
6641 "aese.8 q4, q14\n\t"
6642 "veor.8 q4, q4, q15\n\t"
6643 "aese.8 q5, q14\n\t"
6644 "veor.8 q5, q5, q15\n\t"
6645 "vld1.8 {q14-q15}, [%[in]]!\n\t"
6646 "sub r7, r7, #16\n\t"
6647 "veor.8 q14, q14, q4\n\t"
6648 "veor.8 q15, q15, q5\n\t"
6649 "vst1.8 {q14-q15}, [%[out]]!\n\t"
6650 "cmp r10, #1\n\t"
6651 "bgt L_aes_gcm_decrypt_arm32_crypto_192_start_2_%=\n\t"
6652 "blt L_aes_gcm_decrypt_arm32_crypto_192_done_%=\n\t"
6653 "\n"
6654 "L_aes_gcm_decrypt_arm32_crypto_192_start_1_%=:\n\t"
6655 "add r5, r5, #1\n\t"
6656 "vmov.8 q4, q6\n\t"
6657 "rev r8, r5\n\t"
6658 "vmov s19, r8\n\t"
6659 "aese.8 q4, q0\n\t"
6660 "aesmc.8 q4, q4\n\t"
6661 "aese.8 q4, q1\n\t"
6662 "aesmc.8 q4, q4\n\t"
6663 "aese.8 q4, q2\n\t"
6664 "aesmc.8 q4, q4\n\t"
6665 "aese.8 q4, q3\n\t"
6666 "aesmc.8 q4, q4\n\t"
6667 "aese.8 q4, q7\n\t"
6668 "aesmc.8 q4, q4\n\t"
6669 "aese.8 q4, q8\n\t"
6670 "aesmc.8 q4, q4\n\t"
6671 "aese.8 q4, q9\n\t"
6672 "aesmc.8 q4, q4\n\t"
6673 "aese.8 q4, q10\n\t"
6674 "aesmc.8 q4, q4\n\t"
6675 "aese.8 q4, q11\n\t"
6676 "aesmc.8 q4, q4\n\t"
6677 "aese.8 q4, q12\n\t"
6678 "aesmc.8 q4, q4\n\t"
6679 "vld1.32 {q14}, [r7]!\n\t"
6680 "aese.8 q4, q13\n\t"
6681 "aesmc.8 q4, q4\n\t"
6682 "vld1.32 {q15}, [r7]\n\t"
6683 "aese.8 q4, q14\n\t"
6684 "veor.8 q4, q4, q15\n\t"
6685 "vld1.8 {q14}, [%[in]]!\n\t"
6686 "sub r7, r7, #16\n\t"
6687 "veor.8 q14, q14, q4\n\t"
6688 "vst1.32 {q14}, [%[out]]!\n\t"
6689 "\n"
6690 "L_aes_gcm_decrypt_arm32_crypto_192_done_%=:\n\t"
6691 "ands r11, %[sz], #15\n\t"
6692 "beq L_aes_gcm_decrypt_arm32_crypto_192_partial_done_%=\n\t"
6693 "veor.8 q14, q14, q14\n\t"
6694 "mov r4, r11\n\t"
6695 "vst1.32 {q14}, [r9]\n\t"
6696 "cmp r4, #4\n\t"
6697 "blt L_aes_gcm_decrypt_arm32_crypto_192_start_sw_%=\n\t"
6698 "\n"
6699 "L_aes_gcm_decrypt_arm32_crypto_192_start_dw_%=:\n\t"
6700 "ldr lr, [%[in]], #4\n\t"
6701 "sub r4, r4, #4\n\t"
6702 "str lr, [r9], #4\n\t"
6703 "cmp r4, #4\n\t"
6704 "bge L_aes_gcm_decrypt_arm32_crypto_192_start_dw_%=\n\t"
6705 "\n"
6706 "L_aes_gcm_decrypt_arm32_crypto_192_start_sw_%=:\n\t"
6707 "cmp r4, #2\n\t"
6708 "blt L_aes_gcm_decrypt_arm32_crypto_192_start_byte_%=\n\t"
6709 "ldrh lr, [%[in]], #2\n\t"
6710 "sub r4, r4, #2\n\t"
6711 "strh lr, [r9], #2\n\t"
6712 "\n"
6713 "L_aes_gcm_decrypt_arm32_crypto_192_start_byte_%=:\n\t"
6714 "cmp r4, #1\n\t"
6715 "blt L_aes_gcm_decrypt_arm32_crypto_192_end_bytes_%=\n\t"
6716 "ldrb lr, [%[in]], #1\n\t"
6717 "subs r4, r4, #1\n\t"
6718 "strb lr, [r9], #1\n\t"
6719 "bne L_aes_gcm_decrypt_arm32_crypto_192_start_byte_%=\n\t"
6720 "\n"
6721 "L_aes_gcm_decrypt_arm32_crypto_192_end_bytes_%=:\n\t"
6722 "sub r9, r9, r11\n\t"
6723 "add r5, r5, #1\n\t"
6724 "vmov.8 q4, q6\n\t"
6725 "rev r8, r5\n\t"
6726 "vmov s19, r8\n\t"
6727 "aese.8 q4, q0\n\t"
6728 "aesmc.8 q4, q4\n\t"
6729 "aese.8 q4, q1\n\t"
6730 "aesmc.8 q4, q4\n\t"
6731 "aese.8 q4, q2\n\t"
6732 "aesmc.8 q4, q4\n\t"
6733 "aese.8 q4, q3\n\t"
6734 "aesmc.8 q4, q4\n\t"
6735 "aese.8 q4, q7\n\t"
6736 "aesmc.8 q4, q4\n\t"
6737 "aese.8 q4, q8\n\t"
6738 "aesmc.8 q4, q4\n\t"
6739 "aese.8 q4, q9\n\t"
6740 "aesmc.8 q4, q4\n\t"
6741 "aese.8 q4, q10\n\t"
6742 "aesmc.8 q4, q4\n\t"
6743 "aese.8 q4, q11\n\t"
6744 "aesmc.8 q4, q4\n\t"
6745 "aese.8 q4, q12\n\t"
6746 "aesmc.8 q4, q4\n\t"
6747 "vld1.32 {q14}, [r7]!\n\t"
6748 "aese.8 q4, q13\n\t"
6749 "aesmc.8 q4, q4\n\t"
6750 "vld1.32 {q15}, [r7]\n\t"
6751 "aese.8 q4, q14\n\t"
6752 "veor.8 q4, q4, q15\n\t"
6753 "vld1.8 {q14}, [r9]\n\t"
6754 "sub r7, r7, #16\n\t"
6755 "veor.8 q14, q14, q4\n\t"
6756 "vst1.32 {q14}, [r9]\n\t"
6757 "mov r4, r11\n\t"
6758 "cmp r4, #4\n\t"
6759 "blt L_aes_gcm_decrypt_arm32_crypto_192_out_start_sw_%=\n\t"
6760 "\n"
6761 "L_aes_gcm_decrypt_arm32_crypto_192_out_start_dw_%=:\n\t"
6762 "ldr lr, [r9], #4\n\t"
6763 "sub r4, r4, #4\n\t"
6764 "str lr, [%[out]], #4\n\t"
6765 "cmp r4, #4\n\t"
6766 "bge L_aes_gcm_decrypt_arm32_crypto_192_out_start_dw_%=\n\t"
6767 "\n"
6768 "L_aes_gcm_decrypt_arm32_crypto_192_out_start_sw_%=:\n\t"
6769 "cmp r4, #2\n\t"
6770 "blt L_aes_gcm_decrypt_arm32_crypto_192_out_start_byte_%=\n\t"
6771 "ldrh lr, [r9], #2\n\t"
6772 "sub r4, r4, #2\n\t"
6773 "strh lr, [%[out]], #2\n\t"
6774 "\n"
6775 "L_aes_gcm_decrypt_arm32_crypto_192_out_start_byte_%=:\n\t"
6776 "cmp r4, #1\n\t"
6777 "blt L_aes_gcm_decrypt_arm32_crypto_192_out_end_bytes_%=\n\t"
6778 "ldrb lr, [r9], #1\n\t"
6779 "subs r4, r4, #1\n\t"
6780 "strb lr, [%[out]], #1\n\t"
6781 "bne L_aes_gcm_decrypt_arm32_crypto_192_out_start_byte_%=\n\t"
6782 "\n"
6783 "L_aes_gcm_decrypt_arm32_crypto_192_out_end_bytes_%=:\n\t"
6784 "\n"
6785 "L_aes_gcm_decrypt_arm32_crypto_192_partial_done_%=:\n\t"
6786 /* Finish */
6787 "add r8, %[sz], #15\n\t"
6788 "sub r8, r5, r8, lsr #4\n\t"
6789 "rev r8, r8\n\t"
6790 "vmov.32 s27, r8\n\t"
6791 "aese.8 q6, q0\n\t"
6792 "aesmc.8 q6, q6\n\t"
6793 "aese.8 q6, q1\n\t"
6794 "aesmc.8 q6, q6\n\t"
6795 "aese.8 q6, q2\n\t"
6796 "aesmc.8 q6, q6\n\t"
6797 "aese.8 q6, q3\n\t"
6798 "aesmc.8 q6, q6\n\t"
6799 "aese.8 q6, q7\n\t"
6800 "aesmc.8 q6, q6\n\t"
6801 "aese.8 q6, q8\n\t"
6802 "aesmc.8 q6, q6\n\t"
6803 "aese.8 q6, q9\n\t"
6804 "aesmc.8 q6, q6\n\t"
6805 "aese.8 q6, q10\n\t"
6806 "aesmc.8 q6, q6\n\t"
6807 "aese.8 q6, q11\n\t"
6808 "aesmc.8 q6, q6\n\t"
6809 "aese.8 q6, q12\n\t"
6810 "aesmc.8 q6, q6\n\t"
6811 "vld1.32 {q14}, [r7]!\n\t"
6812 "aese.8 q6, q13\n\t"
6813 "aesmc.8 q6, q6\n\t"
6814 "vld1.32 {q15}, [r7]\n\t"
6815 "aese.8 q6, q14\n\t"
6816 "veor.8 q6, q6, q15\n\t"
6817 "sub r7, r7, #16\n\t"
6818#endif /* !NO_AES_192 */
6819 "b L_aes_gcm_decrypt_arm32_crypto_done_enc_%=\n\t"
6820 /* AES_GCM_256 */
6821 "\n"
6822 "L_aes_gcm_decrypt_arm32_crypto_start_256_%=:\n\t"
6823#ifndef NO_AES_256
6824 "cmp r10, #1\n\t"
6825 "blt L_aes_gcm_decrypt_arm32_crypto_256_done_%=\n\t"
6826 "beq L_aes_gcm_decrypt_arm32_crypto_256_start_1_%=\n\t"
6827 "\n"
6828 "L_aes_gcm_decrypt_arm32_crypto_256_start_2_%=:\n\t"
6829 "add r8, r5, #1\n\t"
6830 "vmov.8 q4, q6\n\t"
6831 "add r5, r5, #2\n\t"
6832 "vmov.8 q5, q6\n\t"
6833 "rev r8, r8\n\t"
6834 "rev r12, r5\n\t"
6835 "vmov s19, r8\n\t"
6836 "vmov s23, r12\n\t"
6837 "aese.8 q4, q0\n\t"
6838 "aesmc.8 q4, q4\n\t"
6839 "aese.8 q5, q0\n\t"
6840 "aesmc.8 q5, q5\n\t"
6841 "aese.8 q4, q1\n\t"
6842 "aesmc.8 q4, q4\n\t"
6843 "aese.8 q5, q1\n\t"
6844 "aesmc.8 q5, q5\n\t"
6845 "aese.8 q4, q2\n\t"
6846 "aesmc.8 q4, q4\n\t"
6847 "aese.8 q5, q2\n\t"
6848 "aesmc.8 q5, q5\n\t"
6849 "aese.8 q4, q3\n\t"
6850 "aesmc.8 q4, q4\n\t"
6851 "aese.8 q5, q3\n\t"
6852 "aesmc.8 q5, q5\n\t"
6853 "aese.8 q4, q7\n\t"
6854 "aesmc.8 q4, q4\n\t"
6855 "aese.8 q5, q7\n\t"
6856 "aesmc.8 q5, q5\n\t"
6857 "aese.8 q4, q8\n\t"
6858 "aesmc.8 q4, q4\n\t"
6859 "aese.8 q5, q8\n\t"
6860 "aesmc.8 q5, q5\n\t"
6861 "aese.8 q4, q9\n\t"
6862 "aesmc.8 q4, q4\n\t"
6863 "aese.8 q5, q9\n\t"
6864 "aesmc.8 q5, q5\n\t"
6865 "subs r10, r10, #2\n\t"
6866 "aese.8 q4, q10\n\t"
6867 "aesmc.8 q4, q4\n\t"
6868 "aese.8 q5, q10\n\t"
6869 "aesmc.8 q5, q5\n\t"
6870 "aese.8 q4, q11\n\t"
6871 "aesmc.8 q4, q4\n\t"
6872 "aese.8 q5, q11\n\t"
6873 "aesmc.8 q5, q5\n\t"
6874 "aese.8 q4, q12\n\t"
6875 "aesmc.8 q4, q4\n\t"
6876 "aese.8 q5, q12\n\t"
6877 "aesmc.8 q5, q5\n\t"
6878 "vld1.32 {q14}, [r7]!\n\t"
6879 "aese.8 q4, q13\n\t"
6880 "aesmc.8 q4, q4\n\t"
6881 "aese.8 q5, q13\n\t"
6882 "aesmc.8 q5, q5\n\t"
6883 "vld1.32 {q15}, [r7]!\n\t"
6884 "aese.8 q4, q14\n\t"
6885 "aesmc.8 q4, q4\n\t"
6886 "aese.8 q5, q14\n\t"
6887 "aesmc.8 q5, q5\n\t"
6888 "vld1.32 {q14}, [r7]!\n\t"
6889 "aese.8 q4, q15\n\t"
6890 "aesmc.8 q4, q4\n\t"
6891 "aese.8 q5, q15\n\t"
6892 "aesmc.8 q5, q5\n\t"
6893 "vld1.32 {q15}, [r7]\n\t"
6894 "aese.8 q4, q14\n\t"
6895 "veor.8 q4, q4, q15\n\t"
6896 "aese.8 q5, q14\n\t"
6897 "veor.8 q5, q5, q15\n\t"
6898 "vld1.8 {q14-q15}, [%[in]]!\n\t"
6899 "sub r7, r7, #48\n\t"
6900 "veor.8 q14, q14, q4\n\t"
6901 "veor.8 q15, q15, q5\n\t"
6902 "vst1.8 {q14-q15}, [%[out]]!\n\t"
6903 "cmp r10, #1\n\t"
6904 "bgt L_aes_gcm_decrypt_arm32_crypto_256_start_2_%=\n\t"
6905 "blt L_aes_gcm_decrypt_arm32_crypto_256_done_%=\n\t"
6906 "\n"
6907 "L_aes_gcm_decrypt_arm32_crypto_256_start_1_%=:\n\t"
6908 "add r5, r5, #1\n\t"
6909 "vmov.8 q4, q6\n\t"
6910 "rev r8, r5\n\t"
6911 "vmov s19, r8\n\t"
6912 "aese.8 q4, q0\n\t"
6913 "aesmc.8 q4, q4\n\t"
6914 "aese.8 q4, q1\n\t"
6915 "aesmc.8 q4, q4\n\t"
6916 "aese.8 q4, q2\n\t"
6917 "aesmc.8 q4, q4\n\t"
6918 "aese.8 q4, q3\n\t"
6919 "aesmc.8 q4, q4\n\t"
6920 "aese.8 q4, q7\n\t"
6921 "aesmc.8 q4, q4\n\t"
6922 "aese.8 q4, q8\n\t"
6923 "aesmc.8 q4, q4\n\t"
6924 "aese.8 q4, q9\n\t"
6925 "aesmc.8 q4, q4\n\t"
6926 "aese.8 q4, q10\n\t"
6927 "aesmc.8 q4, q4\n\t"
6928 "aese.8 q4, q11\n\t"
6929 "aesmc.8 q4, q4\n\t"
6930 "aese.8 q4, q12\n\t"
6931 "aesmc.8 q4, q4\n\t"
6932 "vld1.32 {q14}, [r7]!\n\t"
6933 "aese.8 q4, q13\n\t"
6934 "aesmc.8 q4, q4\n\t"
6935 "vld1.32 {q15}, [r7]!\n\t"
6936 "aese.8 q4, q14\n\t"
6937 "aesmc.8 q4, q4\n\t"
6938 "vld1.32 {q14}, [r7]!\n\t"
6939 "aese.8 q4, q15\n\t"
6940 "aesmc.8 q4, q4\n\t"
6941 "vld1.32 {q15}, [r7]\n\t"
6942 "aese.8 q4, q14\n\t"
6943 "veor.8 q4, q4, q15\n\t"
6944 "vld1.8 {q14}, [%[in]]!\n\t"
6945 "sub r7, r7, #48\n\t"
6946 "veor.8 q14, q14, q4\n\t"
6947 "vst1.32 {q14}, [%[out]]!\n\t"
6948 "\n"
6949 "L_aes_gcm_decrypt_arm32_crypto_256_done_%=:\n\t"
6950 "ands r11, %[sz], #15\n\t"
6951 "beq L_aes_gcm_decrypt_arm32_crypto_256_partial_done_%=\n\t"
6952 "veor.8 q14, q14, q14\n\t"
6953 "mov r4, r11\n\t"
6954 "vst1.32 {q14}, [r9]\n\t"
6955 "cmp r4, #4\n\t"
6956 "blt L_aes_gcm_decrypt_arm32_crypto_256_start_sw_%=\n\t"
6957 "\n"
6958 "L_aes_gcm_decrypt_arm32_crypto_256_start_dw_%=:\n\t"
6959 "ldr lr, [%[in]], #4\n\t"
6960 "sub r4, r4, #4\n\t"
6961 "str lr, [r9], #4\n\t"
6962 "cmp r4, #4\n\t"
6963 "bge L_aes_gcm_decrypt_arm32_crypto_256_start_dw_%=\n\t"
6964 "\n"
6965 "L_aes_gcm_decrypt_arm32_crypto_256_start_sw_%=:\n\t"
6966 "cmp r4, #2\n\t"
6967 "blt L_aes_gcm_decrypt_arm32_crypto_256_start_byte_%=\n\t"
6968 "ldrh lr, [%[in]], #2\n\t"
6969 "sub r4, r4, #2\n\t"
6970 "strh lr, [r9], #2\n\t"
6971 "\n"
6972 "L_aes_gcm_decrypt_arm32_crypto_256_start_byte_%=:\n\t"
6973 "cmp r4, #1\n\t"
6974 "blt L_aes_gcm_decrypt_arm32_crypto_256_end_bytes_%=\n\t"
6975 "ldrb lr, [%[in]], #1\n\t"
6976 "subs r4, r4, #1\n\t"
6977 "strb lr, [r9], #1\n\t"
6978 "bne L_aes_gcm_decrypt_arm32_crypto_256_start_byte_%=\n\t"
6979 "\n"
6980 "L_aes_gcm_decrypt_arm32_crypto_256_end_bytes_%=:\n\t"
6981 "sub r9, r9, r11\n\t"
6982 "add r5, r5, #1\n\t"
6983 "vmov.8 q4, q6\n\t"
6984 "rev r8, r5\n\t"
6985 "vmov s19, r8\n\t"
6986 "aese.8 q4, q0\n\t"
6987 "aesmc.8 q4, q4\n\t"
6988 "aese.8 q4, q1\n\t"
6989 "aesmc.8 q4, q4\n\t"
6990 "aese.8 q4, q2\n\t"
6991 "aesmc.8 q4, q4\n\t"
6992 "aese.8 q4, q3\n\t"
6993 "aesmc.8 q4, q4\n\t"
6994 "aese.8 q4, q7\n\t"
6995 "aesmc.8 q4, q4\n\t"
6996 "aese.8 q4, q8\n\t"
6997 "aesmc.8 q4, q4\n\t"
6998 "aese.8 q4, q9\n\t"
6999 "aesmc.8 q4, q4\n\t"
7000 "aese.8 q4, q10\n\t"
7001 "aesmc.8 q4, q4\n\t"
7002 "aese.8 q4, q11\n\t"
7003 "aesmc.8 q4, q4\n\t"
7004 "aese.8 q4, q12\n\t"
7005 "aesmc.8 q4, q4\n\t"
7006 "vld1.32 {q14}, [r7]!\n\t"
7007 "aese.8 q4, q13\n\t"
7008 "aesmc.8 q4, q4\n\t"
7009 "vld1.32 {q15}, [r7]!\n\t"
7010 "aese.8 q4, q14\n\t"
7011 "aesmc.8 q4, q4\n\t"
7012 "vld1.32 {q14}, [r7]!\n\t"
7013 "aese.8 q4, q15\n\t"
7014 "aesmc.8 q4, q4\n\t"
7015 "vld1.32 {q15}, [r7]\n\t"
7016 "aese.8 q4, q14\n\t"
7017 "veor.8 q4, q4, q15\n\t"
7018 "vld1.8 {q14}, [r9]\n\t"
7019 "sub r7, r7, #48\n\t"
7020 "veor.8 q14, q14, q4\n\t"
7021 "vst1.32 {q14}, [r9]\n\t"
7022 "mov r4, r11\n\t"
7023 "cmp r4, #4\n\t"
7024 "blt L_aes_gcm_decrypt_arm32_crypto_256_out_start_sw_%=\n\t"
7025 "\n"
7026 "L_aes_gcm_decrypt_arm32_crypto_256_out_start_dw_%=:\n\t"
7027 "ldr lr, [r9], #4\n\t"
7028 "sub r4, r4, #4\n\t"
7029 "str lr, [%[out]], #4\n\t"
7030 "cmp r4, #4\n\t"
7031 "bge L_aes_gcm_decrypt_arm32_crypto_256_out_start_dw_%=\n\t"
7032 "\n"
7033 "L_aes_gcm_decrypt_arm32_crypto_256_out_start_sw_%=:\n\t"
7034 "cmp r4, #2\n\t"
7035 "blt L_aes_gcm_decrypt_arm32_crypto_256_out_start_byte_%=\n\t"
7036 "ldrh lr, [r9], #2\n\t"
7037 "sub r4, r4, #2\n\t"
7038 "strh lr, [%[out]], #2\n\t"
7039 "\n"
7040 "L_aes_gcm_decrypt_arm32_crypto_256_out_start_byte_%=:\n\t"
7041 "cmp r4, #1\n\t"
7042 "blt L_aes_gcm_decrypt_arm32_crypto_256_out_end_bytes_%=\n\t"
7043 "ldrb lr, [r9], #1\n\t"
7044 "subs r4, r4, #1\n\t"
7045 "strb lr, [%[out]], #1\n\t"
7046 "bne L_aes_gcm_decrypt_arm32_crypto_256_out_start_byte_%=\n\t"
7047 "\n"
7048 "L_aes_gcm_decrypt_arm32_crypto_256_out_end_bytes_%=:\n\t"
7049 "\n"
7050 "L_aes_gcm_decrypt_arm32_crypto_256_partial_done_%=:\n\t"
7051 /* Finish */
7052 "add r8, %[sz], #15\n\t"
7053 "sub r8, r5, r8, lsr #4\n\t"
7054 "rev r8, r8\n\t"
7055 "vmov.32 s27, r8\n\t"
7056 "aese.8 q6, q0\n\t"
7057 "aesmc.8 q6, q6\n\t"
7058 "aese.8 q6, q1\n\t"
7059 "aesmc.8 q6, q6\n\t"
7060 "aese.8 q6, q2\n\t"
7061 "aesmc.8 q6, q6\n\t"
7062 "aese.8 q6, q3\n\t"
7063 "aesmc.8 q6, q6\n\t"
7064 "aese.8 q6, q7\n\t"
7065 "aesmc.8 q6, q6\n\t"
7066 "aese.8 q6, q8\n\t"
7067 "aesmc.8 q6, q6\n\t"
7068 "aese.8 q6, q9\n\t"
7069 "aesmc.8 q6, q6\n\t"
7070 "aese.8 q6, q10\n\t"
7071 "aesmc.8 q6, q6\n\t"
7072 "aese.8 q6, q11\n\t"
7073 "aesmc.8 q6, q6\n\t"
7074 "aese.8 q6, q12\n\t"
7075 "aesmc.8 q6, q6\n\t"
7076 "vld1.32 {q14}, [r7]!\n\t"
7077 "aese.8 q6, q13\n\t"
7078 "aesmc.8 q6, q6\n\t"
7079 "vld1.32 {q15}, [r7]!\n\t"
7080 "aese.8 q6, q14\n\t"
7081 "aesmc.8 q6, q6\n\t"
7082 "vld1.32 {q14}, [r7]!\n\t"
7083 "aese.8 q6, q15\n\t"
7084 "aesmc.8 q6, q6\n\t"
7085 "vld1.32 {q15}, [r7]\n\t"
7086 "aese.8 q6, q14\n\t"
7087 "veor.8 q6, q6, q15\n\t"
7088 "sub r7, r7, #48\n\t"
7089#endif /* !NO_AES_256 */
7090 "b L_aes_gcm_decrypt_arm32_crypto_done_enc_%=\n\t"
7091 /* AES_GCM_128 */
7092 "\n"
7093 "L_aes_gcm_decrypt_arm32_crypto_start_128_%=:\n\t"
7094#ifndef NO_AES_128
7095 "cmp r10, #1\n\t"
7096 "blt L_aes_gcm_decrypt_arm32_crypto_128_done_%=\n\t"
7097 "beq L_aes_gcm_decrypt_arm32_crypto_128_start_1_%=\n\t"
7098 "\n"
7099 "L_aes_gcm_decrypt_arm32_crypto_128_start_2_%=:\n\t"
7100 "add r8, r5, #1\n\t"
7101 "vmov.8 q4, q6\n\t"
7102 "add r5, r5, #2\n\t"
7103 "vmov.8 q5, q6\n\t"
7104 "rev r8, r8\n\t"
7105 "rev r12, r5\n\t"
7106 "vmov s19, r8\n\t"
7107 "vmov s23, r12\n\t"
7108 "aese.8 q4, q0\n\t"
7109 "aesmc.8 q4, q4\n\t"
7110 "aese.8 q5, q0\n\t"
7111 "aesmc.8 q5, q5\n\t"
7112 "aese.8 q4, q1\n\t"
7113 "aesmc.8 q4, q4\n\t"
7114 "aese.8 q5, q1\n\t"
7115 "aesmc.8 q5, q5\n\t"
7116 "aese.8 q4, q2\n\t"
7117 "aesmc.8 q4, q4\n\t"
7118 "aese.8 q5, q2\n\t"
7119 "aesmc.8 q5, q5\n\t"
7120 "aese.8 q4, q3\n\t"
7121 "aesmc.8 q4, q4\n\t"
7122 "aese.8 q5, q3\n\t"
7123 "aesmc.8 q5, q5\n\t"
7124 "aese.8 q4, q7\n\t"
7125 "aesmc.8 q4, q4\n\t"
7126 "aese.8 q5, q7\n\t"
7127 "aesmc.8 q5, q5\n\t"
7128 "aese.8 q4, q8\n\t"
7129 "aesmc.8 q4, q4\n\t"
7130 "aese.8 q5, q8\n\t"
7131 "aesmc.8 q5, q5\n\t"
7132 "aese.8 q4, q9\n\t"
7133 "aesmc.8 q4, q4\n\t"
7134 "aese.8 q5, q9\n\t"
7135 "aesmc.8 q5, q5\n\t"
7136 "subs r10, r10, #2\n\t"
7137 "aese.8 q4, q10\n\t"
7138 "aesmc.8 q4, q4\n\t"
7139 "aese.8 q5, q10\n\t"
7140 "aesmc.8 q5, q5\n\t"
7141 "aese.8 q4, q11\n\t"
7142 "aesmc.8 q4, q4\n\t"
7143 "aese.8 q5, q11\n\t"
7144 "aesmc.8 q5, q5\n\t"
7145 "vld1.8 {q14-q15}, [%[in]]!\n\t"
7146 "aese.8 q4, q12\n\t"
7147 "veor.8 q4, q4, q13\n\t"
7148 "aese.8 q5, q12\n\t"
7149 "veor.8 q5, q5, q13\n\t"
7150 "veor.8 q14, q14, q4\n\t"
7151 "veor.8 q15, q15, q5\n\t"
7152 "vst1.8 {q14-q15}, [%[out]]!\n\t"
7153 "cmp r10, #1\n\t"
7154 "bgt L_aes_gcm_decrypt_arm32_crypto_128_start_2_%=\n\t"
7155 "blt L_aes_gcm_decrypt_arm32_crypto_128_done_%=\n\t"
7156 "\n"
7157 "L_aes_gcm_decrypt_arm32_crypto_128_start_1_%=:\n\t"
7158 "add r5, r5, #1\n\t"
7159 "vmov.8 q4, q6\n\t"
7160 "rev r8, r5\n\t"
7161 "vmov s19, r8\n\t"
7162 "aese.8 q4, q0\n\t"
7163 "aesmc.8 q4, q4\n\t"
7164 "aese.8 q4, q1\n\t"
7165 "aesmc.8 q4, q4\n\t"
7166 "aese.8 q4, q2\n\t"
7167 "aesmc.8 q4, q4\n\t"
7168 "aese.8 q4, q3\n\t"
7169 "aesmc.8 q4, q4\n\t"
7170 "aese.8 q4, q7\n\t"
7171 "aesmc.8 q4, q4\n\t"
7172 "aese.8 q4, q8\n\t"
7173 "aesmc.8 q4, q4\n\t"
7174 "aese.8 q4, q9\n\t"
7175 "aesmc.8 q4, q4\n\t"
7176 "aese.8 q4, q10\n\t"
7177 "aesmc.8 q4, q4\n\t"
7178 "aese.8 q4, q11\n\t"
7179 "aesmc.8 q4, q4\n\t"
7180 "vld1.8 {q14}, [%[in]]!\n\t"
7181 "aese.8 q4, q12\n\t"
7182 "veor.8 q4, q4, q13\n\t"
7183 "veor.8 q14, q14, q4\n\t"
7184 "vst1.32 {q14}, [%[out]]!\n\t"
7185 "\n"
7186 "L_aes_gcm_decrypt_arm32_crypto_128_done_%=:\n\t"
7187 "ands r11, %[sz], #15\n\t"
7188 "beq L_aes_gcm_decrypt_arm32_crypto_128_partial_done_%=\n\t"
7189 "veor.8 q14, q14, q14\n\t"
7190 "mov r4, r11\n\t"
7191 "vst1.32 {q14}, [r9]\n\t"
7192 "cmp r4, #4\n\t"
7193 "blt L_aes_gcm_decrypt_arm32_crypto_128_start_sw_%=\n\t"
7194 "\n"
7195 "L_aes_gcm_decrypt_arm32_crypto_128_start_dw_%=:\n\t"
7196 "ldr lr, [%[in]], #4\n\t"
7197 "sub r4, r4, #4\n\t"
7198 "str lr, [r9], #4\n\t"
7199 "cmp r4, #4\n\t"
7200 "bge L_aes_gcm_decrypt_arm32_crypto_128_start_dw_%=\n\t"
7201 "\n"
7202 "L_aes_gcm_decrypt_arm32_crypto_128_start_sw_%=:\n\t"
7203 "cmp r4, #2\n\t"
7204 "blt L_aes_gcm_decrypt_arm32_crypto_128_start_byte_%=\n\t"
7205 "ldrh lr, [%[in]], #2\n\t"
7206 "sub r4, r4, #2\n\t"
7207 "strh lr, [r9], #2\n\t"
7208 "\n"
7209 "L_aes_gcm_decrypt_arm32_crypto_128_start_byte_%=:\n\t"
7210 "cmp r4, #1\n\t"
7211 "blt L_aes_gcm_decrypt_arm32_crypto_128_end_bytes_%=\n\t"
7212 "ldrb lr, [%[in]], #1\n\t"
7213 "subs r4, r4, #1\n\t"
7214 "strb lr, [r9], #1\n\t"
7215 "bne L_aes_gcm_decrypt_arm32_crypto_128_start_byte_%=\n\t"
7216 "\n"
7217 "L_aes_gcm_decrypt_arm32_crypto_128_end_bytes_%=:\n\t"
7218 "sub r9, r9, r11\n\t"
7219 "add r5, r5, #1\n\t"
7220 "vmov.8 q4, q6\n\t"
7221 "rev r8, r5\n\t"
7222 "vmov s19, r8\n\t"
7223 "aese.8 q4, q0\n\t"
7224 "aesmc.8 q4, q4\n\t"
7225 "aese.8 q4, q1\n\t"
7226 "aesmc.8 q4, q4\n\t"
7227 "aese.8 q4, q2\n\t"
7228 "aesmc.8 q4, q4\n\t"
7229 "aese.8 q4, q3\n\t"
7230 "aesmc.8 q4, q4\n\t"
7231 "aese.8 q4, q7\n\t"
7232 "aesmc.8 q4, q4\n\t"
7233 "aese.8 q4, q8\n\t"
7234 "aesmc.8 q4, q4\n\t"
7235 "aese.8 q4, q9\n\t"
7236 "aesmc.8 q4, q4\n\t"
7237 "aese.8 q4, q10\n\t"
7238 "aesmc.8 q4, q4\n\t"
7239 "aese.8 q4, q11\n\t"
7240 "aesmc.8 q4, q4\n\t"
7241 "vld1.8 {q14}, [r9]\n\t"
7242 "aese.8 q4, q12\n\t"
7243 "veor.8 q4, q4, q13\n\t"
7244 "veor.8 q14, q14, q4\n\t"
7245 "vst1.32 {q14}, [r9]\n\t"
7246 "mov r4, r11\n\t"
7247 "cmp r4, #4\n\t"
7248 "blt L_aes_gcm_decrypt_arm32_crypto_128_out_start_sw_%=\n\t"
7249 "\n"
7250 "L_aes_gcm_decrypt_arm32_crypto_128_out_start_dw_%=:\n\t"
7251 "ldr lr, [r9], #4\n\t"
7252 "sub r4, r4, #4\n\t"
7253 "str lr, [%[out]], #4\n\t"
7254 "cmp r4, #4\n\t"
7255 "bge L_aes_gcm_decrypt_arm32_crypto_128_out_start_dw_%=\n\t"
7256 "\n"
7257 "L_aes_gcm_decrypt_arm32_crypto_128_out_start_sw_%=:\n\t"
7258 "cmp r4, #2\n\t"
7259 "blt L_aes_gcm_decrypt_arm32_crypto_128_out_start_byte_%=\n\t"
7260 "ldrh lr, [r9], #2\n\t"
7261 "sub r4, r4, #2\n\t"
7262 "strh lr, [%[out]], #2\n\t"
7263 "\n"
7264 "L_aes_gcm_decrypt_arm32_crypto_128_out_start_byte_%=:\n\t"
7265 "cmp r4, #1\n\t"
7266 "blt L_aes_gcm_decrypt_arm32_crypto_128_out_end_bytes_%=\n\t"
7267 "ldrb lr, [r9], #1\n\t"
7268 "subs r4, r4, #1\n\t"
7269 "strb lr, [%[out]], #1\n\t"
7270 "bne L_aes_gcm_decrypt_arm32_crypto_128_out_start_byte_%=\n\t"
7271 "\n"
7272 "L_aes_gcm_decrypt_arm32_crypto_128_out_end_bytes_%=:\n\t"
7273 "\n"
7274 "L_aes_gcm_decrypt_arm32_crypto_128_partial_done_%=:\n\t"
7275 /* Finish */
7276 "add r8, %[sz], #15\n\t"
7277 "sub r8, r5, r8, lsr #4\n\t"
7278 "rev r8, r8\n\t"
7279 "vmov.32 s27, r8\n\t"
7280 "aese.8 q6, q0\n\t"
7281 "aesmc.8 q6, q6\n\t"
7282 "aese.8 q6, q1\n\t"
7283 "aesmc.8 q6, q6\n\t"
7284 "aese.8 q6, q2\n\t"
7285 "aesmc.8 q6, q6\n\t"
7286 "aese.8 q6, q3\n\t"
7287 "aesmc.8 q6, q6\n\t"
7288 "aese.8 q6, q7\n\t"
7289 "aesmc.8 q6, q6\n\t"
7290 "aese.8 q6, q8\n\t"
7291 "aesmc.8 q6, q6\n\t"
7292 "aese.8 q6, q9\n\t"
7293 "aesmc.8 q6, q6\n\t"
7294 "aese.8 q6, q10\n\t"
7295 "aesmc.8 q6, q6\n\t"
7296 "aese.8 q6, q11\n\t"
7297 "aesmc.8 q6, q6\n\t"
7298 "aese.8 q6, q12\n\t"
7299 "veor.8 q6, q6, q13\n\t"
7300#endif /* !NO_AES_128 */
7301 "\n"
7302 "L_aes_gcm_decrypt_arm32_crypto_done_enc_%=:\n\t"
7303 "vmov.i8 q13, #0x87\n\t"
7304 "vshr.u64 q13, q13, #56\n\t"
7305 /* gcm_h */
7306 "ldr r8, [sp, #24]\n\t"
7307 "vld1.32 {q8}, [r8]\n\t"
7308 /* reg */
7309 "ldr r9, [sp, #32]\n\t"
7310 "vld1.32 {q7}, [r9]\n\t"
7311 /* tmp */
7312 "ldr r9, [sp, #28]\n\t"
7313 "lsr lr, r6, #29\n\t"
7314 "lsl r6, r6, #3\n\t"
7315 "rbit lr, lr\n\t"
7316 "rbit r6, r6\n\t"
7317 "vmov s0, lr\n\t"
7318 "vmov s1, r6\n\t"
7319 "lsr lr, %[sz], #29\n\t"
7320 "lsl %[sz], %[sz], #3\n\t"
7321 "rbit lr, lr\n\t"
7322 "rbit %[sz], %[sz]\n\t"
7323 "vmov s2, lr\n\t"
7324 "vmov s3, %[sz]\n\t"
7325 "veor.8 q7, q7, q0\n\t"
7326 "vmull.p64 q2, d15, d16\n\t"
7327 "vmull.p64 q3, d14, d17\n\t"
7328 "vmull.p64 q0, d14, d16\n\t"
7329 "vmull.p64 q1, d15, d17\n\t"
7330 "veor.8 q2, q2, q3\n\t"
7331 /* Reduce */
7332 "vmull.p64 q7, d3, d27\n\t"
7333 "veor.8 d2, d2, d5\n\t"
7334 "veor.8 d1, d1, d4\n\t"
7335 "veor.8 d2, d2, d15\n\t"
7336 "veor.8 d1, d1, d14\n\t"
7337 "vmull.p64 q7, d2, d26\n\t"
7338 "veor.8 q7, q7, q0\n\t"
7339 "vmov.i8 q0, #0x55\n\t"
7340 "vshl.u8 q1, q7, #1\n\t"
7341 "vshr.u8 q7, q7, #1\n\t"
7342 "vbif.8 q7, q1, q0\n\t"
7343 "vmov.i8 q0, #51\n\t"
7344 "vshl.u8 q1, q7, #2\n\t"
7345 "vshr.u8 q7, q7, #2\n\t"
7346 "vbit.8 q1, q7, q0\n\t"
7347 "vshl.u8 q7, q1, #4\n\t"
7348 "vsri.u8 q7, q1, #4\n\t"
7349 /* DONE */
7350 "veor.8 q7, q7, q6\n\t"
7351 /* tag */
7352 "ldr lr, [sp, #4]\n\t"
7353 /* tagSz */
7354 "ldr r4, [sp, #8]\n\t"
7355 "cmp r4, #16\n\t"
7356 "blt L_aes_gcm_decrypt_arm32_crypto_tag_part_tag_%=\n\t"
7357 "vld1.8 {q0}, [lr]\n\t"
7358 "b L_aes_gcm_decrypt_arm32_crypto_tag_tag_loaded_%=\n\t"
7359 "\n"
7360 "L_aes_gcm_decrypt_arm32_crypto_tag_part_tag_%=:\n\t"
7361 "veor.8 q0, q0, q0\n\t"
7362 "mov r12, r4\n\t"
7363 "vst1.32 {q0}, [r9]\n\t"
7364 "cmp r12, #4\n\t"
7365 "blt L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_sw_%=\n\t"
7366 "\n"
7367 "L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_dw_%=:\n\t"
7368 "ldr r8, [lr], #4\n\t"
7369 "sub r12, r12, #4\n\t"
7370 "str r8, [r9], #4\n\t"
7371 "cmp r12, #4\n\t"
7372 "bge L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_dw_%=\n\t"
7373 "\n"
7374 "L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_sw_%=:\n\t"
7375 "cmp r12, #2\n\t"
7376 "blt L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_byte_%=\n\t"
7377 "ldrh r8, [lr], #2\n\t"
7378 "sub r12, r12, #2\n\t"
7379 "strh r8, [r9], #2\n\t"
7380 "\n"
7381 "L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_byte_%=:\n\t"
7382 "cmp r12, #1\n\t"
7383 "blt L_aes_gcm_decrypt_arm32_crypto_tag_tag_end_bytes_%=\n\t"
7384 "ldrb r8, [lr], #1\n\t"
7385 "subs r12, r12, #1\n\t"
7386 "strb r8, [r9], #1\n\t"
7387 "bne L_aes_gcm_decrypt_arm32_crypto_tag_tag_start_byte_%=\n\t"
7388 "\n"
7389 "L_aes_gcm_decrypt_arm32_crypto_tag_tag_end_bytes_%=:\n\t"
7390 "sub r9, r9, r4\n\t"
7391 "vld1.32 {q0}, [r9]\n\t"
7392 "mov r12, #16\n\t"
7393 "vst1.32 {q7}, [r9]\n\t"
7394 "sub r12, r12, r4\n\t"
7395 "eor r8, r8, r8\n\t"
7396 "add r9, r9, r4\n\t"
7397 "\n"
7398 "L_aes_gcm_decrypt_arm32_crypto_tag_calc_tag_byte_%=:\n\t"
7399 "strb r8, [r9], #1\n\t"
7400 "subs r12, r12, #1\n\t"
7401 "bne L_aes_gcm_decrypt_arm32_crypto_tag_calc_tag_byte_%=\n\t"
7402 "subs r9, r9, #16\n\t"
7403 "vld1.32 {q7}, [r9]\n\t"
7404 "\n"
7405 "L_aes_gcm_decrypt_arm32_crypto_tag_tag_loaded_%=:\n\t"
7406 "vceq.i32 q0, q0, q7\n\t"
7407 "vmov r5, s0\n\t"
7408 "vmov r8, s1\n\t"
7409 "and r12, r5, r8\n\t"
7410 "vmov r5, s2\n\t"
7411 "vmov r8, s3\n\t"
7412 "and r12, r12, r5\n\t"
7413 "and r12, r12, r8\n\t"
7414 "mov r5, #-180\n\t"
7415 "mvn r12, r12\n\t"
7416 "and %[in], r5, r12\n\t"
7417 "pop {%[nonceSz], %[tag]}\n\t"
7418 "pop {%[tagSz], %[aad], %[aadSz], %[key], %[gcm_h], %[tmp], %[reg], %[nr]}\n\t"
7419#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
7420 : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz),
7421 [nonce] "+r" (nonce), [nonceSz] "+r" (nonceSz), [tag] "+r" (tag),
7422 [tagSz] "+r" (tagSz), [aad] "+r" (aad), [aadSz] "+r" (aadSz),
7423 [key] "+r" (key), [gcm_h] "+r" (gcm_h), [tmp] "+r" (tmp),
7424 [reg] "+r" (reg), [nr] "+r" (nr)
7425 :
7426#else
7427 :
7428 : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [nonce] "r" (nonce),
7429 [nonceSz] "r" (nonceSz), [tag] "r" (tag), [tagSz] "r" (tagSz),
7430 [aad] "r" (aad), [aadSz] "r" (aadSz), [key] "r" (key),
7431 [gcm_h] "r" (gcm_h), [tmp] "r" (tmp), [reg] "r" (reg), [nr] "r" (nr)
7432#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
7433 : "memory", "cc", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8",
7434 "q9", "q10", "q11", "q12", "q13", "q14", "q15"
7435 );
7436 return (word32)(size_t)in;
7437}
7438
7439#endif /* HAVE_AES_DECRYPT */
7440#endif /* HAVE_AESGCM */
7441#ifdef WOLFSSL_AES_XTS
7442#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
7443WC_OMIT_FRAME_POINTER void AES_XTS_encrypt_AARCH32(const byte* in_p,
7444 byte* out_p, word32 sz_p, const byte* i_p, byte* key_p, byte* key2_p,
7445 byte* tmp_p, int nr_p)
7446#else
7447WC_OMIT_FRAME_POINTER void AES_XTS_encrypt_AARCH32(const byte* in, byte* out,
7448 word32 sz, const byte* i, byte* key, byte* key2, byte* tmp, int nr)
7449#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
7450{
7451#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
7452 register const byte* in __asm__ ("r0") = (const byte*)in_p;
7453 register byte* out __asm__ ("r1") = (byte*)out_p;
7454 register word32 sz __asm__ ("r2") = (word32)sz_p;
7455 register const byte* i __asm__ ("r3") = (const byte*)i_p;
7456 register byte* key __asm__ ("r12") = (byte*)key_p;
7457 register byte* key2 __asm__ ("lr") = (byte*)key2_p;
7458 register byte* tmp __asm__ ("r4") = (byte*)tmp_p;
7459 register int nr __asm__ ("r5") = (int)nr_p;
7460#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
7461
7462 __asm__ __volatile__ (
7463 "push {%[tmp], %[nr]}\n\t"
7464 "push {%[key], %[key2]}\n\t"
7465 "ldr r12, [sp]\n\t"
7466 "ldr lr, [sp, #4]\n\t"
7467 "ldr r5, [sp, #12]\n\t"
7468 "vldm.32 lr!, {q2-q9}\n\t"
7469 "lsr r4, %[sz], #4\n\t"
7470 "and %[sz], %[sz], #15\n\t"
7471 "vld1.8 {q0}, [%[i]]\n\t"
7472 "cmp r5, #12\n\t"
7473 "blt L_aes_xts_encrypt_arm32_crypto_start_128_%=\n\t"
7474 "bgt L_aes_xts_encrypt_arm32_crypto_start_256_%=\n\t"
7475 /* AES_XTS_192 */
7476#ifndef NO_AES_192
7477 "vldm.32 lr!, {q10-q14}\n\t"
7478 "aese.8 q0, q2\n\t"
7479 "aesmc.8 q0, q0\n\t"
7480 "aese.8 q0, q3\n\t"
7481 "aesmc.8 q0, q0\n\t"
7482 "aese.8 q0, q4\n\t"
7483 "aesmc.8 q0, q0\n\t"
7484 "aese.8 q0, q5\n\t"
7485 "aesmc.8 q0, q0\n\t"
7486 "aese.8 q0, q6\n\t"
7487 "aesmc.8 q0, q0\n\t"
7488 "aese.8 q0, q7\n\t"
7489 "aesmc.8 q0, q0\n\t"
7490 "aese.8 q0, q8\n\t"
7491 "aesmc.8 q0, q0\n\t"
7492 "aese.8 q0, q9\n\t"
7493 "aesmc.8 q0, q0\n\t"
7494 "aese.8 q0, q10\n\t"
7495 "aesmc.8 q0, q0\n\t"
7496 "aese.8 q0, q11\n\t"
7497 "aesmc.8 q0, q0\n\t"
7498 "aese.8 q0, q12\n\t"
7499 "aesmc.8 q0, q0\n\t"
7500 "aese.8 q0, q13\n\t"
7501 "veor.32 q0, q0, q14\n\t"
7502 "vmov r6, r7, d0\n\t"
7503 "vmov r8, r9, d1\n\t"
7504 "vldm.32 r12!, {q2-q9}\n\t"
7505 "vldm.32 r12!, {q10-q14}\n\t"
7506 "mov lr, #0x87\n\t"
7507 "cmp r4, #1\n\t"
7508 "blt L_aes_xts_encrypt_arm32_crypto_192_done_%=\n\t"
7509 "\n"
7510 "L_aes_xts_encrypt_arm32_crypto_192_start_1_%=:\n\t"
7511 "vld1.8 {q1}, [%[in]]!\n\t"
7512 "veor.32 q1, q1, q0\n\t"
7513 "aese.8 q1, q2\n\t"
7514 "aesmc.8 q1, q1\n\t"
7515 "and r5, lr, r9, asr #31\n\t"
7516 "aese.8 q1, q3\n\t"
7517 "aesmc.8 q1, q1\n\t"
7518 "lsl r9, r9, #1\n\t"
7519 "aese.8 q1, q4\n\t"
7520 "aesmc.8 q1, q1\n\t"
7521 "orr r9, r9, r8, lsr #31\n\t"
7522 "aese.8 q1, q5\n\t"
7523 "aesmc.8 q1, q1\n\t"
7524 "lsl r8, r8, #1\n\t"
7525 "aese.8 q1, q6\n\t"
7526 "aesmc.8 q1, q1\n\t"
7527 "orr r8, r8, r7, lsr #31\n\t"
7528 "aese.8 q1, q7\n\t"
7529 "aesmc.8 q1, q1\n\t"
7530 "lsl r7, r7, #1\n\t"
7531 "aese.8 q1, q8\n\t"
7532 "aesmc.8 q1, q1\n\t"
7533 "orr r7, r7, r6, lsr #31\n\t"
7534 "aese.8 q1, q9\n\t"
7535 "aesmc.8 q1, q1\n\t"
7536 "eor r6, r5, r6, lsl #1\n\t"
7537 "aese.8 q1, q10\n\t"
7538 "aesmc.8 q1, q1\n\t"
7539 "aese.8 q1, q11\n\t"
7540 "aesmc.8 q1, q1\n\t"
7541 "aese.8 q1, q12\n\t"
7542 "aesmc.8 q1, q1\n\t"
7543 "aese.8 q1, q13\n\t"
7544 "veor.32 q1, q1, q14\n\t"
7545 "veor.32 q1, q1, q0\n\t"
7546 "vmov d0, r6, r7\n\t"
7547 "vmov d1, r8, r9\n\t"
7548 "subs r4, r4, #1\n\t"
7549 "vst1.8 {q1}, [%[out]]!\n\t"
7550 "bne L_aes_xts_encrypt_arm32_crypto_192_start_1_%=\n\t"
7551 "\n"
7552 "L_aes_xts_encrypt_arm32_crypto_192_done_%=:\n\t"
7553 "cmp %[sz], #0\n\t"
7554 "beq L_aes_xts_encrypt_arm32_crypto_192_partial_done_%=\n\t"
7555 "sub %[out], %[out], #16\n\t"
7556 "ldr r4, [sp, #8]\n\t"
7557 "vld1.8 {q1}, [%[out]]!\n\t"
7558 "vst1.32 {q1}, [r4]\n\t"
7559 "mov r5, %[sz]\n\t"
7560 "\n"
7561 "L_aes_xts_encrypt_arm32_crypto_192_start_byte_%=:\n\t"
7562 "ldrb r8, [r4]\n\t"
7563 "ldrb r9, [%[in]], #1\n\t"
7564 "strb r8, [%[out]], #1\n\t"
7565 "strb r9, [r4], #1\n\t"
7566 "subs r5, r5, #1\n\t"
7567 "bgt L_aes_xts_encrypt_arm32_crypto_192_start_byte_%=\n\t"
7568 "sub %[out], %[out], %[sz]\n\t"
7569 "sub r4, r4, %[sz]\n\t"
7570 "sub %[out], %[out], #16\n\t"
7571 "vld1.32 {q1}, [r4]\n\t"
7572 "veor.32 q1, q1, q0\n\t"
7573 "aese.8 q1, q2\n\t"
7574 "aesmc.8 q1, q1\n\t"
7575 "aese.8 q1, q3\n\t"
7576 "aesmc.8 q1, q1\n\t"
7577 "aese.8 q1, q4\n\t"
7578 "aesmc.8 q1, q1\n\t"
7579 "aese.8 q1, q5\n\t"
7580 "aesmc.8 q1, q1\n\t"
7581 "aese.8 q1, q6\n\t"
7582 "aesmc.8 q1, q1\n\t"
7583 "aese.8 q1, q7\n\t"
7584 "aesmc.8 q1, q1\n\t"
7585 "aese.8 q1, q8\n\t"
7586 "aesmc.8 q1, q1\n\t"
7587 "aese.8 q1, q9\n\t"
7588 "aesmc.8 q1, q1\n\t"
7589 "aese.8 q1, q10\n\t"
7590 "aesmc.8 q1, q1\n\t"
7591 "aese.8 q1, q11\n\t"
7592 "aesmc.8 q1, q1\n\t"
7593 "aese.8 q1, q12\n\t"
7594 "aesmc.8 q1, q1\n\t"
7595 "aese.8 q1, q13\n\t"
7596 "veor.32 q1, q1, q14\n\t"
7597 "veor.32 q1, q1, q0\n\t"
7598 "vst1.8 {q1}, [%[out]]\n\t"
7599 "\n"
7600 "L_aes_xts_encrypt_arm32_crypto_192_partial_done_%=:\n\t"
7601#endif /* !NO_AES_192 */
7602 "b L_aes_xts_encrypt_arm32_crypto_done_%=\n\t"
7603 /* AES_XTS_256 */
7604 "\n"
7605 "L_aes_xts_encrypt_arm32_crypto_start_256_%=:\n\t"
7606#ifndef NO_AES_256
7607 "vldm.32 lr!, {q10-q13}\n\t"
7608 "aese.8 q0, q2\n\t"
7609 "aesmc.8 q0, q0\n\t"
7610 "aese.8 q0, q3\n\t"
7611 "aesmc.8 q0, q0\n\t"
7612 "aese.8 q0, q4\n\t"
7613 "aesmc.8 q0, q0\n\t"
7614 "aese.8 q0, q5\n\t"
7615 "aesmc.8 q0, q0\n\t"
7616 "aese.8 q0, q6\n\t"
7617 "aesmc.8 q0, q0\n\t"
7618 "aese.8 q0, q7\n\t"
7619 "aesmc.8 q0, q0\n\t"
7620 "aese.8 q0, q8\n\t"
7621 "aesmc.8 q0, q0\n\t"
7622 "aese.8 q0, q9\n\t"
7623 "aesmc.8 q0, q0\n\t"
7624 "aese.8 q0, q10\n\t"
7625 "aesmc.8 q0, q0\n\t"
7626 "aese.8 q0, q11\n\t"
7627 "aesmc.8 q0, q0\n\t"
7628 "aese.8 q0, q12\n\t"
7629 "aesmc.8 q0, q0\n\t"
7630 "vld1.32 {q14}, [lr]!\n\t"
7631 "aese.8 q0, q13\n\t"
7632 "aesmc.8 q0, q0\n\t"
7633 "vld1.32 {q15}, [lr]!\n\t"
7634 "aese.8 q0, q14\n\t"
7635 "aesmc.8 q0, q0\n\t"
7636 "vld1.32 {q14}, [lr]!\n\t"
7637 "aese.8 q0, q15\n\t"
7638 "veor.32 q0, q0, q14\n\t"
7639 "vmov r6, r7, d0\n\t"
7640 "vmov r8, r9, d1\n\t"
7641 "vldm.32 r12!, {q2-q9}\n\t"
7642 "vldm.32 r12!, {q10-q13}\n\t"
7643 "mov lr, #0x87\n\t"
7644 "cmp r4, #1\n\t"
7645 "blt L_aes_xts_encrypt_arm32_crypto_256_done_%=\n\t"
7646 "\n"
7647 "L_aes_xts_encrypt_arm32_crypto_256_start_1_%=:\n\t"
7648 "vld1.8 {q1}, [%[in]]!\n\t"
7649 "veor.32 q1, q1, q0\n\t"
7650 "aese.8 q1, q2\n\t"
7651 "aesmc.8 q1, q1\n\t"
7652 "and r5, lr, r9, asr #31\n\t"
7653 "aese.8 q1, q3\n\t"
7654 "aesmc.8 q1, q1\n\t"
7655 "lsl r9, r9, #1\n\t"
7656 "aese.8 q1, q4\n\t"
7657 "aesmc.8 q1, q1\n\t"
7658 "orr r9, r9, r8, lsr #31\n\t"
7659 "aese.8 q1, q5\n\t"
7660 "aesmc.8 q1, q1\n\t"
7661 "lsl r8, r8, #1\n\t"
7662 "aese.8 q1, q6\n\t"
7663 "aesmc.8 q1, q1\n\t"
7664 "orr r8, r8, r7, lsr #31\n\t"
7665 "aese.8 q1, q7\n\t"
7666 "aesmc.8 q1, q1\n\t"
7667 "lsl r7, r7, #1\n\t"
7668 "aese.8 q1, q8\n\t"
7669 "aesmc.8 q1, q1\n\t"
7670 "orr r7, r7, r6, lsr #31\n\t"
7671 "aese.8 q1, q9\n\t"
7672 "aesmc.8 q1, q1\n\t"
7673 "eor r6, r5, r6, lsl #1\n\t"
7674 "aese.8 q1, q10\n\t"
7675 "aesmc.8 q1, q1\n\t"
7676 "aese.8 q1, q11\n\t"
7677 "aesmc.8 q1, q1\n\t"
7678 "aese.8 q1, q12\n\t"
7679 "aesmc.8 q1, q1\n\t"
7680 "vld1.32 {q14}, [r12]!\n\t"
7681 "aese.8 q1, q13\n\t"
7682 "aesmc.8 q1, q1\n\t"
7683 "vld1.32 {q15}, [r12]!\n\t"
7684 "aese.8 q1, q14\n\t"
7685 "aesmc.8 q1, q1\n\t"
7686 "vld1.32 {q14}, [r12]!\n\t"
7687 "aese.8 q1, q15\n\t"
7688 "veor.32 q1, q1, q14\n\t"
7689 "sub r12, r12, #48\n\t"
7690 "veor.32 q1, q1, q0\n\t"
7691 "vmov d0, r6, r7\n\t"
7692 "vmov d1, r8, r9\n\t"
7693 "subs r4, r4, #1\n\t"
7694 "vst1.8 {q1}, [%[out]]!\n\t"
7695 "bne L_aes_xts_encrypt_arm32_crypto_256_start_1_%=\n\t"
7696 "\n"
7697 "L_aes_xts_encrypt_arm32_crypto_256_done_%=:\n\t"
7698 "cmp %[sz], #0\n\t"
7699 "beq L_aes_xts_encrypt_arm32_crypto_256_partial_done_%=\n\t"
7700 "sub %[out], %[out], #16\n\t"
7701 "ldr r4, [sp, #8]\n\t"
7702 "vld1.8 {q1}, [%[out]]!\n\t"
7703 "vst1.32 {q1}, [r4]\n\t"
7704 "mov r5, %[sz]\n\t"
7705 "\n"
7706 "L_aes_xts_encrypt_arm32_crypto_256_start_byte_%=:\n\t"
7707 "ldrb r8, [r4]\n\t"
7708 "ldrb r9, [%[in]], #1\n\t"
7709 "strb r8, [%[out]], #1\n\t"
7710 "strb r9, [r4], #1\n\t"
7711 "subs r5, r5, #1\n\t"
7712 "bgt L_aes_xts_encrypt_arm32_crypto_256_start_byte_%=\n\t"
7713 "sub %[out], %[out], %[sz]\n\t"
7714 "sub r4, r4, %[sz]\n\t"
7715 "sub %[out], %[out], #16\n\t"
7716 "vld1.32 {q1}, [r4]\n\t"
7717 "veor.32 q1, q1, q0\n\t"
7718 "aese.8 q1, q2\n\t"
7719 "aesmc.8 q1, q1\n\t"
7720 "aese.8 q1, q3\n\t"
7721 "aesmc.8 q1, q1\n\t"
7722 "aese.8 q1, q4\n\t"
7723 "aesmc.8 q1, q1\n\t"
7724 "aese.8 q1, q5\n\t"
7725 "aesmc.8 q1, q1\n\t"
7726 "aese.8 q1, q6\n\t"
7727 "aesmc.8 q1, q1\n\t"
7728 "aese.8 q1, q7\n\t"
7729 "aesmc.8 q1, q1\n\t"
7730 "aese.8 q1, q8\n\t"
7731 "aesmc.8 q1, q1\n\t"
7732 "aese.8 q1, q9\n\t"
7733 "aesmc.8 q1, q1\n\t"
7734 "aese.8 q1, q10\n\t"
7735 "aesmc.8 q1, q1\n\t"
7736 "aese.8 q1, q11\n\t"
7737 "aesmc.8 q1, q1\n\t"
7738 "aese.8 q1, q12\n\t"
7739 "aesmc.8 q1, q1\n\t"
7740 "vld1.32 {q14}, [r12]!\n\t"
7741 "aese.8 q1, q13\n\t"
7742 "aesmc.8 q1, q1\n\t"
7743 "vld1.32 {q15}, [r12]!\n\t"
7744 "aese.8 q1, q14\n\t"
7745 "aesmc.8 q1, q1\n\t"
7746 "vld1.32 {q14}, [r12]!\n\t"
7747 "aese.8 q1, q15\n\t"
7748 "veor.32 q1, q1, q14\n\t"
7749 "veor.32 q1, q1, q0\n\t"
7750 "vst1.8 {q1}, [%[out]]\n\t"
7751 "\n"
7752 "L_aes_xts_encrypt_arm32_crypto_256_partial_done_%=:\n\t"
7753#endif /* !NO_AES_256 */
7754 "b L_aes_xts_encrypt_arm32_crypto_done_%=\n\t"
7755 /* AES_XTS_128 */
7756 "\n"
7757 "L_aes_xts_encrypt_arm32_crypto_start_128_%=:\n\t"
7758#ifndef NO_AES_128
7759 "vldm.32 lr!, {q10-q12}\n\t"
7760 "aese.8 q0, q2\n\t"
7761 "aesmc.8 q0, q0\n\t"
7762 "aese.8 q0, q3\n\t"
7763 "aesmc.8 q0, q0\n\t"
7764 "aese.8 q0, q4\n\t"
7765 "aesmc.8 q0, q0\n\t"
7766 "aese.8 q0, q5\n\t"
7767 "aesmc.8 q0, q0\n\t"
7768 "aese.8 q0, q6\n\t"
7769 "aesmc.8 q0, q0\n\t"
7770 "aese.8 q0, q7\n\t"
7771 "aesmc.8 q0, q0\n\t"
7772 "aese.8 q0, q8\n\t"
7773 "aesmc.8 q0, q0\n\t"
7774 "aese.8 q0, q9\n\t"
7775 "aesmc.8 q0, q0\n\t"
7776 "aese.8 q0, q10\n\t"
7777 "aesmc.8 q0, q0\n\t"
7778 "aese.8 q0, q11\n\t"
7779 "veor.32 q0, q0, q12\n\t"
7780 "vmov r6, r7, d0\n\t"
7781 "vmov r8, r9, d1\n\t"
7782 "vldm.32 r12!, {q2-q9}\n\t"
7783 "vldm.32 r12!, {q10-q12}\n\t"
7784 "mov lr, #0x87\n\t"
7785 "cmp r4, #1\n\t"
7786 "blt L_aes_xts_encrypt_arm32_crypto_128_done_%=\n\t"
7787 "\n"
7788 "L_aes_xts_encrypt_arm32_crypto_128_start_1_%=:\n\t"
7789 "vld1.8 {q1}, [%[in]]!\n\t"
7790 "veor.32 q1, q1, q0\n\t"
7791 "aese.8 q1, q2\n\t"
7792 "aesmc.8 q1, q1\n\t"
7793 "and r5, lr, r9, asr #31\n\t"
7794 "aese.8 q1, q3\n\t"
7795 "aesmc.8 q1, q1\n\t"
7796 "lsl r9, r9, #1\n\t"
7797 "aese.8 q1, q4\n\t"
7798 "aesmc.8 q1, q1\n\t"
7799 "orr r9, r9, r8, lsr #31\n\t"
7800 "aese.8 q1, q5\n\t"
7801 "aesmc.8 q1, q1\n\t"
7802 "lsl r8, r8, #1\n\t"
7803 "aese.8 q1, q6\n\t"
7804 "aesmc.8 q1, q1\n\t"
7805 "orr r8, r8, r7, lsr #31\n\t"
7806 "aese.8 q1, q7\n\t"
7807 "aesmc.8 q1, q1\n\t"
7808 "lsl r7, r7, #1\n\t"
7809 "aese.8 q1, q8\n\t"
7810 "aesmc.8 q1, q1\n\t"
7811 "orr r7, r7, r6, lsr #31\n\t"
7812 "aese.8 q1, q9\n\t"
7813 "aesmc.8 q1, q1\n\t"
7814 "eor r6, r5, r6, lsl #1\n\t"
7815 "aese.8 q1, q10\n\t"
7816 "aesmc.8 q1, q1\n\t"
7817 "aese.8 q1, q11\n\t"
7818 "veor.32 q1, q1, q12\n\t"
7819 "veor.32 q1, q1, q0\n\t"
7820 "vmov d0, r6, r7\n\t"
7821 "vmov d1, r8, r9\n\t"
7822 "subs r4, r4, #1\n\t"
7823 "vst1.8 {q1}, [%[out]]!\n\t"
7824 "bne L_aes_xts_encrypt_arm32_crypto_128_start_1_%=\n\t"
7825 "\n"
7826 "L_aes_xts_encrypt_arm32_crypto_128_done_%=:\n\t"
7827 "cmp %[sz], #0\n\t"
7828 "beq L_aes_xts_encrypt_arm32_crypto_128_partial_done_%=\n\t"
7829 "sub %[out], %[out], #16\n\t"
7830 "ldr r4, [sp, #8]\n\t"
7831 "vld1.8 {q1}, [%[out]]!\n\t"
7832 "vst1.32 {q1}, [r4]\n\t"
7833 "mov r5, %[sz]\n\t"
7834 "\n"
7835 "L_aes_xts_encrypt_arm32_crypto_128_start_byte_%=:\n\t"
7836 "ldrb r8, [r4]\n\t"
7837 "ldrb r9, [%[in]], #1\n\t"
7838 "strb r8, [%[out]], #1\n\t"
7839 "strb r9, [r4], #1\n\t"
7840 "subs r5, r5, #1\n\t"
7841 "bgt L_aes_xts_encrypt_arm32_crypto_128_start_byte_%=\n\t"
7842 "sub %[out], %[out], %[sz]\n\t"
7843 "sub r4, r4, %[sz]\n\t"
7844 "sub %[out], %[out], #16\n\t"
7845 "vld1.32 {q1}, [r4]\n\t"
7846 "veor.32 q1, q1, q0\n\t"
7847 "aese.8 q1, q2\n\t"
7848 "aesmc.8 q1, q1\n\t"
7849 "aese.8 q1, q3\n\t"
7850 "aesmc.8 q1, q1\n\t"
7851 "aese.8 q1, q4\n\t"
7852 "aesmc.8 q1, q1\n\t"
7853 "aese.8 q1, q5\n\t"
7854 "aesmc.8 q1, q1\n\t"
7855 "aese.8 q1, q6\n\t"
7856 "aesmc.8 q1, q1\n\t"
7857 "aese.8 q1, q7\n\t"
7858 "aesmc.8 q1, q1\n\t"
7859 "aese.8 q1, q8\n\t"
7860 "aesmc.8 q1, q1\n\t"
7861 "aese.8 q1, q9\n\t"
7862 "aesmc.8 q1, q1\n\t"
7863 "aese.8 q1, q10\n\t"
7864 "aesmc.8 q1, q1\n\t"
7865 "aese.8 q1, q11\n\t"
7866 "veor.32 q1, q1, q12\n\t"
7867 "veor.32 q1, q1, q0\n\t"
7868 "vst1.8 {q1}, [%[out]]\n\t"
7869 "\n"
7870 "L_aes_xts_encrypt_arm32_crypto_128_partial_done_%=:\n\t"
7871#endif /* !NO_AES_128 */
7872 "\n"
7873 "L_aes_xts_encrypt_arm32_crypto_done_%=:\n\t"
7874 "pop {%[key], %[key2]}\n\t"
7875 "pop {%[tmp], %[nr]}\n\t"
7876#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
7877 : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [i] "+r" (i),
7878 [key] "+r" (key), [key2] "+r" (key2), [tmp] "+r" (tmp),
7879 [nr] "+r" (nr)
7880 :
7881#else
7882 :
7883 : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [i] "r" (i),
7884 [key] "r" (key), [key2] "r" (key2), [tmp] "r" (tmp), [nr] "r" (nr)
7885#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
7886 : "memory", "cc", "r6", "r7", "r8", "r9", "q0", "q1", "q2", "q3", "q4",
7887 "q5", "q6", "q7", "q8", "q9", "q10", "q11", "q12", "q13", "q14",
7888 "q15"
7889 );
7890}
7891
7892#ifdef HAVE_AES_DECRYPT
7893#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
7894WC_OMIT_FRAME_POINTER void AES_XTS_decrypt_AARCH32(const byte* in_p,
7895 byte* out_p, word32 sz_p, const byte* i_p, byte* key_p, byte* key2_p,
7896 byte* tmp_p, int nr_p)
7897#else
7898WC_OMIT_FRAME_POINTER void AES_XTS_decrypt_AARCH32(const byte* in, byte* out,
7899 word32 sz, const byte* i, byte* key, byte* key2, byte* tmp, int nr)
7900#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
7901{
7902#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
7903 register const byte* in __asm__ ("r0") = (const byte*)in_p;
7904 register byte* out __asm__ ("r1") = (byte*)out_p;
7905 register word32 sz __asm__ ("r2") = (word32)sz_p;
7906 register const byte* i __asm__ ("r3") = (const byte*)i_p;
7907 register byte* key __asm__ ("r12") = (byte*)key_p;
7908 register byte* key2 __asm__ ("lr") = (byte*)key2_p;
7909 register byte* tmp __asm__ ("r4") = (byte*)tmp_p;
7910 register int nr __asm__ ("r5") = (int)nr_p;
7911#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
7912
7913 __asm__ __volatile__ (
7914 "push {%[tmp], %[nr]}\n\t"
7915 "push {%[key], %[key2]}\n\t"
7916 "ldr r12, [sp]\n\t"
7917 "ldr lr, [sp, #4]\n\t"
7918 "vldm.32 lr!, {q2-q9}\n\t"
7919 "eor r5, r5, r5\n\t"
7920 "lsr r4, %[sz], #4\n\t"
7921 "ands %[sz], %[sz], #15\n\t"
7922 "sub r5, r5, %[sz]\n\t"
7923 "sub r4, r4, r5, lsr #31\n\t"
7924 "vld1.8 {q1}, [%[i]]\n\t"
7925 "ldr r5, [sp, #12]\n\t"
7926 "cmp r5, #12\n\t"
7927 "blt L_aes_xts_decrypt_arm32_crypto_start_128_%=\n\t"
7928 "bgt L_aes_xts_decrypt_arm32_crypto_start_256_%=\n\t"
7929 /* AES_XTS_192 */
7930#ifndef NO_AES_192
7931 "vldm.32 lr!, {q10-q14}\n\t"
7932 "aese.8 q1, q2\n\t"
7933 "aesmc.8 q1, q1\n\t"
7934 "aese.8 q1, q3\n\t"
7935 "aesmc.8 q1, q1\n\t"
7936 "aese.8 q1, q4\n\t"
7937 "aesmc.8 q1, q1\n\t"
7938 "aese.8 q1, q5\n\t"
7939 "aesmc.8 q1, q1\n\t"
7940 "aese.8 q1, q6\n\t"
7941 "aesmc.8 q1, q1\n\t"
7942 "aese.8 q1, q7\n\t"
7943 "aesmc.8 q1, q1\n\t"
7944 "aese.8 q1, q8\n\t"
7945 "aesmc.8 q1, q1\n\t"
7946 "aese.8 q1, q9\n\t"
7947 "aesmc.8 q1, q1\n\t"
7948 "aese.8 q1, q10\n\t"
7949 "aesmc.8 q1, q1\n\t"
7950 "aese.8 q1, q11\n\t"
7951 "aesmc.8 q1, q1\n\t"
7952 "aese.8 q1, q12\n\t"
7953 "aesmc.8 q1, q1\n\t"
7954 "aese.8 q1, q13\n\t"
7955 "veor.32 q1, q1, q14\n\t"
7956 "vmov r6, r7, d2\n\t"
7957 "vmov r8, r9, d3\n\t"
7958 "vldm.32 r12!, {q2-q9}\n\t"
7959 "vldm.32 r12!, {q10-q14}\n\t"
7960 "mov lr, #0x87\n\t"
7961 "cmp r4, #1\n\t"
7962 "blt L_aes_xts_decrypt_arm32_crypto_192_done_%=\n\t"
7963 "\n"
7964 "L_aes_xts_decrypt_arm32_crypto_192_start_1_%=:\n\t"
7965 "vld1.8 {q0}, [%[in]]!\n\t"
7966 "veor.32 q0, q0, q1\n\t"
7967 "aesd.8 q0, q2\n\t"
7968 "aesimc.8 q0, q0\n\t"
7969 "and r5, lr, r9, asr #31\n\t"
7970 "aesd.8 q0, q3\n\t"
7971 "aesimc.8 q0, q0\n\t"
7972 "lsl r9, r9, #1\n\t"
7973 "aesd.8 q0, q4\n\t"
7974 "aesimc.8 q0, q0\n\t"
7975 "orr r9, r9, r8, lsr #31\n\t"
7976 "aesd.8 q0, q5\n\t"
7977 "aesimc.8 q0, q0\n\t"
7978 "lsl r8, r8, #1\n\t"
7979 "aesd.8 q0, q6\n\t"
7980 "aesimc.8 q0, q0\n\t"
7981 "orr r8, r8, r7, lsr #31\n\t"
7982 "aesd.8 q0, q7\n\t"
7983 "aesimc.8 q0, q0\n\t"
7984 "lsl r7, r7, #1\n\t"
7985 "aesd.8 q0, q8\n\t"
7986 "aesimc.8 q0, q0\n\t"
7987 "orr r7, r7, r6, lsr #31\n\t"
7988 "aesd.8 q0, q9\n\t"
7989 "aesimc.8 q0, q0\n\t"
7990 "eor r6, r5, r6, lsl #1\n\t"
7991 "aesd.8 q0, q10\n\t"
7992 "aesimc.8 q0, q0\n\t"
7993 "aesd.8 q0, q11\n\t"
7994 "aesimc.8 q0, q0\n\t"
7995 "aesd.8 q0, q12\n\t"
7996 "aesimc.8 q0, q0\n\t"
7997 "aesd.8 q0, q13\n\t"
7998 "veor.32 q0, q0, q14\n\t"
7999 "veor.32 q0, q0, q1\n\t"
8000 "vmov d2, r6, r7\n\t"
8001 "vmov d3, r8, r9\n\t"
8002 "subs r4, r4, #1\n\t"
8003 "vst1.8 {q0}, [%[out]]!\n\t"
8004 "bne L_aes_xts_decrypt_arm32_crypto_192_start_1_%=\n\t"
8005 "\n"
8006 "L_aes_xts_decrypt_arm32_crypto_192_done_%=:\n\t"
8007 "cmp %[sz], #0\n\t"
8008 "beq L_aes_xts_decrypt_arm32_crypto_192_partial_done_%=\n\t"
8009 "and r5, lr, r9, asr #31\n\t"
8010 "lsl r9, r9, #1\n\t"
8011 "orr r9, r9, r8, lsr #31\n\t"
8012 "lsl r8, r8, #1\n\t"
8013 "orr r8, r8, r7, lsr #31\n\t"
8014 "lsl r7, r7, #1\n\t"
8015 "orr r7, r7, r6, lsr #31\n\t"
8016 "eor r6, r5, r6, lsl #1\n\t"
8017 "vmov d30, r6, r7\n\t"
8018 "vmov d31, r8, r9\n\t"
8019 "vld1.8 {q0}, [%[in]]!\n\t"
8020 "ldr r4, [sp, #8]\n\t"
8021 "veor.32 q0, q0, q15\n\t"
8022 "aesd.8 q0, q2\n\t"
8023 "aesimc.8 q0, q0\n\t"
8024 "aesd.8 q0, q3\n\t"
8025 "aesimc.8 q0, q0\n\t"
8026 "aesd.8 q0, q4\n\t"
8027 "aesimc.8 q0, q0\n\t"
8028 "aesd.8 q0, q5\n\t"
8029 "aesimc.8 q0, q0\n\t"
8030 "aesd.8 q0, q6\n\t"
8031 "aesimc.8 q0, q0\n\t"
8032 "aesd.8 q0, q7\n\t"
8033 "aesimc.8 q0, q0\n\t"
8034 "aesd.8 q0, q8\n\t"
8035 "aesimc.8 q0, q0\n\t"
8036 "aesd.8 q0, q9\n\t"
8037 "aesimc.8 q0, q0\n\t"
8038 "aesd.8 q0, q10\n\t"
8039 "aesimc.8 q0, q0\n\t"
8040 "aesd.8 q0, q11\n\t"
8041 "aesimc.8 q0, q0\n\t"
8042 "aesd.8 q0, q12\n\t"
8043 "aesimc.8 q0, q0\n\t"
8044 "aesd.8 q0, q13\n\t"
8045 "veor.32 q0, q0, q14\n\t"
8046 "veor.32 q0, q0, q15\n\t"
8047 "vst1.32 {q0}, [r4]\n\t"
8048 "add %[out], %[out], #16\n\t"
8049 "mov r5, %[sz]\n\t"
8050 "\n"
8051 "L_aes_xts_decrypt_arm32_crypto_192_start_byte_%=:\n\t"
8052 "ldrb r8, [r4]\n\t"
8053 "ldrb r9, [%[in]], #1\n\t"
8054 "strb r8, [%[out]], #1\n\t"
8055 "strb r9, [r4], #1\n\t"
8056 "subs r5, r5, #1\n\t"
8057 "bgt L_aes_xts_decrypt_arm32_crypto_192_start_byte_%=\n\t"
8058 "sub %[out], %[out], %[sz]\n\t"
8059 "sub r4, r4, %[sz]\n\t"
8060 "sub %[out], %[out], #16\n\t"
8061 "vld1.32 {q0}, [r4]\n\t"
8062 "veor.32 q0, q0, q1\n\t"
8063 "aesd.8 q0, q2\n\t"
8064 "aesimc.8 q0, q0\n\t"
8065 "aesd.8 q0, q3\n\t"
8066 "aesimc.8 q0, q0\n\t"
8067 "aesd.8 q0, q4\n\t"
8068 "aesimc.8 q0, q0\n\t"
8069 "aesd.8 q0, q5\n\t"
8070 "aesimc.8 q0, q0\n\t"
8071 "aesd.8 q0, q6\n\t"
8072 "aesimc.8 q0, q0\n\t"
8073 "aesd.8 q0, q7\n\t"
8074 "aesimc.8 q0, q0\n\t"
8075 "aesd.8 q0, q8\n\t"
8076 "aesimc.8 q0, q0\n\t"
8077 "aesd.8 q0, q9\n\t"
8078 "aesimc.8 q0, q0\n\t"
8079 "aesd.8 q0, q10\n\t"
8080 "aesimc.8 q0, q0\n\t"
8081 "aesd.8 q0, q11\n\t"
8082 "aesimc.8 q0, q0\n\t"
8083 "aesd.8 q0, q12\n\t"
8084 "aesimc.8 q0, q0\n\t"
8085 "aesd.8 q0, q13\n\t"
8086 "veor.32 q0, q0, q14\n\t"
8087 "veor.32 q0, q0, q1\n\t"
8088 "vst1.8 {q0}, [%[out]]\n\t"
8089 "\n"
8090 "L_aes_xts_decrypt_arm32_crypto_192_partial_done_%=:\n\t"
8091#endif /* !NO_AES_192 */
8092 "b L_aes_xts_decrypt_arm32_crypto_done_%=\n\t"
8093 /* AES_XTS_256 */
8094 "\n"
8095 "L_aes_xts_decrypt_arm32_crypto_start_256_%=:\n\t"
8096#ifndef NO_AES_256
8097 "vldm.32 lr!, {q10-q13}\n\t"
8098 "aese.8 q1, q2\n\t"
8099 "aesmc.8 q1, q1\n\t"
8100 "aese.8 q1, q3\n\t"
8101 "aesmc.8 q1, q1\n\t"
8102 "aese.8 q1, q4\n\t"
8103 "aesmc.8 q1, q1\n\t"
8104 "aese.8 q1, q5\n\t"
8105 "aesmc.8 q1, q1\n\t"
8106 "aese.8 q1, q6\n\t"
8107 "aesmc.8 q1, q1\n\t"
8108 "aese.8 q1, q7\n\t"
8109 "aesmc.8 q1, q1\n\t"
8110 "aese.8 q1, q8\n\t"
8111 "aesmc.8 q1, q1\n\t"
8112 "aese.8 q1, q9\n\t"
8113 "aesmc.8 q1, q1\n\t"
8114 "aese.8 q1, q10\n\t"
8115 "aesmc.8 q1, q1\n\t"
8116 "aese.8 q1, q11\n\t"
8117 "aesmc.8 q1, q1\n\t"
8118 "aese.8 q1, q12\n\t"
8119 "aesmc.8 q1, q1\n\t"
8120 "vld1.32 {q14}, [lr]!\n\t"
8121 "aese.8 q1, q13\n\t"
8122 "aesmc.8 q1, q1\n\t"
8123 "vld1.32 {q15}, [lr]!\n\t"
8124 "aese.8 q1, q14\n\t"
8125 "aesmc.8 q1, q1\n\t"
8126 "vld1.32 {q14}, [lr]!\n\t"
8127 "aese.8 q1, q15\n\t"
8128 "veor.32 q1, q1, q14\n\t"
8129 "vmov r6, r7, d2\n\t"
8130 "vmov r8, r9, d3\n\t"
8131 "vldm.32 r12!, {q2-q9}\n\t"
8132 "vldm.32 r12!, {q10-q12}\n\t"
8133 "mov lr, #0x87\n\t"
8134 "cmp r4, #1\n\t"
8135 "blt L_aes_xts_decrypt_arm32_crypto_256_done_%=\n\t"
8136 "\n"
8137 "L_aes_xts_decrypt_arm32_crypto_256_start_1_%=:\n\t"
8138 "vld1.8 {q0}, [%[in]]!\n\t"
8139 "veor.32 q0, q0, q1\n\t"
8140 "aesd.8 q0, q2\n\t"
8141 "aesimc.8 q0, q0\n\t"
8142 "and r5, lr, r9, asr #31\n\t"
8143 "aesd.8 q0, q3\n\t"
8144 "aesimc.8 q0, q0\n\t"
8145 "lsl r9, r9, #1\n\t"
8146 "aesd.8 q0, q4\n\t"
8147 "aesimc.8 q0, q0\n\t"
8148 "orr r9, r9, r8, lsr #31\n\t"
8149 "aesd.8 q0, q5\n\t"
8150 "aesimc.8 q0, q0\n\t"
8151 "lsl r8, r8, #1\n\t"
8152 "aesd.8 q0, q6\n\t"
8153 "aesimc.8 q0, q0\n\t"
8154 "orr r8, r8, r7, lsr #31\n\t"
8155 "aesd.8 q0, q7\n\t"
8156 "aesimc.8 q0, q0\n\t"
8157 "lsl r7, r7, #1\n\t"
8158 "aesd.8 q0, q8\n\t"
8159 "aesimc.8 q0, q0\n\t"
8160 "orr r7, r7, r6, lsr #31\n\t"
8161 "aesd.8 q0, q9\n\t"
8162 "aesimc.8 q0, q0\n\t"
8163 "eor r6, r5, r6, lsl #1\n\t"
8164 "aesd.8 q0, q10\n\t"
8165 "aesimc.8 q0, q0\n\t"
8166 "aesd.8 q0, q11\n\t"
8167 "aesimc.8 q0, q0\n\t"
8168 "vld1.32 {q13}, [r12]!\n\t"
8169 "aesd.8 q0, q12\n\t"
8170 "aesimc.8 q0, q0\n\t"
8171 "vld1.32 {q14}, [r12]!\n\t"
8172 "aesd.8 q0, q13\n\t"
8173 "aesimc.8 q0, q0\n\t"
8174 "vld1.32 {q13}, [r12]!\n\t"
8175 "aesd.8 q0, q14\n\t"
8176 "aesimc.8 q0, q0\n\t"
8177 "vld1.32 {q14}, [r12]\n\t"
8178 "aesd.8 q0, q13\n\t"
8179 "veor.32 q0, q0, q14\n\t"
8180 "sub r12, r12, #48\n\t"
8181 "veor.32 q0, q0, q1\n\t"
8182 "vmov d2, r6, r7\n\t"
8183 "vmov d3, r8, r9\n\t"
8184 "subs r4, r4, #1\n\t"
8185 "vst1.8 {q0}, [%[out]]!\n\t"
8186 "bne L_aes_xts_decrypt_arm32_crypto_256_start_1_%=\n\t"
8187 "\n"
8188 "L_aes_xts_decrypt_arm32_crypto_256_done_%=:\n\t"
8189 "cmp %[sz], #0\n\t"
8190 "beq L_aes_xts_decrypt_arm32_crypto_256_partial_done_%=\n\t"
8191 "and r5, lr, r9, asr #31\n\t"
8192 "lsl r9, r9, #1\n\t"
8193 "orr r9, r9, r8, lsr #31\n\t"
8194 "lsl r8, r8, #1\n\t"
8195 "orr r8, r8, r7, lsr #31\n\t"
8196 "lsl r7, r7, #1\n\t"
8197 "orr r7, r7, r6, lsr #31\n\t"
8198 "eor r6, r5, r6, lsl #1\n\t"
8199 "vmov d30, r6, r7\n\t"
8200 "vmov d31, r8, r9\n\t"
8201 "vld1.8 {q0}, [%[in]]!\n\t"
8202 "ldr r4, [sp, #8]\n\t"
8203 "veor.32 q0, q0, q15\n\t"
8204 "aesd.8 q0, q2\n\t"
8205 "aesimc.8 q0, q0\n\t"
8206 "aesd.8 q0, q3\n\t"
8207 "aesimc.8 q0, q0\n\t"
8208 "aesd.8 q0, q4\n\t"
8209 "aesimc.8 q0, q0\n\t"
8210 "aesd.8 q0, q5\n\t"
8211 "aesimc.8 q0, q0\n\t"
8212 "aesd.8 q0, q6\n\t"
8213 "aesimc.8 q0, q0\n\t"
8214 "aesd.8 q0, q7\n\t"
8215 "aesimc.8 q0, q0\n\t"
8216 "aesd.8 q0, q8\n\t"
8217 "aesimc.8 q0, q0\n\t"
8218 "aesd.8 q0, q9\n\t"
8219 "aesimc.8 q0, q0\n\t"
8220 "aesd.8 q0, q10\n\t"
8221 "aesimc.8 q0, q0\n\t"
8222 "aesd.8 q0, q11\n\t"
8223 "aesimc.8 q0, q0\n\t"
8224 "vld1.32 {q13}, [r12]!\n\t"
8225 "aesd.8 q0, q12\n\t"
8226 "aesimc.8 q0, q0\n\t"
8227 "vld1.32 {q14}, [r12]!\n\t"
8228 "aesd.8 q0, q13\n\t"
8229 "aesimc.8 q0, q0\n\t"
8230 "vld1.32 {q13}, [r12]!\n\t"
8231 "aesd.8 q0, q14\n\t"
8232 "aesimc.8 q0, q0\n\t"
8233 "vld1.32 {q14}, [r12]\n\t"
8234 "aesd.8 q0, q13\n\t"
8235 "veor.32 q0, q0, q14\n\t"
8236 "sub r12, r12, #48\n\t"
8237 "veor.32 q0, q0, q15\n\t"
8238 "vst1.32 {q0}, [r4]\n\t"
8239 "add %[out], %[out], #16\n\t"
8240 "mov r5, %[sz]\n\t"
8241 "\n"
8242 "L_aes_xts_decrypt_arm32_crypto_256_start_byte_%=:\n\t"
8243 "ldrb r8, [r4]\n\t"
8244 "ldrb r9, [%[in]], #1\n\t"
8245 "strb r8, [%[out]], #1\n\t"
8246 "strb r9, [r4], #1\n\t"
8247 "subs r5, r5, #1\n\t"
8248 "bgt L_aes_xts_decrypt_arm32_crypto_256_start_byte_%=\n\t"
8249 "sub %[out], %[out], %[sz]\n\t"
8250 "sub r4, r4, %[sz]\n\t"
8251 "sub %[out], %[out], #16\n\t"
8252 "vld1.32 {q0}, [r4]\n\t"
8253 "veor.32 q0, q0, q1\n\t"
8254 "aesd.8 q0, q2\n\t"
8255 "aesimc.8 q0, q0\n\t"
8256 "aesd.8 q0, q3\n\t"
8257 "aesimc.8 q0, q0\n\t"
8258 "aesd.8 q0, q4\n\t"
8259 "aesimc.8 q0, q0\n\t"
8260 "aesd.8 q0, q5\n\t"
8261 "aesimc.8 q0, q0\n\t"
8262 "aesd.8 q0, q6\n\t"
8263 "aesimc.8 q0, q0\n\t"
8264 "aesd.8 q0, q7\n\t"
8265 "aesimc.8 q0, q0\n\t"
8266 "aesd.8 q0, q8\n\t"
8267 "aesimc.8 q0, q0\n\t"
8268 "aesd.8 q0, q9\n\t"
8269 "aesimc.8 q0, q0\n\t"
8270 "aesd.8 q0, q10\n\t"
8271 "aesimc.8 q0, q0\n\t"
8272 "aesd.8 q0, q11\n\t"
8273 "aesimc.8 q0, q0\n\t"
8274 "vld1.32 {q13}, [r12]!\n\t"
8275 "aesd.8 q0, q12\n\t"
8276 "aesimc.8 q0, q0\n\t"
8277 "vld1.32 {q14}, [r12]!\n\t"
8278 "aesd.8 q0, q13\n\t"
8279 "aesimc.8 q0, q0\n\t"
8280 "vld1.32 {q13}, [r12]!\n\t"
8281 "aesd.8 q0, q14\n\t"
8282 "aesimc.8 q0, q0\n\t"
8283 "vld1.32 {q14}, [r12]\n\t"
8284 "aesd.8 q0, q13\n\t"
8285 "veor.32 q0, q0, q14\n\t"
8286 "veor.32 q0, q0, q1\n\t"
8287 "vst1.8 {q0}, [%[out]]\n\t"
8288 "\n"
8289 "L_aes_xts_decrypt_arm32_crypto_256_partial_done_%=:\n\t"
8290#endif /* !NO_AES_256 */
8291 "b L_aes_xts_decrypt_arm32_crypto_done_%=\n\t"
8292 /* AES_XTS_128 */
8293 "\n"
8294 "L_aes_xts_decrypt_arm32_crypto_start_128_%=:\n\t"
8295#ifndef NO_AES_128
8296 "vldm.32 lr!, {q10-q12}\n\t"
8297 "aese.8 q1, q2\n\t"
8298 "aesmc.8 q1, q1\n\t"
8299 "aese.8 q1, q3\n\t"
8300 "aesmc.8 q1, q1\n\t"
8301 "aese.8 q1, q4\n\t"
8302 "aesmc.8 q1, q1\n\t"
8303 "aese.8 q1, q5\n\t"
8304 "aesmc.8 q1, q1\n\t"
8305 "aese.8 q1, q6\n\t"
8306 "aesmc.8 q1, q1\n\t"
8307 "aese.8 q1, q7\n\t"
8308 "aesmc.8 q1, q1\n\t"
8309 "aese.8 q1, q8\n\t"
8310 "aesmc.8 q1, q1\n\t"
8311 "aese.8 q1, q9\n\t"
8312 "aesmc.8 q1, q1\n\t"
8313 "aese.8 q1, q10\n\t"
8314 "aesmc.8 q1, q1\n\t"
8315 "aese.8 q1, q11\n\t"
8316 "veor.32 q1, q1, q12\n\t"
8317 "vmov r6, r7, d2\n\t"
8318 "vmov r8, r9, d3\n\t"
8319 "vldm.32 r12!, {q2-q9}\n\t"
8320 "vldm.32 r12!, {q10-q12}\n\t"
8321 "mov lr, #0x87\n\t"
8322 "cmp r4, #1\n\t"
8323 "blt L_aes_xts_decrypt_arm32_crypto_128_done_%=\n\t"
8324 "\n"
8325 "L_aes_xts_decrypt_arm32_crypto_128_start_1_%=:\n\t"
8326 "vld1.8 {q0}, [%[in]]!\n\t"
8327 "veor.32 q0, q0, q1\n\t"
8328 "aesd.8 q0, q2\n\t"
8329 "aesimc.8 q0, q0\n\t"
8330 "and r5, lr, r9, asr #31\n\t"
8331 "aesd.8 q0, q3\n\t"
8332 "aesimc.8 q0, q0\n\t"
8333 "lsl r9, r9, #1\n\t"
8334 "aesd.8 q0, q4\n\t"
8335 "aesimc.8 q0, q0\n\t"
8336 "orr r9, r9, r8, lsr #31\n\t"
8337 "aesd.8 q0, q5\n\t"
8338 "aesimc.8 q0, q0\n\t"
8339 "lsl r8, r8, #1\n\t"
8340 "aesd.8 q0, q6\n\t"
8341 "aesimc.8 q0, q0\n\t"
8342 "orr r8, r8, r7, lsr #31\n\t"
8343 "aesd.8 q0, q7\n\t"
8344 "aesimc.8 q0, q0\n\t"
8345 "lsl r7, r7, #1\n\t"
8346 "aesd.8 q0, q8\n\t"
8347 "aesimc.8 q0, q0\n\t"
8348 "orr r7, r7, r6, lsr #31\n\t"
8349 "aesd.8 q0, q9\n\t"
8350 "aesimc.8 q0, q0\n\t"
8351 "eor r6, r5, r6, lsl #1\n\t"
8352 "aesd.8 q0, q10\n\t"
8353 "aesimc.8 q0, q0\n\t"
8354 "aesd.8 q0, q11\n\t"
8355 "veor.32 q0, q0, q12\n\t"
8356 "veor.32 q0, q0, q1\n\t"
8357 "vmov d2, r6, r7\n\t"
8358 "vmov d3, r8, r9\n\t"
8359 "subs r4, r4, #1\n\t"
8360 "vst1.8 {q0}, [%[out]]!\n\t"
8361 "bne L_aes_xts_decrypt_arm32_crypto_128_start_1_%=\n\t"
8362 "\n"
8363 "L_aes_xts_decrypt_arm32_crypto_128_done_%=:\n\t"
8364 "cmp %[sz], #0\n\t"
8365 "beq L_aes_xts_decrypt_arm32_crypto_128_partial_done_%=\n\t"
8366 "and r5, lr, r9, asr #31\n\t"
8367 "lsl r9, r9, #1\n\t"
8368 "orr r9, r9, r8, lsr #31\n\t"
8369 "lsl r8, r8, #1\n\t"
8370 "orr r8, r8, r7, lsr #31\n\t"
8371 "lsl r7, r7, #1\n\t"
8372 "orr r7, r7, r6, lsr #31\n\t"
8373 "eor r6, r5, r6, lsl #1\n\t"
8374 "vmov d30, r6, r7\n\t"
8375 "vmov d31, r8, r9\n\t"
8376 "vld1.8 {q0}, [%[in]]!\n\t"
8377 "ldr r4, [sp, #8]\n\t"
8378 "veor.32 q0, q0, q15\n\t"
8379 "aesd.8 q0, q2\n\t"
8380 "aesimc.8 q0, q0\n\t"
8381 "aesd.8 q0, q3\n\t"
8382 "aesimc.8 q0, q0\n\t"
8383 "aesd.8 q0, q4\n\t"
8384 "aesimc.8 q0, q0\n\t"
8385 "aesd.8 q0, q5\n\t"
8386 "aesimc.8 q0, q0\n\t"
8387 "aesd.8 q0, q6\n\t"
8388 "aesimc.8 q0, q0\n\t"
8389 "aesd.8 q0, q7\n\t"
8390 "aesimc.8 q0, q0\n\t"
8391 "aesd.8 q0, q8\n\t"
8392 "aesimc.8 q0, q0\n\t"
8393 "aesd.8 q0, q9\n\t"
8394 "aesimc.8 q0, q0\n\t"
8395 "aesd.8 q0, q10\n\t"
8396 "aesimc.8 q0, q0\n\t"
8397 "aesd.8 q0, q11\n\t"
8398 "veor.32 q0, q0, q12\n\t"
8399 "veor.32 q0, q0, q15\n\t"
8400 "vst1.32 {q0}, [r4]\n\t"
8401 "add %[out], %[out], #16\n\t"
8402 "mov r5, %[sz]\n\t"
8403 "\n"
8404 "L_aes_xts_decrypt_arm32_crypto_128_start_byte_%=:\n\t"
8405 "ldrb r8, [r4]\n\t"
8406 "ldrb r9, [%[in]], #1\n\t"
8407 "strb r8, [%[out]], #1\n\t"
8408 "strb r9, [r4], #1\n\t"
8409 "subs r5, r5, #1\n\t"
8410 "bgt L_aes_xts_decrypt_arm32_crypto_128_start_byte_%=\n\t"
8411 "sub %[out], %[out], %[sz]\n\t"
8412 "sub r4, r4, %[sz]\n\t"
8413 "sub %[out], %[out], #16\n\t"
8414 "vld1.32 {q0}, [r4]\n\t"
8415 "veor.32 q0, q0, q1\n\t"
8416 "aesd.8 q0, q2\n\t"
8417 "aesimc.8 q0, q0\n\t"
8418 "aesd.8 q0, q3\n\t"
8419 "aesimc.8 q0, q0\n\t"
8420 "aesd.8 q0, q4\n\t"
8421 "aesimc.8 q0, q0\n\t"
8422 "aesd.8 q0, q5\n\t"
8423 "aesimc.8 q0, q0\n\t"
8424 "aesd.8 q0, q6\n\t"
8425 "aesimc.8 q0, q0\n\t"
8426 "aesd.8 q0, q7\n\t"
8427 "aesimc.8 q0, q0\n\t"
8428 "aesd.8 q0, q8\n\t"
8429 "aesimc.8 q0, q0\n\t"
8430 "aesd.8 q0, q9\n\t"
8431 "aesimc.8 q0, q0\n\t"
8432 "aesd.8 q0, q10\n\t"
8433 "aesimc.8 q0, q0\n\t"
8434 "aesd.8 q0, q11\n\t"
8435 "veor.32 q0, q0, q12\n\t"
8436 "veor.32 q0, q0, q1\n\t"
8437 "vst1.8 {q0}, [%[out]]\n\t"
8438 "\n"
8439 "L_aes_xts_decrypt_arm32_crypto_128_partial_done_%=:\n\t"
8440#endif /* !NO_AES_128 */
8441 "\n"
8442 "L_aes_xts_decrypt_arm32_crypto_done_%=:\n\t"
8443 "pop {%[key], %[key2]}\n\t"
8444 "pop {%[tmp], %[nr]}\n\t"
8445#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
8446 : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [i] "+r" (i),
8447 [key] "+r" (key), [key2] "+r" (key2), [tmp] "+r" (tmp),
8448 [nr] "+r" (nr)
8449 :
8450#else
8451 :
8452 : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [i] "r" (i),
8453 [key] "r" (key), [key2] "r" (key2), [tmp] "r" (tmp), [nr] "r" (nr)
8454#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
8455 : "memory", "cc", "r6", "r7", "r8", "r9", "q0", "q1", "q2", "q3", "q4",
8456 "q5", "q6", "q7", "q8", "q9", "q10", "q11", "q12", "q13", "q14",
8457 "q15"
8458 );
8459}
8460
8461#endif /* HAVE_AES_DECRYPT */
8462#endif /* WOLFSSL_AES_XTS */
8463#else
8464#ifdef HAVE_AES_DECRYPT
8465XALIGNED(8) static const word32 L_AES_ARM32_td_data[] = {
8466 0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e,
8467 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303,
8468 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c,
8469 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3,
8470 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0,
8471 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9,
8472 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259,
8473 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8,
8474 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971,
8475 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a,
8476 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f,
8477 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b,
8478 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8,
8479 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab,
8480 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708,
8481 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682,
8482 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2,
8483 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe,
8484 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb,
8485 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10,
8486 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd,
8487 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015,
8488 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e,
8489 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee,
8490 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000,
8491 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72,
8492 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39,
8493 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e,
8494 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91,
8495 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a,
8496 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17,
8497 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9,
8498 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60,
8499 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e,
8500 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1,
8501 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611,
8502 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1,
8503 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3,
8504 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964,
8505 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390,
8506 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b,
8507 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf,
8508 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46,
8509 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af,
8510 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512,
8511 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb,
8512 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a,
8513 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8,
8514 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c,
8515 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266,
8516 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8,
8517 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6,
8518 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604,
8519 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551,
8520 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41,
8521 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647,
8522 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c,
8523 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1,
8524 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737,
8525 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db,
8526 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340,
8527 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95,
8528 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1,
8529 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857,
8530};
8531
8532#endif /* HAVE_AES_DECRYPT */
8533#if defined(HAVE_AES_DECRYPT) || defined(HAVE_AES_CBC) || \
8534 defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \
8535 defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER)
8536XALIGNED(8) static const word32 L_AES_ARM32_te_data[] = {
8537 0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b,
8538 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5,
8539 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b,
8540 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676,
8541 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d,
8542 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0,
8543 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf,
8544 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0,
8545 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626,
8546 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc,
8547 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1,
8548 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515,
8549 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3,
8550 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a,
8551 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2,
8552 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575,
8553 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a,
8554 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0,
8555 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3,
8556 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484,
8557 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded,
8558 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b,
8559 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939,
8560 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf,
8561 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb,
8562 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585,
8563 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f,
8564 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8,
8565 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f,
8566 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5,
8567 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121,
8568 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2,
8569 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec,
8570 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717,
8571 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d,
8572 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373,
8573 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc,
8574 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888,
8575 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414,
8576 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb,
8577 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a,
8578 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c,
8579 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262,
8580 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979,
8581 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d,
8582 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9,
8583 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea,
8584 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808,
8585 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e,
8586 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6,
8587 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f,
8588 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a,
8589 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666,
8590 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e,
8591 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9,
8592 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e,
8593 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111,
8594 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494,
8595 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9,
8596 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf,
8597 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d,
8598 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868,
8599 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f,
8600 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616,
8601};
8602
8603#endif /* HAVE_AES_DECRYPT || HAVE_AES_CBC || HAVE_AESCCM || HAVE_AESGCM ||
8604 * WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */
8605#ifdef HAVE_AES_DECRYPT
8606static const word32* L_AES_ARM32_td = L_AES_ARM32_td_data;
8607#endif /* HAVE_AES_DECRYPT */
8608#if defined(HAVE_AES_DECRYPT) || defined(HAVE_AES_CBC) || \
8609 defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \
8610 defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER)
8611static const word32* L_AES_ARM32_te = L_AES_ARM32_te_data;
8612#endif /* HAVE_AES_DECRYPT || HAVE_AES_CBC || HAVE_AESCCM || HAVE_AESGCM ||
8613 * WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */
8614#ifdef HAVE_AES_DECRYPT
8615void AES_invert_key(unsigned char* ks_p, word32 rounds_p);
8616#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
8617WC_OMIT_FRAME_POINTER void AES_invert_key(unsigned char* ks_p, word32 rounds_p)
8618#else
8619WC_OMIT_FRAME_POINTER void AES_invert_key(unsigned char* ks, word32 rounds)
8620#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
8621{
8622#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
8623 register unsigned char* ks __asm__ ("r0") = (unsigned char*)ks_p;
8624 register word32 rounds __asm__ ("r1") = (word32)rounds_p;
8625 register word32* L_AES_ARM32_te_c __asm__ ("r2") = (word32*)L_AES_ARM32_te;
8626 register word32* L_AES_ARM32_td_c __asm__ ("r3") = (word32*)L_AES_ARM32_td;
8627#else
8628 register word32* L_AES_ARM32_te_c = (word32*)L_AES_ARM32_te;
8629 register word32* L_AES_ARM32_td_c = (word32*)L_AES_ARM32_td;
8630#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
8631
8632 __asm__ __volatile__ (
8633 "mov r12, %[L_AES_ARM32_te]\n\t"
8634 "mov lr, %[L_AES_ARM32_td]\n\t"
8635 "add r10, %[ks], %[rounds], lsl #4\n\t"
8636 "mov r11, %[rounds]\n\t"
8637 "\n"
8638 "L_AES_invert_key_loop_%=:\n\t"
8639 "ldm %[ks], {r2, r3, r4, r5}\n\t"
8640 "ldm r10, {r6, r7, r8, r9}\n\t"
8641 "stm r10, {r2, r3, r4, r5}\n\t"
8642 "stm %[ks]!, {r6, r7, r8, r9}\n\t"
8643 "subs r11, r11, #2\n\t"
8644 "sub r10, r10, #16\n\t"
8645 "bne L_AES_invert_key_loop_%=\n\t"
8646 "sub %[ks], %[ks], %[rounds], lsl #3\n\t"
8647 "add %[ks], %[ks], #16\n\t"
8648 "sub r11, %[rounds], #1\n\t"
8649 "\n"
8650 "L_AES_invert_key_mix_loop_%=:\n\t"
8651 "ldm %[ks], {r2, r3, r4, r5}\n\t"
8652#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8653#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8654 "lsl r6, r2, #24\n\t"
8655 "lsr r6, r6, #24\n\t"
8656#else
8657 "uxtb r6, r2\n\t"
8658#endif
8659#else
8660 "ubfx r6, r2, #0, #8\n\t"
8661#endif
8662#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8663#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8664 "lsl r7, r2, #16\n\t"
8665 "lsr r7, r7, #24\n\t"
8666#else
8667 "uxtb r7, r2, ror #8\n\t"
8668#endif
8669#else
8670 "ubfx r7, r2, #8, #8\n\t"
8671#endif
8672#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8673#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8674 "lsl r8, r2, #8\n\t"
8675 "lsr r8, r8, #24\n\t"
8676#else
8677 "uxtb r8, r2, ror #16\n\t"
8678#endif
8679#else
8680 "ubfx r8, r2, #16, #8\n\t"
8681#endif
8682 "lsr r9, r2, #24\n\t"
8683 "ldrb r6, [r12, r6, lsl #2]\n\t"
8684 "ldrb r7, [r12, r7, lsl #2]\n\t"
8685 "ldrb r8, [r12, r8, lsl #2]\n\t"
8686 "ldrb r9, [r12, r9, lsl #2]\n\t"
8687 "ldr r6, [lr, r6, lsl #2]\n\t"
8688 "ldr r7, [lr, r7, lsl #2]\n\t"
8689 "ldr r8, [lr, r8, lsl #2]\n\t"
8690 "ldr r9, [lr, r9, lsl #2]\n\t"
8691 "eor r8, r8, r6, ror #16\n\t"
8692 "eor r8, r8, r7, ror #8\n\t"
8693 "eor r8, r8, r9, ror #24\n\t"
8694 "str r8, [%[ks]], #4\n\t"
8695#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8696#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8697 "lsl r6, r3, #24\n\t"
8698 "lsr r6, r6, #24\n\t"
8699#else
8700 "uxtb r6, r3\n\t"
8701#endif
8702#else
8703 "ubfx r6, r3, #0, #8\n\t"
8704#endif
8705#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8706#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8707 "lsl r7, r3, #16\n\t"
8708 "lsr r7, r7, #24\n\t"
8709#else
8710 "uxtb r7, r3, ror #8\n\t"
8711#endif
8712#else
8713 "ubfx r7, r3, #8, #8\n\t"
8714#endif
8715#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8716#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8717 "lsl r8, r3, #8\n\t"
8718 "lsr r8, r8, #24\n\t"
8719#else
8720 "uxtb r8, r3, ror #16\n\t"
8721#endif
8722#else
8723 "ubfx r8, r3, #16, #8\n\t"
8724#endif
8725 "lsr r9, r3, #24\n\t"
8726 "ldrb r6, [r12, r6, lsl #2]\n\t"
8727 "ldrb r7, [r12, r7, lsl #2]\n\t"
8728 "ldrb r8, [r12, r8, lsl #2]\n\t"
8729 "ldrb r9, [r12, r9, lsl #2]\n\t"
8730 "ldr r6, [lr, r6, lsl #2]\n\t"
8731 "ldr r7, [lr, r7, lsl #2]\n\t"
8732 "ldr r8, [lr, r8, lsl #2]\n\t"
8733 "ldr r9, [lr, r9, lsl #2]\n\t"
8734 "eor r8, r8, r6, ror #16\n\t"
8735 "eor r8, r8, r7, ror #8\n\t"
8736 "eor r8, r8, r9, ror #24\n\t"
8737 "str r8, [%[ks]], #4\n\t"
8738#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8739#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8740 "lsl r6, r4, #24\n\t"
8741 "lsr r6, r6, #24\n\t"
8742#else
8743 "uxtb r6, r4\n\t"
8744#endif
8745#else
8746 "ubfx r6, r4, #0, #8\n\t"
8747#endif
8748#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8749#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8750 "lsl r7, r4, #16\n\t"
8751 "lsr r7, r7, #24\n\t"
8752#else
8753 "uxtb r7, r4, ror #8\n\t"
8754#endif
8755#else
8756 "ubfx r7, r4, #8, #8\n\t"
8757#endif
8758#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8759#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8760 "lsl r8, r4, #8\n\t"
8761 "lsr r8, r8, #24\n\t"
8762#else
8763 "uxtb r8, r4, ror #16\n\t"
8764#endif
8765#else
8766 "ubfx r8, r4, #16, #8\n\t"
8767#endif
8768 "lsr r9, r4, #24\n\t"
8769 "ldrb r6, [r12, r6, lsl #2]\n\t"
8770 "ldrb r7, [r12, r7, lsl #2]\n\t"
8771 "ldrb r8, [r12, r8, lsl #2]\n\t"
8772 "ldrb r9, [r12, r9, lsl #2]\n\t"
8773 "ldr r6, [lr, r6, lsl #2]\n\t"
8774 "ldr r7, [lr, r7, lsl #2]\n\t"
8775 "ldr r8, [lr, r8, lsl #2]\n\t"
8776 "ldr r9, [lr, r9, lsl #2]\n\t"
8777 "eor r8, r8, r6, ror #16\n\t"
8778 "eor r8, r8, r7, ror #8\n\t"
8779 "eor r8, r8, r9, ror #24\n\t"
8780 "str r8, [%[ks]], #4\n\t"
8781#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8782#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8783 "lsl r6, r5, #24\n\t"
8784 "lsr r6, r6, #24\n\t"
8785#else
8786 "uxtb r6, r5\n\t"
8787#endif
8788#else
8789 "ubfx r6, r5, #0, #8\n\t"
8790#endif
8791#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8792#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8793 "lsl r7, r5, #16\n\t"
8794 "lsr r7, r7, #24\n\t"
8795#else
8796 "uxtb r7, r5, ror #8\n\t"
8797#endif
8798#else
8799 "ubfx r7, r5, #8, #8\n\t"
8800#endif
8801#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8802#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8803 "lsl r8, r5, #8\n\t"
8804 "lsr r8, r8, #24\n\t"
8805#else
8806 "uxtb r8, r5, ror #16\n\t"
8807#endif
8808#else
8809 "ubfx r8, r5, #16, #8\n\t"
8810#endif
8811 "lsr r9, r5, #24\n\t"
8812 "ldrb r6, [r12, r6, lsl #2]\n\t"
8813 "ldrb r7, [r12, r7, lsl #2]\n\t"
8814 "ldrb r8, [r12, r8, lsl #2]\n\t"
8815 "ldrb r9, [r12, r9, lsl #2]\n\t"
8816 "ldr r6, [lr, r6, lsl #2]\n\t"
8817 "ldr r7, [lr, r7, lsl #2]\n\t"
8818 "ldr r8, [lr, r8, lsl #2]\n\t"
8819 "ldr r9, [lr, r9, lsl #2]\n\t"
8820 "eor r8, r8, r6, ror #16\n\t"
8821 "eor r8, r8, r7, ror #8\n\t"
8822 "eor r8, r8, r9, ror #24\n\t"
8823 "str r8, [%[ks]], #4\n\t"
8824 "subs r11, r11, #1\n\t"
8825 "bne L_AES_invert_key_mix_loop_%=\n\t"
8826#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
8827 : [ks] "+r" (ks), [rounds] "+r" (rounds),
8828 [L_AES_ARM32_te] "+r" (L_AES_ARM32_te_c),
8829 [L_AES_ARM32_td] "+r" (L_AES_ARM32_td_c)
8830 :
8831#else
8832 :
8833 : [ks] "r" (ks), [rounds] "r" (rounds),
8834 [L_AES_ARM32_te] "r" (L_AES_ARM32_te_c),
8835 [L_AES_ARM32_td] "r" (L_AES_ARM32_td_c)
8836#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
8837 : "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
8838 "r10", "r11"
8839 );
8840}
8841
8842#endif /* HAVE_AES_DECRYPT */
8843XALIGNED(8) static const word32 L_AES_ARM32_rcon[] = {
8844 0x01000000, 0x02000000, 0x04000000, 0x08000000,
8845 0x10000000, 0x20000000, 0x40000000, 0x80000000,
8846 0x1b000000, 0x36000000
8847};
8848
8849void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p,
8850 unsigned char* ks_p);
8851#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
8852WC_OMIT_FRAME_POINTER void AES_set_encrypt_key(const unsigned char* key_p,
8853 word32 len_p, unsigned char* ks_p)
8854#else
8855WC_OMIT_FRAME_POINTER void AES_set_encrypt_key(const unsigned char* key,
8856 word32 len, unsigned char* ks)
8857#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
8858{
8859#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
8860 register const unsigned char* key __asm__ ("r0") =
8861 (const unsigned char*)key_p;
8862 register word32 len __asm__ ("r1") = (word32)len_p;
8863 register unsigned char* ks __asm__ ("r2") = (unsigned char*)ks_p;
8864 register word32* L_AES_ARM32_te_c __asm__ ("r3") = (word32*)L_AES_ARM32_te;
8865 register word32* L_AES_ARM32_rcon_c __asm__ ("r12") =
8866 (word32*)&L_AES_ARM32_rcon;
8867#else
8868 register word32* L_AES_ARM32_te_c = (word32*)L_AES_ARM32_te;
8869 register word32* L_AES_ARM32_rcon_c = (word32*)&L_AES_ARM32_rcon;
8870#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
8871
8872 __asm__ __volatile__ (
8873 "push {%[L_AES_ARM32_rcon]}\n\t"
8874 "mov r8, %[L_AES_ARM32_te]\n\t"
8875 "mov lr, %[L_AES_ARM32_rcon]\n\t"
8876 "cmp %[len], #0x80\n\t"
8877 "beq L_AES_set_encrypt_key_start_128_%=\n\t"
8878 "cmp %[len], #0xc0\n\t"
8879 "beq L_AES_set_encrypt_key_start_192_%=\n\t"
8880 "ldr r4, [%[key]]\n\t"
8881 "ldr r5, [%[key], #4]\n\t"
8882 "ldr r6, [%[key], #8]\n\t"
8883 "ldr r7, [%[key], #12]\n\t"
8884#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8885 /* REV r4, r4 */
8886 "eor r3, r4, r4, ror #16\n\t"
8887 "bic r3, r3, #0xff0000\n\t"
8888 "ror r4, r4, #8\n\t"
8889 "eor r4, r4, r3, lsr #8\n\t"
8890 /* REV r5, r5 */
8891 "eor r3, r5, r5, ror #16\n\t"
8892 "bic r3, r3, #0xff0000\n\t"
8893 "ror r5, r5, #8\n\t"
8894 "eor r5, r5, r3, lsr #8\n\t"
8895 /* REV r6, r6 */
8896 "eor r3, r6, r6, ror #16\n\t"
8897 "bic r3, r3, #0xff0000\n\t"
8898 "ror r6, r6, #8\n\t"
8899 "eor r6, r6, r3, lsr #8\n\t"
8900 /* REV r7, r7 */
8901 "eor r3, r7, r7, ror #16\n\t"
8902 "bic r3, r3, #0xff0000\n\t"
8903 "ror r7, r7, #8\n\t"
8904 "eor r7, r7, r3, lsr #8\n\t"
8905#else
8906 "rev r4, r4\n\t"
8907 "rev r5, r5\n\t"
8908 "rev r6, r6\n\t"
8909 "rev r7, r7\n\t"
8910#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
8911 "stm %[ks]!, {r4, r5, r6, r7}\n\t"
8912 "ldr r4, [%[key], #16]\n\t"
8913 "ldr r5, [%[key], #20]\n\t"
8914 "ldr r6, [%[key], #24]\n\t"
8915 "ldr r7, [%[key], #28]\n\t"
8916#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8917 /* REV r4, r4 */
8918 "eor r3, r4, r4, ror #16\n\t"
8919 "bic r3, r3, #0xff0000\n\t"
8920 "ror r4, r4, #8\n\t"
8921 "eor r4, r4, r3, lsr #8\n\t"
8922 /* REV r5, r5 */
8923 "eor r3, r5, r5, ror #16\n\t"
8924 "bic r3, r3, #0xff0000\n\t"
8925 "ror r5, r5, #8\n\t"
8926 "eor r5, r5, r3, lsr #8\n\t"
8927 /* REV r6, r6 */
8928 "eor r3, r6, r6, ror #16\n\t"
8929 "bic r3, r3, #0xff0000\n\t"
8930 "ror r6, r6, #8\n\t"
8931 "eor r6, r6, r3, lsr #8\n\t"
8932 /* REV r7, r7 */
8933 "eor r3, r7, r7, ror #16\n\t"
8934 "bic r3, r3, #0xff0000\n\t"
8935 "ror r7, r7, #8\n\t"
8936 "eor r7, r7, r3, lsr #8\n\t"
8937#else
8938 "rev r4, r4\n\t"
8939 "rev r5, r5\n\t"
8940 "rev r6, r6\n\t"
8941 "rev r7, r7\n\t"
8942#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
8943 "stm %[ks], {r4, r5, r6, r7}\n\t"
8944 "sub %[ks], %[ks], #16\n\t"
8945 "mov r12, #6\n\t"
8946 "\n"
8947 "L_AES_set_encrypt_key_loop_256_%=:\n\t"
8948#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8949#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8950 "lsl r4, r7, #24\n\t"
8951 "lsr r4, r4, #24\n\t"
8952#else
8953 "uxtb r4, r7\n\t"
8954#endif
8955#else
8956 "ubfx r4, r7, #0, #8\n\t"
8957#endif
8958#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8959#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8960 "lsl r5, r7, #16\n\t"
8961 "lsr r5, r5, #24\n\t"
8962#else
8963 "uxtb r5, r7, ror #8\n\t"
8964#endif
8965#else
8966 "ubfx r5, r7, #8, #8\n\t"
8967#endif
8968#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8969#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8970 "lsl r6, r7, #8\n\t"
8971 "lsr r6, r6, #24\n\t"
8972#else
8973 "uxtb r6, r7, ror #16\n\t"
8974#endif
8975#else
8976 "ubfx r6, r7, #16, #8\n\t"
8977#endif
8978 "lsr r7, r7, #24\n\t"
8979 "ldrb r4, [r8, r4, lsl #2]\n\t"
8980 "ldrb r5, [r8, r5, lsl #2]\n\t"
8981 "ldrb r6, [r8, r6, lsl #2]\n\t"
8982 "ldrb r7, [r8, r7, lsl #2]\n\t"
8983 "eor r3, r7, r4, lsl #8\n\t"
8984 "eor r3, r3, r5, lsl #16\n\t"
8985 "eor r3, r3, r6, lsl #24\n\t"
8986 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
8987 "eor r4, r4, r3\n\t"
8988 "ldm lr!, {r3}\n\t"
8989 "eor r4, r4, r3\n\t"
8990 "eor r5, r5, r4\n\t"
8991 "eor r6, r6, r5\n\t"
8992 "eor r7, r7, r6\n\t"
8993 "add %[ks], %[ks], #16\n\t"
8994 "stm %[ks], {r4, r5, r6, r7}\n\t"
8995 "sub %[ks], %[ks], #16\n\t"
8996 "mov r3, r7\n\t"
8997#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8998#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
8999 "lsl r4, r3, #16\n\t"
9000 "lsr r4, r4, #24\n\t"
9001#else
9002 "uxtb r4, r3, ror #8\n\t"
9003#endif
9004#else
9005 "ubfx r4, r3, #8, #8\n\t"
9006#endif
9007#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9008#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9009 "lsl r5, r3, #8\n\t"
9010 "lsr r5, r5, #24\n\t"
9011#else
9012 "uxtb r5, r3, ror #16\n\t"
9013#endif
9014#else
9015 "ubfx r5, r3, #16, #8\n\t"
9016#endif
9017 "lsr r6, r3, #24\n\t"
9018#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9019#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9020 "lsl r3, r3, #24\n\t"
9021 "lsr r3, r3, #24\n\t"
9022#else
9023 "uxtb r3, r3\n\t"
9024#endif
9025#else
9026 "ubfx r3, r3, #0, #8\n\t"
9027#endif
9028 "ldrb r4, [r8, r4, lsl #2]\n\t"
9029 "ldrb r6, [r8, r6, lsl #2]\n\t"
9030 "ldrb r5, [r8, r5, lsl #2]\n\t"
9031 "ldrb r3, [r8, r3, lsl #2]\n\t"
9032 "eor r3, r3, r4, lsl #8\n\t"
9033 "eor r3, r3, r5, lsl #16\n\t"
9034 "eor r3, r3, r6, lsl #24\n\t"
9035 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
9036 "eor r4, r4, r3\n\t"
9037 "eor r5, r5, r4\n\t"
9038 "eor r6, r6, r5\n\t"
9039 "eor r7, r7, r6\n\t"
9040 "add %[ks], %[ks], #16\n\t"
9041 "stm %[ks], {r4, r5, r6, r7}\n\t"
9042 "sub %[ks], %[ks], #16\n\t"
9043 "subs r12, r12, #1\n\t"
9044 "bne L_AES_set_encrypt_key_loop_256_%=\n\t"
9045#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9046#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9047 "lsl r4, r7, #24\n\t"
9048 "lsr r4, r4, #24\n\t"
9049#else
9050 "uxtb r4, r7\n\t"
9051#endif
9052#else
9053 "ubfx r4, r7, #0, #8\n\t"
9054#endif
9055#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9056#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9057 "lsl r5, r7, #16\n\t"
9058 "lsr r5, r5, #24\n\t"
9059#else
9060 "uxtb r5, r7, ror #8\n\t"
9061#endif
9062#else
9063 "ubfx r5, r7, #8, #8\n\t"
9064#endif
9065#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9066#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9067 "lsl r6, r7, #8\n\t"
9068 "lsr r6, r6, #24\n\t"
9069#else
9070 "uxtb r6, r7, ror #16\n\t"
9071#endif
9072#else
9073 "ubfx r6, r7, #16, #8\n\t"
9074#endif
9075 "lsr r7, r7, #24\n\t"
9076 "ldrb r4, [r8, r4, lsl #2]\n\t"
9077 "ldrb r5, [r8, r5, lsl #2]\n\t"
9078 "ldrb r6, [r8, r6, lsl #2]\n\t"
9079 "ldrb r7, [r8, r7, lsl #2]\n\t"
9080 "eor r3, r7, r4, lsl #8\n\t"
9081 "eor r3, r3, r5, lsl #16\n\t"
9082 "eor r3, r3, r6, lsl #24\n\t"
9083 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
9084 "eor r4, r4, r3\n\t"
9085 "ldm lr!, {r3}\n\t"
9086 "eor r4, r4, r3\n\t"
9087 "eor r5, r5, r4\n\t"
9088 "eor r6, r6, r5\n\t"
9089 "eor r7, r7, r6\n\t"
9090 "add %[ks], %[ks], #16\n\t"
9091 "stm %[ks], {r4, r5, r6, r7}\n\t"
9092 "sub %[ks], %[ks], #16\n\t"
9093 "b L_AES_set_encrypt_key_end_%=\n\t"
9094 "\n"
9095 "L_AES_set_encrypt_key_start_192_%=:\n\t"
9096 "ldr r4, [%[key]]\n\t"
9097 "ldr r5, [%[key], #4]\n\t"
9098 "ldr r6, [%[key], #8]\n\t"
9099 "ldr r7, [%[key], #12]\n\t"
9100 "ldr %[len], [%[key], #20]\n\t"
9101 "ldr %[key], [%[key], #16]\n\t"
9102#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9103 /* REV r4, r4 */
9104 "eor r3, r4, r4, ror #16\n\t"
9105 "bic r3, r3, #0xff0000\n\t"
9106 "ror r4, r4, #8\n\t"
9107 "eor r4, r4, r3, lsr #8\n\t"
9108 /* REV r5, r5 */
9109 "eor r3, r5, r5, ror #16\n\t"
9110 "bic r3, r3, #0xff0000\n\t"
9111 "ror r5, r5, #8\n\t"
9112 "eor r5, r5, r3, lsr #8\n\t"
9113 /* REV r6, r6 */
9114 "eor r3, r6, r6, ror #16\n\t"
9115 "bic r3, r3, #0xff0000\n\t"
9116 "ror r6, r6, #8\n\t"
9117 "eor r6, r6, r3, lsr #8\n\t"
9118 /* REV r7, r7 */
9119 "eor r3, r7, r7, ror #16\n\t"
9120 "bic r3, r3, #0xff0000\n\t"
9121 "ror r7, r7, #8\n\t"
9122 "eor r7, r7, r3, lsr #8\n\t"
9123 /* REV r0, r0 */
9124 "eor r3, %[key], %[key], ror #16\n\t"
9125 "bic r3, r3, #0xff0000\n\t"
9126 "ror %[key], %[key], #8\n\t"
9127 "eor %[key], %[key], r3, lsr #8\n\t"
9128 /* REV r1, r1 */
9129 "eor r3, %[len], %[len], ror #16\n\t"
9130 "bic r3, r3, #0xff0000\n\t"
9131 "ror %[len], %[len], #8\n\t"
9132 "eor %[len], %[len], r3, lsr #8\n\t"
9133#else
9134 "rev r4, r4\n\t"
9135 "rev r5, r5\n\t"
9136 "rev r6, r6\n\t"
9137 "rev r7, r7\n\t"
9138 "rev %[key], %[key]\n\t"
9139 "rev %[len], %[len]\n\t"
9140#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
9141 "stm %[ks], {r4, r5, r6, r7}\n\t"
9142#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9143 "str %[key], [%[ks], #16]\n\t"
9144 "str %[len], [%[ks], #20]\n\t"
9145#else
9146 "strd %[key], %[len], [%[ks], #16]\n\t"
9147#endif
9148 "mov r7, %[len]\n\t"
9149 "mov r12, #7\n\t"
9150 "\n"
9151 "L_AES_set_encrypt_key_loop_192_%=:\n\t"
9152#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9153#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9154 "lsl r0, r7, #24\n\t"
9155 "lsr r0, r0, #24\n\t"
9156#else
9157 "uxtb r0, r7\n\t"
9158#endif
9159#else
9160 "ubfx r0, r7, #0, #8\n\t"
9161#endif
9162#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9164 "lsl r1, r7, #16\n\t"
9165 "lsr r1, r1, #24\n\t"
9166#else
9167 "uxtb r1, r7, ror #8\n\t"
9168#endif
9169#else
9170 "ubfx r1, r7, #8, #8\n\t"
9171#endif
9172#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9173#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9174 "lsl r4, r7, #8\n\t"
9175 "lsr r4, r4, #24\n\t"
9176#else
9177 "uxtb r4, r7, ror #16\n\t"
9178#endif
9179#else
9180 "ubfx r4, r7, #16, #8\n\t"
9181#endif
9182 "lsr r7, r7, #24\n\t"
9183 "ldrb r0, [r8, r0, lsl #2]\n\t"
9184 "ldrb r1, [r8, r1, lsl #2]\n\t"
9185 "ldrb r4, [r8, r4, lsl #2]\n\t"
9186 "ldrb r7, [r8, r7, lsl #2]\n\t"
9187 "eor r3, r7, r0, lsl #8\n\t"
9188 "eor r3, r3, r1, lsl #16\n\t"
9189 "eor r3, r3, r4, lsl #24\n\t"
9190 "ldm %[ks]!, {r0, r1, r4, r5, r6, r7}\n\t"
9191 "eor r0, r0, r3\n\t"
9192 "ldm lr!, {r3}\n\t"
9193 "eor r0, r0, r3\n\t"
9194 "eor r1, r1, r0\n\t"
9195 "eor r4, r4, r1\n\t"
9196 "eor r5, r5, r4\n\t"
9197 "eor r6, r6, r5\n\t"
9198 "eor r7, r7, r6\n\t"
9199 "stm %[ks], {r0, r1, r4, r5, r6, r7}\n\t"
9200 "subs r12, r12, #1\n\t"
9201 "bne L_AES_set_encrypt_key_loop_192_%=\n\t"
9202#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9203#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9204 "lsl r0, r7, #24\n\t"
9205 "lsr r0, r0, #24\n\t"
9206#else
9207 "uxtb r0, r7\n\t"
9208#endif
9209#else
9210 "ubfx r0, r7, #0, #8\n\t"
9211#endif
9212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9213#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9214 "lsl r1, r7, #16\n\t"
9215 "lsr r1, r1, #24\n\t"
9216#else
9217 "uxtb r1, r7, ror #8\n\t"
9218#endif
9219#else
9220 "ubfx r1, r7, #8, #8\n\t"
9221#endif
9222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9223#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9224 "lsl r4, r7, #8\n\t"
9225 "lsr r4, r4, #24\n\t"
9226#else
9227 "uxtb r4, r7, ror #16\n\t"
9228#endif
9229#else
9230 "ubfx r4, r7, #16, #8\n\t"
9231#endif
9232 "lsr r7, r7, #24\n\t"
9233 "ldrb r0, [r8, r0, lsl #2]\n\t"
9234 "ldrb r1, [r8, r1, lsl #2]\n\t"
9235 "ldrb r4, [r8, r4, lsl #2]\n\t"
9236 "ldrb r7, [r8, r7, lsl #2]\n\t"
9237 "eor r3, r7, r0, lsl #8\n\t"
9238 "eor r3, r3, r1, lsl #16\n\t"
9239 "eor r3, r3, r4, lsl #24\n\t"
9240 "ldm %[ks]!, {r0, r1, r4, r5, r6, r7}\n\t"
9241 "eor r0, r0, r3\n\t"
9242 "ldm lr!, {r3}\n\t"
9243 "eor r0, r0, r3\n\t"
9244 "eor r1, r1, r0\n\t"
9245 "eor r4, r4, r1\n\t"
9246 "eor r5, r5, r4\n\t"
9247 "stm %[ks], {r0, r1, r4, r5}\n\t"
9248 "b L_AES_set_encrypt_key_end_%=\n\t"
9249 "\n"
9250 "L_AES_set_encrypt_key_start_128_%=:\n\t"
9251 "ldr r4, [%[key]]\n\t"
9252 "ldr r5, [%[key], #4]\n\t"
9253 "ldr r6, [%[key], #8]\n\t"
9254 "ldr r7, [%[key], #12]\n\t"
9255#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9256 /* REV r4, r4 */
9257 "eor r3, r4, r4, ror #16\n\t"
9258 "bic r3, r3, #0xff0000\n\t"
9259 "ror r4, r4, #8\n\t"
9260 "eor r4, r4, r3, lsr #8\n\t"
9261 /* REV r5, r5 */
9262 "eor r3, r5, r5, ror #16\n\t"
9263 "bic r3, r3, #0xff0000\n\t"
9264 "ror r5, r5, #8\n\t"
9265 "eor r5, r5, r3, lsr #8\n\t"
9266 /* REV r6, r6 */
9267 "eor r3, r6, r6, ror #16\n\t"
9268 "bic r3, r3, #0xff0000\n\t"
9269 "ror r6, r6, #8\n\t"
9270 "eor r6, r6, r3, lsr #8\n\t"
9271 /* REV r7, r7 */
9272 "eor r3, r7, r7, ror #16\n\t"
9273 "bic r3, r3, #0xff0000\n\t"
9274 "ror r7, r7, #8\n\t"
9275 "eor r7, r7, r3, lsr #8\n\t"
9276#else
9277 "rev r4, r4\n\t"
9278 "rev r5, r5\n\t"
9279 "rev r6, r6\n\t"
9280 "rev r7, r7\n\t"
9281#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
9282 "stm %[ks], {r4, r5, r6, r7}\n\t"
9283 "mov r12, #10\n\t"
9284 "\n"
9285 "L_AES_set_encrypt_key_loop_128_%=:\n\t"
9286#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9287#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9288 "lsl r4, r7, #24\n\t"
9289 "lsr r4, r4, #24\n\t"
9290#else
9291 "uxtb r4, r7\n\t"
9292#endif
9293#else
9294 "ubfx r4, r7, #0, #8\n\t"
9295#endif
9296#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9297#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9298 "lsl r5, r7, #16\n\t"
9299 "lsr r5, r5, #24\n\t"
9300#else
9301 "uxtb r5, r7, ror #8\n\t"
9302#endif
9303#else
9304 "ubfx r5, r7, #8, #8\n\t"
9305#endif
9306#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9307#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9308 "lsl r6, r7, #8\n\t"
9309 "lsr r6, r6, #24\n\t"
9310#else
9311 "uxtb r6, r7, ror #16\n\t"
9312#endif
9313#else
9314 "ubfx r6, r7, #16, #8\n\t"
9315#endif
9316 "lsr r7, r7, #24\n\t"
9317 "ldrb r4, [r8, r4, lsl #2]\n\t"
9318 "ldrb r5, [r8, r5, lsl #2]\n\t"
9319 "ldrb r6, [r8, r6, lsl #2]\n\t"
9320 "ldrb r7, [r8, r7, lsl #2]\n\t"
9321 "eor r3, r7, r4, lsl #8\n\t"
9322 "eor r3, r3, r5, lsl #16\n\t"
9323 "eor r3, r3, r6, lsl #24\n\t"
9324 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
9325 "eor r4, r4, r3\n\t"
9326 "ldm lr!, {r3}\n\t"
9327 "eor r4, r4, r3\n\t"
9328 "eor r5, r5, r4\n\t"
9329 "eor r6, r6, r5\n\t"
9330 "eor r7, r7, r6\n\t"
9331 "stm %[ks], {r4, r5, r6, r7}\n\t"
9332 "subs r12, r12, #1\n\t"
9333 "bne L_AES_set_encrypt_key_loop_128_%=\n\t"
9334 "\n"
9335 "L_AES_set_encrypt_key_end_%=:\n\t"
9336 "pop {%[L_AES_ARM32_rcon]}\n\t"
9337#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
9338 : [key] "+r" (key), [len] "+r" (len), [ks] "+r" (ks),
9339 [L_AES_ARM32_te] "+r" (L_AES_ARM32_te_c),
9340 [L_AES_ARM32_rcon] "+r" (L_AES_ARM32_rcon_c)
9341 :
9342#else
9343 :
9344 : [key] "r" (key), [len] "r" (len), [ks] "r" (ks),
9345 [L_AES_ARM32_te] "r" (L_AES_ARM32_te_c),
9346 [L_AES_ARM32_rcon] "r" (L_AES_ARM32_rcon_c)
9347#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
9348 : "memory", "cc", "lr", "r4", "r5", "r6", "r7", "r8"
9349 );
9350}
9351
9352#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
9353void AES_encrypt_block(const word32* te_p, int nr_p, int len_p,
9354 const word32* ks_p);
9355#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
9356WC_OMIT_FRAME_POINTER void AES_encrypt_block(const word32* te_p, int nr_p,
9357 int len_p, const word32* ks_p)
9358#else
9359WC_OMIT_FRAME_POINTER void AES_encrypt_block(const word32* te, int nr, int len,
9360 const word32* ks)
9361#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
9362{
9363#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
9364 register const word32* te __asm__ ("r0") = (const word32*)te_p;
9365 register int nr __asm__ ("r1") = (int)nr_p;
9366 register int len __asm__ ("r2") = (int)len_p;
9367 register const word32* ks __asm__ ("r3") = (const word32*)ks_p;
9368#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
9369
9370 __asm__ __volatile__ (
9371 "\n"
9372 "L_AES_encrypt_block_nr_%=:\n\t"
9373#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9374#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9375 "lsl r8, r5, #8\n\t"
9376 "lsr r8, r8, #24\n\t"
9377#else
9378 "uxtb r8, r5, ror #16\n\t"
9379#endif
9380#else
9381 "ubfx r8, r5, #16, #8\n\t"
9382#endif
9383 "lsr r11, r4, #24\n\t"
9384#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9385#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9386 "lsl lr, r6, #16\n\t"
9387 "lsr lr, lr, #24\n\t"
9388#else
9389 "uxtb lr, r6, ror #8\n\t"
9390#endif
9391#else
9392 "ubfx lr, r6, #8, #8\n\t"
9393#endif
9394#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9395#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9396 "lsl r2, r7, #24\n\t"
9397 "lsr r2, r2, #24\n\t"
9398#else
9399 "uxtb r2, r7\n\t"
9400#endif
9401#else
9402 "ubfx r2, r7, #0, #8\n\t"
9403#endif
9404 "ldr r8, [%[te], r8, lsl #2]\n\t"
9405 "ldr r11, [%[te], r11, lsl #2]\n\t"
9406 "ldr lr, [%[te], lr, lsl #2]\n\t"
9407 "ldr r2, [%[te], r2, lsl #2]\n\t"
9408#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9409#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9410 "lsl r9, r6, #8\n\t"
9411 "lsr r9, r9, #24\n\t"
9412#else
9413 "uxtb r9, r6, ror #16\n\t"
9414#endif
9415#else
9416 "ubfx r9, r6, #16, #8\n\t"
9417#endif
9418 "eor r8, r8, r11, ror #24\n\t"
9419 "lsr r11, r5, #24\n\t"
9420 "eor r8, r8, lr, ror #8\n\t"
9421#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9422#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9423 "lsl lr, r7, #16\n\t"
9424 "lsr lr, lr, #24\n\t"
9425#else
9426 "uxtb lr, r7, ror #8\n\t"
9427#endif
9428#else
9429 "ubfx lr, r7, #8, #8\n\t"
9430#endif
9431 "eor r8, r8, r2, ror #16\n\t"
9432#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9433#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9434 "lsl r2, r4, #24\n\t"
9435 "lsr r2, r2, #24\n\t"
9436#else
9437 "uxtb r2, r4\n\t"
9438#endif
9439#else
9440 "ubfx r2, r4, #0, #8\n\t"
9441#endif
9442 "ldr r9, [%[te], r9, lsl #2]\n\t"
9443 "ldr r11, [%[te], r11, lsl #2]\n\t"
9444 "ldr lr, [%[te], lr, lsl #2]\n\t"
9445 "ldr r2, [%[te], r2, lsl #2]\n\t"
9446#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9447#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9448 "lsl r10, r7, #8\n\t"
9449 "lsr r10, r10, #24\n\t"
9450#else
9451 "uxtb r10, r7, ror #16\n\t"
9452#endif
9453#else
9454 "ubfx r10, r7, #16, #8\n\t"
9455#endif
9456 "eor r9, r9, r11, ror #24\n\t"
9457 "lsr r11, r6, #24\n\t"
9458 "eor r9, r9, lr, ror #8\n\t"
9459#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9460#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9461 "lsl lr, r4, #16\n\t"
9462 "lsr lr, lr, #24\n\t"
9463#else
9464 "uxtb lr, r4, ror #8\n\t"
9465#endif
9466#else
9467 "ubfx lr, r4, #8, #8\n\t"
9468#endif
9469 "eor r9, r9, r2, ror #16\n\t"
9470#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9471#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9472 "lsl r2, r5, #24\n\t"
9473 "lsr r2, r2, #24\n\t"
9474#else
9475 "uxtb r2, r5\n\t"
9476#endif
9477#else
9478 "ubfx r2, r5, #0, #8\n\t"
9479#endif
9480 "ldr r10, [%[te], r10, lsl #2]\n\t"
9481 "ldr r11, [%[te], r11, lsl #2]\n\t"
9482 "ldr lr, [%[te], lr, lsl #2]\n\t"
9483 "ldr r2, [%[te], r2, lsl #2]\n\t"
9484#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9485#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9486 "lsl r6, r6, #24\n\t"
9487 "lsr r6, r6, #24\n\t"
9488#else
9489 "uxtb r6, r6\n\t"
9490#endif
9491#else
9492 "ubfx r6, r6, #0, #8\n\t"
9493#endif
9494 "eor r10, r10, r11, ror #24\n\t"
9495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9496#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9497 "lsl r11, r4, #8\n\t"
9498 "lsr r11, r11, #24\n\t"
9499#else
9500 "uxtb r11, r4, ror #16\n\t"
9501#endif
9502#else
9503 "ubfx r11, r4, #16, #8\n\t"
9504#endif
9505 "eor r10, r10, lr, ror #8\n\t"
9506 "lsr lr, r7, #24\n\t"
9507 "eor r10, r10, r2, ror #16\n\t"
9508#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9509#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9510 "lsl r2, r5, #16\n\t"
9511 "lsr r2, r2, #24\n\t"
9512#else
9513 "uxtb r2, r5, ror #8\n\t"
9514#endif
9515#else
9516 "ubfx r2, r5, #8, #8\n\t"
9517#endif
9518 "ldr r6, [%[te], r6, lsl #2]\n\t"
9519 "ldr lr, [%[te], lr, lsl #2]\n\t"
9520 "ldr r11, [%[te], r11, lsl #2]\n\t"
9521 "ldr r2, [%[te], r2, lsl #2]\n\t"
9522 "eor lr, lr, r6, ror #24\n\t"
9523 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
9524 "eor r11, r11, lr, ror #24\n\t"
9525 "eor r11, r11, r2, ror #8\n\t"
9526 /* XOR in Key Schedule */
9527 "eor r8, r8, r4\n\t"
9528 "eor r9, r9, r5\n\t"
9529 "eor r10, r10, r6\n\t"
9530 "eor r11, r11, r7\n\t"
9531#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9532#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9533 "lsl r4, r9, #8\n\t"
9534 "lsr r4, r4, #24\n\t"
9535#else
9536 "uxtb r4, r9, ror #16\n\t"
9537#endif
9538#else
9539 "ubfx r4, r9, #16, #8\n\t"
9540#endif
9541 "lsr r7, r8, #24\n\t"
9542#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9543#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9544 "lsl lr, r10, #16\n\t"
9545 "lsr lr, lr, #24\n\t"
9546#else
9547 "uxtb lr, r10, ror #8\n\t"
9548#endif
9549#else
9550 "ubfx lr, r10, #8, #8\n\t"
9551#endif
9552#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9553#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9554 "lsl r2, r11, #24\n\t"
9555 "lsr r2, r2, #24\n\t"
9556#else
9557 "uxtb r2, r11\n\t"
9558#endif
9559#else
9560 "ubfx r2, r11, #0, #8\n\t"
9561#endif
9562 "ldr r4, [%[te], r4, lsl #2]\n\t"
9563 "ldr r7, [%[te], r7, lsl #2]\n\t"
9564 "ldr lr, [%[te], lr, lsl #2]\n\t"
9565 "ldr r2, [%[te], r2, lsl #2]\n\t"
9566#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9567#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9568 "lsl r5, r10, #8\n\t"
9569 "lsr r5, r5, #24\n\t"
9570#else
9571 "uxtb r5, r10, ror #16\n\t"
9572#endif
9573#else
9574 "ubfx r5, r10, #16, #8\n\t"
9575#endif
9576 "eor r4, r4, r7, ror #24\n\t"
9577 "lsr r7, r9, #24\n\t"
9578 "eor r4, r4, lr, ror #8\n\t"
9579#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9580#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9581 "lsl lr, r11, #16\n\t"
9582 "lsr lr, lr, #24\n\t"
9583#else
9584 "uxtb lr, r11, ror #8\n\t"
9585#endif
9586#else
9587 "ubfx lr, r11, #8, #8\n\t"
9588#endif
9589 "eor r4, r4, r2, ror #16\n\t"
9590#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9591#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9592 "lsl r2, r8, #24\n\t"
9593 "lsr r2, r2, #24\n\t"
9594#else
9595 "uxtb r2, r8\n\t"
9596#endif
9597#else
9598 "ubfx r2, r8, #0, #8\n\t"
9599#endif
9600 "ldr r5, [%[te], r5, lsl #2]\n\t"
9601 "ldr r7, [%[te], r7, lsl #2]\n\t"
9602 "ldr lr, [%[te], lr, lsl #2]\n\t"
9603 "ldr r2, [%[te], r2, lsl #2]\n\t"
9604#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9605#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9606 "lsl r6, r11, #8\n\t"
9607 "lsr r6, r6, #24\n\t"
9608#else
9609 "uxtb r6, r11, ror #16\n\t"
9610#endif
9611#else
9612 "ubfx r6, r11, #16, #8\n\t"
9613#endif
9614 "eor r5, r5, r7, ror #24\n\t"
9615 "lsr r7, r10, #24\n\t"
9616 "eor r5, r5, lr, ror #8\n\t"
9617#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9618#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9619 "lsl lr, r8, #16\n\t"
9620 "lsr lr, lr, #24\n\t"
9621#else
9622 "uxtb lr, r8, ror #8\n\t"
9623#endif
9624#else
9625 "ubfx lr, r8, #8, #8\n\t"
9626#endif
9627 "eor r5, r5, r2, ror #16\n\t"
9628#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9629#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9630 "lsl r2, r9, #24\n\t"
9631 "lsr r2, r2, #24\n\t"
9632#else
9633 "uxtb r2, r9\n\t"
9634#endif
9635#else
9636 "ubfx r2, r9, #0, #8\n\t"
9637#endif
9638 "ldr r6, [%[te], r6, lsl #2]\n\t"
9639 "ldr r7, [%[te], r7, lsl #2]\n\t"
9640 "ldr lr, [%[te], lr, lsl #2]\n\t"
9641 "ldr r2, [%[te], r2, lsl #2]\n\t"
9642#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9643#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9644 "lsl r10, r10, #24\n\t"
9645 "lsr r10, r10, #24\n\t"
9646#else
9647 "uxtb r10, r10\n\t"
9648#endif
9649#else
9650 "ubfx r10, r10, #0, #8\n\t"
9651#endif
9652 "eor r6, r6, r7, ror #24\n\t"
9653#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9654#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9655 "lsl r7, r8, #8\n\t"
9656 "lsr r7, r7, #24\n\t"
9657#else
9658 "uxtb r7, r8, ror #16\n\t"
9659#endif
9660#else
9661 "ubfx r7, r8, #16, #8\n\t"
9662#endif
9663 "eor r6, r6, lr, ror #8\n\t"
9664 "lsr lr, r11, #24\n\t"
9665 "eor r6, r6, r2, ror #16\n\t"
9666#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9667#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9668 "lsl r2, r9, #16\n\t"
9669 "lsr r2, r2, #24\n\t"
9670#else
9671 "uxtb r2, r9, ror #8\n\t"
9672#endif
9673#else
9674 "ubfx r2, r9, #8, #8\n\t"
9675#endif
9676 "ldr r10, [%[te], r10, lsl #2]\n\t"
9677 "ldr lr, [%[te], lr, lsl #2]\n\t"
9678 "ldr r7, [%[te], r7, lsl #2]\n\t"
9679 "ldr r2, [%[te], r2, lsl #2]\n\t"
9680 "eor lr, lr, r10, ror #24\n\t"
9681 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
9682 "eor r7, r7, lr, ror #24\n\t"
9683 "eor r7, r7, r2, ror #8\n\t"
9684 /* XOR in Key Schedule */
9685 "eor r4, r4, r8\n\t"
9686 "eor r5, r5, r9\n\t"
9687 "eor r6, r6, r10\n\t"
9688 "eor r7, r7, r11\n\t"
9689 "subs %[nr], %[nr], #1\n\t"
9690 "bne L_AES_encrypt_block_nr_%=\n\t"
9691#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9692#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9693 "lsl r8, r5, #8\n\t"
9694 "lsr r8, r8, #24\n\t"
9695#else
9696 "uxtb r8, r5, ror #16\n\t"
9697#endif
9698#else
9699 "ubfx r8, r5, #16, #8\n\t"
9700#endif
9701 "lsr r11, r4, #24\n\t"
9702#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9703#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9704 "lsl lr, r6, #16\n\t"
9705 "lsr lr, lr, #24\n\t"
9706#else
9707 "uxtb lr, r6, ror #8\n\t"
9708#endif
9709#else
9710 "ubfx lr, r6, #8, #8\n\t"
9711#endif
9712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9713#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9714 "lsl r2, r7, #24\n\t"
9715 "lsr r2, r2, #24\n\t"
9716#else
9717 "uxtb r2, r7\n\t"
9718#endif
9719#else
9720 "ubfx r2, r7, #0, #8\n\t"
9721#endif
9722 "ldr r8, [%[te], r8, lsl #2]\n\t"
9723 "ldr r11, [%[te], r11, lsl #2]\n\t"
9724 "ldr lr, [%[te], lr, lsl #2]\n\t"
9725 "ldr r2, [%[te], r2, lsl #2]\n\t"
9726#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9727#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9728 "lsl r9, r6, #8\n\t"
9729 "lsr r9, r9, #24\n\t"
9730#else
9731 "uxtb r9, r6, ror #16\n\t"
9732#endif
9733#else
9734 "ubfx r9, r6, #16, #8\n\t"
9735#endif
9736 "eor r8, r8, r11, ror #24\n\t"
9737 "lsr r11, r5, #24\n\t"
9738 "eor r8, r8, lr, ror #8\n\t"
9739#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9740#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9741 "lsl lr, r7, #16\n\t"
9742 "lsr lr, lr, #24\n\t"
9743#else
9744 "uxtb lr, r7, ror #8\n\t"
9745#endif
9746#else
9747 "ubfx lr, r7, #8, #8\n\t"
9748#endif
9749 "eor r8, r8, r2, ror #16\n\t"
9750#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9751#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9752 "lsl r2, r4, #24\n\t"
9753 "lsr r2, r2, #24\n\t"
9754#else
9755 "uxtb r2, r4\n\t"
9756#endif
9757#else
9758 "ubfx r2, r4, #0, #8\n\t"
9759#endif
9760 "ldr r9, [%[te], r9, lsl #2]\n\t"
9761 "ldr r11, [%[te], r11, lsl #2]\n\t"
9762 "ldr lr, [%[te], lr, lsl #2]\n\t"
9763 "ldr r2, [%[te], r2, lsl #2]\n\t"
9764#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9765#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9766 "lsl r10, r7, #8\n\t"
9767 "lsr r10, r10, #24\n\t"
9768#else
9769 "uxtb r10, r7, ror #16\n\t"
9770#endif
9771#else
9772 "ubfx r10, r7, #16, #8\n\t"
9773#endif
9774 "eor r9, r9, r11, ror #24\n\t"
9775 "lsr r11, r6, #24\n\t"
9776 "eor r9, r9, lr, ror #8\n\t"
9777#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9778#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9779 "lsl lr, r4, #16\n\t"
9780 "lsr lr, lr, #24\n\t"
9781#else
9782 "uxtb lr, r4, ror #8\n\t"
9783#endif
9784#else
9785 "ubfx lr, r4, #8, #8\n\t"
9786#endif
9787 "eor r9, r9, r2, ror #16\n\t"
9788#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9789#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9790 "lsl r2, r5, #24\n\t"
9791 "lsr r2, r2, #24\n\t"
9792#else
9793 "uxtb r2, r5\n\t"
9794#endif
9795#else
9796 "ubfx r2, r5, #0, #8\n\t"
9797#endif
9798 "ldr r10, [%[te], r10, lsl #2]\n\t"
9799 "ldr r11, [%[te], r11, lsl #2]\n\t"
9800 "ldr lr, [%[te], lr, lsl #2]\n\t"
9801 "ldr r2, [%[te], r2, lsl #2]\n\t"
9802#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9803#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9804 "lsl r6, r6, #24\n\t"
9805 "lsr r6, r6, #24\n\t"
9806#else
9807 "uxtb r6, r6\n\t"
9808#endif
9809#else
9810 "ubfx r6, r6, #0, #8\n\t"
9811#endif
9812 "eor r10, r10, r11, ror #24\n\t"
9813#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9814#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9815 "lsl r11, r4, #8\n\t"
9816 "lsr r11, r11, #24\n\t"
9817#else
9818 "uxtb r11, r4, ror #16\n\t"
9819#endif
9820#else
9821 "ubfx r11, r4, #16, #8\n\t"
9822#endif
9823 "eor r10, r10, lr, ror #8\n\t"
9824 "lsr lr, r7, #24\n\t"
9825 "eor r10, r10, r2, ror #16\n\t"
9826#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9827#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9828 "lsl r2, r5, #16\n\t"
9829 "lsr r2, r2, #24\n\t"
9830#else
9831 "uxtb r2, r5, ror #8\n\t"
9832#endif
9833#else
9834 "ubfx r2, r5, #8, #8\n\t"
9835#endif
9836 "ldr r6, [%[te], r6, lsl #2]\n\t"
9837 "ldr lr, [%[te], lr, lsl #2]\n\t"
9838 "ldr r11, [%[te], r11, lsl #2]\n\t"
9839 "ldr r2, [%[te], r2, lsl #2]\n\t"
9840 "eor lr, lr, r6, ror #24\n\t"
9841 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
9842 "eor r11, r11, lr, ror #24\n\t"
9843 "eor r11, r11, r2, ror #8\n\t"
9844 /* XOR in Key Schedule */
9845 "eor r8, r8, r4\n\t"
9846 "eor r9, r9, r5\n\t"
9847 "eor r10, r10, r6\n\t"
9848 "eor r11, r11, r7\n\t"
9849#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9850#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9851 "lsl r4, r11, #24\n\t"
9852 "lsr r4, r4, #24\n\t"
9853#else
9854 "uxtb r4, r11\n\t"
9855#endif
9856#else
9857 "ubfx r4, r11, #0, #8\n\t"
9858#endif
9859#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9860#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9861 "lsl r7, r10, #16\n\t"
9862 "lsr r7, r7, #24\n\t"
9863#else
9864 "uxtb r7, r10, ror #8\n\t"
9865#endif
9866#else
9867 "ubfx r7, r10, #8, #8\n\t"
9868#endif
9869#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9871 "lsl lr, r9, #8\n\t"
9872 "lsr lr, lr, #24\n\t"
9873#else
9874 "uxtb lr, r9, ror #16\n\t"
9875#endif
9876#else
9877 "ubfx lr, r9, #16, #8\n\t"
9878#endif
9879 "lsr r2, r8, #24\n\t"
9880 "ldrb r4, [%[te], r4, lsl #2]\n\t"
9881 "ldrb r7, [%[te], r7, lsl #2]\n\t"
9882 "ldrb lr, [%[te], lr, lsl #2]\n\t"
9883 "ldrb r2, [%[te], r2, lsl #2]\n\t"
9884#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9885#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9886 "lsl r5, r8, #24\n\t"
9887 "lsr r5, r5, #24\n\t"
9888#else
9889 "uxtb r5, r8\n\t"
9890#endif
9891#else
9892 "ubfx r5, r8, #0, #8\n\t"
9893#endif
9894 "eor r4, r4, r7, lsl #8\n\t"
9895#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9896#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9897 "lsl r7, r11, #16\n\t"
9898 "lsr r7, r7, #24\n\t"
9899#else
9900 "uxtb r7, r11, ror #8\n\t"
9901#endif
9902#else
9903 "ubfx r7, r11, #8, #8\n\t"
9904#endif
9905 "eor r4, r4, lr, lsl #16\n\t"
9906#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9907#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9908 "lsl lr, r10, #8\n\t"
9909 "lsr lr, lr, #24\n\t"
9910#else
9911 "uxtb lr, r10, ror #16\n\t"
9912#endif
9913#else
9914 "ubfx lr, r10, #16, #8\n\t"
9915#endif
9916 "eor r4, r4, r2, lsl #24\n\t"
9917 "lsr r2, r9, #24\n\t"
9918 "ldrb r5, [%[te], r5, lsl #2]\n\t"
9919 "ldrb r7, [%[te], r7, lsl #2]\n\t"
9920 "ldrb lr, [%[te], lr, lsl #2]\n\t"
9921 "ldrb r2, [%[te], r2, lsl #2]\n\t"
9922#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9923#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9924 "lsl r6, r9, #24\n\t"
9925 "lsr r6, r6, #24\n\t"
9926#else
9927 "uxtb r6, r9\n\t"
9928#endif
9929#else
9930 "ubfx r6, r9, #0, #8\n\t"
9931#endif
9932 "eor r5, r5, r7, lsl #8\n\t"
9933#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9934#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9935 "lsl r7, r8, #16\n\t"
9936 "lsr r7, r7, #24\n\t"
9937#else
9938 "uxtb r7, r8, ror #8\n\t"
9939#endif
9940#else
9941 "ubfx r7, r8, #8, #8\n\t"
9942#endif
9943 "eor r5, r5, lr, lsl #16\n\t"
9944#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9945#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9946 "lsl lr, r11, #8\n\t"
9947 "lsr lr, lr, #24\n\t"
9948#else
9949 "uxtb lr, r11, ror #16\n\t"
9950#endif
9951#else
9952 "ubfx lr, r11, #16, #8\n\t"
9953#endif
9954 "eor r5, r5, r2, lsl #24\n\t"
9955 "lsr r2, r10, #24\n\t"
9956 "ldrb r6, [%[te], r6, lsl #2]\n\t"
9957 "ldrb r7, [%[te], r7, lsl #2]\n\t"
9958 "ldrb lr, [%[te], lr, lsl #2]\n\t"
9959 "ldrb r2, [%[te], r2, lsl #2]\n\t"
9960 "lsr r11, r11, #24\n\t"
9961 "eor r6, r6, r7, lsl #8\n\t"
9962#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9964 "lsl r7, r10, #24\n\t"
9965 "lsr r7, r7, #24\n\t"
9966#else
9967 "uxtb r7, r10\n\t"
9968#endif
9969#else
9970 "ubfx r7, r10, #0, #8\n\t"
9971#endif
9972 "eor r6, r6, lr, lsl #16\n\t"
9973#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9974#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9975 "lsl lr, r9, #16\n\t"
9976 "lsr lr, lr, #24\n\t"
9977#else
9978 "uxtb lr, r9, ror #8\n\t"
9979#endif
9980#else
9981 "ubfx lr, r9, #8, #8\n\t"
9982#endif
9983 "eor r6, r6, r2, lsl #24\n\t"
9984#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
9985#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
9986 "lsl r2, r8, #8\n\t"
9987 "lsr r2, r2, #24\n\t"
9988#else
9989 "uxtb r2, r8, ror #16\n\t"
9990#endif
9991#else
9992 "ubfx r2, r8, #16, #8\n\t"
9993#endif
9994 "ldrb r11, [%[te], r11, lsl #2]\n\t"
9995 "ldrb r7, [%[te], r7, lsl #2]\n\t"
9996 "ldrb lr, [%[te], lr, lsl #2]\n\t"
9997 "ldrb r2, [%[te], r2, lsl #2]\n\t"
9998 "eor lr, lr, r11, lsl #16\n\t"
9999 "ldm %[ks], {r8, r9, r10, r11}\n\t"
10000 "eor r7, r7, lr, lsl #8\n\t"
10001 "eor r7, r7, r2, lsl #16\n\t"
10002 /* XOR in Key Schedule */
10003 "eor r4, r4, r8\n\t"
10004 "eor r5, r5, r9\n\t"
10005 "eor r6, r6, r10\n\t"
10006 "eor r7, r7, r11\n\t"
10007#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
10008 : [te] "+r" (te), [nr] "+r" (nr), [len] "+r" (len), [ks] "+r" (ks)
10009 :
10010#else
10011 :
10012 : [te] "r" (te), [nr] "r" (nr), [len] "r" (len), [ks] "r" (ks)
10013#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
10014 : "memory", "cc", "lr"
10015 );
10016}
10017
10018#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
10019#if defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \
10020 defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
10021 defined(HAVE_AES_ECB)
10022static const word32* L_AES_ARM32_te_ecb = L_AES_ARM32_te_data;
10023void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p,
10024 unsigned long len_p, const unsigned char* ks_p, int nr_p);
10025#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
10026WC_OMIT_FRAME_POINTER void AES_ECB_encrypt(const unsigned char* in_p,
10027 unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
10028 int nr_p)
10029#else
10030WC_OMIT_FRAME_POINTER void AES_ECB_encrypt(const unsigned char* in,
10031 unsigned char* out, unsigned long len, const unsigned char* ks, int nr)
10032#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
10033{
10034#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
10035 register const unsigned char* in __asm__ ("r0") =
10036 (const unsigned char*)in_p;
10037 register unsigned char* out __asm__ ("r1") = (unsigned char*)out_p;
10038 register unsigned long len __asm__ ("r2") = (unsigned long)len_p;
10039 register const unsigned char* ks __asm__ ("r3") =
10040 (const unsigned char*)ks_p;
10041 register int nr __asm__ ("r12") = (int)nr_p;
10042 register word32* L_AES_ARM32_te_ecb_c __asm__ ("lr") =
10043 (word32*)L_AES_ARM32_te_ecb;
10044#else
10045 register word32* L_AES_ARM32_te_ecb_c = (word32*)L_AES_ARM32_te_ecb;
10046#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
10047
10048 __asm__ __volatile__ (
10049 "push {%[nr], %[L_AES_ARM32_te_ecb]}\n\t"
10050 "mov lr, %[in]\n\t"
10051 "ldr r0, [sp, #4]\n\t"
10052 "ldr r12, [sp]\n\t"
10053 "push {%[ks]}\n\t"
10054 "cmp r12, #10\n\t"
10055 "beq L_AES_ECB_encrypt_start_block_128_%=\n\t"
10056 "cmp r12, #12\n\t"
10057 "beq L_AES_ECB_encrypt_start_block_192_%=\n\t"
10058 "\n"
10059 "L_AES_ECB_encrypt_loop_block_256_%=:\n\t"
10060 "ldr r4, [lr]\n\t"
10061 "ldr r5, [lr, #4]\n\t"
10062 "ldr r6, [lr, #8]\n\t"
10063 "ldr r7, [lr, #12]\n\t"
10064#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10065 "eor r8, r4, r4, ror #16\n\t"
10066 "eor r9, r5, r5, ror #16\n\t"
10067 "eor r10, r6, r6, ror #16\n\t"
10068 "eor r11, r7, r7, ror #16\n\t"
10069 "bic r8, r8, #0xff0000\n\t"
10070 "bic r9, r9, #0xff0000\n\t"
10071 "bic r10, r10, #0xff0000\n\t"
10072 "bic r11, r11, #0xff0000\n\t"
10073 "ror r4, r4, #8\n\t"
10074 "ror r5, r5, #8\n\t"
10075 "ror r6, r6, #8\n\t"
10076 "ror r7, r7, #8\n\t"
10077 "eor r4, r4, r8, lsr #8\n\t"
10078 "eor r5, r5, r9, lsr #8\n\t"
10079 "eor r6, r6, r10, lsr #8\n\t"
10080 "eor r7, r7, r11, lsr #8\n\t"
10081#else
10082 "rev r4, r4\n\t"
10083 "rev r5, r5\n\t"
10084 "rev r6, r6\n\t"
10085 "rev r7, r7\n\t"
10086#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
10087 "push {r1, %[len], lr}\n\t"
10088 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
10089 /* Round: 0 - XOR in key schedule */
10090 "eor r4, r4, r8\n\t"
10091 "eor r5, r5, r9\n\t"
10092 "eor r6, r6, r10\n\t"
10093 "eor r7, r7, r11\n\t"
10094 "mov r1, #6\n\t"
10095#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
10096 "bl AES_encrypt_block\n\t"
10097#else
10098 "\n"
10099 "L_AES_ECB_encrypt_block_nr_256_%=:\n\t"
10100#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10101#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10102 "lsl r8, r5, #8\n\t"
10103 "lsr r8, r8, #24\n\t"
10104#else
10105 "uxtb r8, r5, ror #16\n\t"
10106#endif
10107#else
10108 "ubfx r8, r5, #16, #8\n\t"
10109#endif
10110 "lsr r11, r4, #24\n\t"
10111#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10112#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10113 "lsl lr, r6, #16\n\t"
10114 "lsr lr, lr, #24\n\t"
10115#else
10116 "uxtb lr, r6, ror #8\n\t"
10117#endif
10118#else
10119 "ubfx lr, r6, #8, #8\n\t"
10120#endif
10121#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10122#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10123 "lsl r2, r7, #24\n\t"
10124 "lsr r2, r2, #24\n\t"
10125#else
10126 "uxtb r2, r7\n\t"
10127#endif
10128#else
10129 "ubfx r2, r7, #0, #8\n\t"
10130#endif
10131 "ldr r8, [r0, r8, lsl #2]\n\t"
10132 "ldr r11, [r0, r11, lsl #2]\n\t"
10133 "ldr lr, [r0, lr, lsl #2]\n\t"
10134 "ldr r2, [r0, r2, lsl #2]\n\t"
10135#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10136#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10137 "lsl r9, r6, #8\n\t"
10138 "lsr r9, r9, #24\n\t"
10139#else
10140 "uxtb r9, r6, ror #16\n\t"
10141#endif
10142#else
10143 "ubfx r9, r6, #16, #8\n\t"
10144#endif
10145 "eor r8, r8, r11, ror #24\n\t"
10146 "lsr r11, r5, #24\n\t"
10147 "eor r8, r8, lr, ror #8\n\t"
10148#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10149#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10150 "lsl lr, r7, #16\n\t"
10151 "lsr lr, lr, #24\n\t"
10152#else
10153 "uxtb lr, r7, ror #8\n\t"
10154#endif
10155#else
10156 "ubfx lr, r7, #8, #8\n\t"
10157#endif
10158 "eor r8, r8, r2, ror #16\n\t"
10159#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10160#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10161 "lsl r2, r4, #24\n\t"
10162 "lsr r2, r2, #24\n\t"
10163#else
10164 "uxtb r2, r4\n\t"
10165#endif
10166#else
10167 "ubfx r2, r4, #0, #8\n\t"
10168#endif
10169 "ldr r9, [r0, r9, lsl #2]\n\t"
10170 "ldr r11, [r0, r11, lsl #2]\n\t"
10171 "ldr lr, [r0, lr, lsl #2]\n\t"
10172 "ldr r2, [r0, r2, lsl #2]\n\t"
10173#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10174#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10175 "lsl r10, r7, #8\n\t"
10176 "lsr r10, r10, #24\n\t"
10177#else
10178 "uxtb r10, r7, ror #16\n\t"
10179#endif
10180#else
10181 "ubfx r10, r7, #16, #8\n\t"
10182#endif
10183 "eor r9, r9, r11, ror #24\n\t"
10184 "lsr r11, r6, #24\n\t"
10185 "eor r9, r9, lr, ror #8\n\t"
10186#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10188 "lsl lr, r4, #16\n\t"
10189 "lsr lr, lr, #24\n\t"
10190#else
10191 "uxtb lr, r4, ror #8\n\t"
10192#endif
10193#else
10194 "ubfx lr, r4, #8, #8\n\t"
10195#endif
10196 "eor r9, r9, r2, ror #16\n\t"
10197#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10198#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10199 "lsl r2, r5, #24\n\t"
10200 "lsr r2, r2, #24\n\t"
10201#else
10202 "uxtb r2, r5\n\t"
10203#endif
10204#else
10205 "ubfx r2, r5, #0, #8\n\t"
10206#endif
10207 "ldr r10, [r0, r10, lsl #2]\n\t"
10208 "ldr r11, [r0, r11, lsl #2]\n\t"
10209 "ldr lr, [r0, lr, lsl #2]\n\t"
10210 "ldr r2, [r0, r2, lsl #2]\n\t"
10211#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10213 "lsl r6, r6, #24\n\t"
10214 "lsr r6, r6, #24\n\t"
10215#else
10216 "uxtb r6, r6\n\t"
10217#endif
10218#else
10219 "ubfx r6, r6, #0, #8\n\t"
10220#endif
10221 "eor r10, r10, r11, ror #24\n\t"
10222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10223#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10224 "lsl r11, r4, #8\n\t"
10225 "lsr r11, r11, #24\n\t"
10226#else
10227 "uxtb r11, r4, ror #16\n\t"
10228#endif
10229#else
10230 "ubfx r11, r4, #16, #8\n\t"
10231#endif
10232 "eor r10, r10, lr, ror #8\n\t"
10233 "lsr lr, r7, #24\n\t"
10234 "eor r10, r10, r2, ror #16\n\t"
10235#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10236#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10237 "lsl r2, r5, #16\n\t"
10238 "lsr r2, r2, #24\n\t"
10239#else
10240 "uxtb r2, r5, ror #8\n\t"
10241#endif
10242#else
10243 "ubfx r2, r5, #8, #8\n\t"
10244#endif
10245 "ldr r6, [r0, r6, lsl #2]\n\t"
10246 "ldr lr, [r0, lr, lsl #2]\n\t"
10247 "ldr r11, [r0, r11, lsl #2]\n\t"
10248 "ldr r2, [r0, r2, lsl #2]\n\t"
10249 "eor lr, lr, r6, ror #24\n\t"
10250 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
10251 "eor r11, r11, lr, ror #24\n\t"
10252 "eor r11, r11, r2, ror #8\n\t"
10253 /* XOR in Key Schedule */
10254 "eor r8, r8, r4\n\t"
10255 "eor r9, r9, r5\n\t"
10256 "eor r10, r10, r6\n\t"
10257 "eor r11, r11, r7\n\t"
10258#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10259#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10260 "lsl r4, r9, #8\n\t"
10261 "lsr r4, r4, #24\n\t"
10262#else
10263 "uxtb r4, r9, ror #16\n\t"
10264#endif
10265#else
10266 "ubfx r4, r9, #16, #8\n\t"
10267#endif
10268 "lsr r7, r8, #24\n\t"
10269#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10270#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10271 "lsl lr, r10, #16\n\t"
10272 "lsr lr, lr, #24\n\t"
10273#else
10274 "uxtb lr, r10, ror #8\n\t"
10275#endif
10276#else
10277 "ubfx lr, r10, #8, #8\n\t"
10278#endif
10279#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10280#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10281 "lsl r2, r11, #24\n\t"
10282 "lsr r2, r2, #24\n\t"
10283#else
10284 "uxtb r2, r11\n\t"
10285#endif
10286#else
10287 "ubfx r2, r11, #0, #8\n\t"
10288#endif
10289 "ldr r4, [r0, r4, lsl #2]\n\t"
10290 "ldr r7, [r0, r7, lsl #2]\n\t"
10291 "ldr lr, [r0, lr, lsl #2]\n\t"
10292 "ldr r2, [r0, r2, lsl #2]\n\t"
10293#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10294#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10295 "lsl r5, r10, #8\n\t"
10296 "lsr r5, r5, #24\n\t"
10297#else
10298 "uxtb r5, r10, ror #16\n\t"
10299#endif
10300#else
10301 "ubfx r5, r10, #16, #8\n\t"
10302#endif
10303 "eor r4, r4, r7, ror #24\n\t"
10304 "lsr r7, r9, #24\n\t"
10305 "eor r4, r4, lr, ror #8\n\t"
10306#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10307#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10308 "lsl lr, r11, #16\n\t"
10309 "lsr lr, lr, #24\n\t"
10310#else
10311 "uxtb lr, r11, ror #8\n\t"
10312#endif
10313#else
10314 "ubfx lr, r11, #8, #8\n\t"
10315#endif
10316 "eor r4, r4, r2, ror #16\n\t"
10317#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10318#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10319 "lsl r2, r8, #24\n\t"
10320 "lsr r2, r2, #24\n\t"
10321#else
10322 "uxtb r2, r8\n\t"
10323#endif
10324#else
10325 "ubfx r2, r8, #0, #8\n\t"
10326#endif
10327 "ldr r5, [r0, r5, lsl #2]\n\t"
10328 "ldr r7, [r0, r7, lsl #2]\n\t"
10329 "ldr lr, [r0, lr, lsl #2]\n\t"
10330 "ldr r2, [r0, r2, lsl #2]\n\t"
10331#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10332#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10333 "lsl r6, r11, #8\n\t"
10334 "lsr r6, r6, #24\n\t"
10335#else
10336 "uxtb r6, r11, ror #16\n\t"
10337#endif
10338#else
10339 "ubfx r6, r11, #16, #8\n\t"
10340#endif
10341 "eor r5, r5, r7, ror #24\n\t"
10342 "lsr r7, r10, #24\n\t"
10343 "eor r5, r5, lr, ror #8\n\t"
10344#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10345#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10346 "lsl lr, r8, #16\n\t"
10347 "lsr lr, lr, #24\n\t"
10348#else
10349 "uxtb lr, r8, ror #8\n\t"
10350#endif
10351#else
10352 "ubfx lr, r8, #8, #8\n\t"
10353#endif
10354 "eor r5, r5, r2, ror #16\n\t"
10355#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10356#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10357 "lsl r2, r9, #24\n\t"
10358 "lsr r2, r2, #24\n\t"
10359#else
10360 "uxtb r2, r9\n\t"
10361#endif
10362#else
10363 "ubfx r2, r9, #0, #8\n\t"
10364#endif
10365 "ldr r6, [r0, r6, lsl #2]\n\t"
10366 "ldr r7, [r0, r7, lsl #2]\n\t"
10367 "ldr lr, [r0, lr, lsl #2]\n\t"
10368 "ldr r2, [r0, r2, lsl #2]\n\t"
10369#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10370#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10371 "lsl r10, r10, #24\n\t"
10372 "lsr r10, r10, #24\n\t"
10373#else
10374 "uxtb r10, r10\n\t"
10375#endif
10376#else
10377 "ubfx r10, r10, #0, #8\n\t"
10378#endif
10379 "eor r6, r6, r7, ror #24\n\t"
10380#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10381#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10382 "lsl r7, r8, #8\n\t"
10383 "lsr r7, r7, #24\n\t"
10384#else
10385 "uxtb r7, r8, ror #16\n\t"
10386#endif
10387#else
10388 "ubfx r7, r8, #16, #8\n\t"
10389#endif
10390 "eor r6, r6, lr, ror #8\n\t"
10391 "lsr lr, r11, #24\n\t"
10392 "eor r6, r6, r2, ror #16\n\t"
10393#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10394#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10395 "lsl r2, r9, #16\n\t"
10396 "lsr r2, r2, #24\n\t"
10397#else
10398 "uxtb r2, r9, ror #8\n\t"
10399#endif
10400#else
10401 "ubfx r2, r9, #8, #8\n\t"
10402#endif
10403 "ldr r10, [r0, r10, lsl #2]\n\t"
10404 "ldr lr, [r0, lr, lsl #2]\n\t"
10405 "ldr r7, [r0, r7, lsl #2]\n\t"
10406 "ldr r2, [r0, r2, lsl #2]\n\t"
10407 "eor lr, lr, r10, ror #24\n\t"
10408 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
10409 "eor r7, r7, lr, ror #24\n\t"
10410 "eor r7, r7, r2, ror #8\n\t"
10411 /* XOR in Key Schedule */
10412 "eor r4, r4, r8\n\t"
10413 "eor r5, r5, r9\n\t"
10414 "eor r6, r6, r10\n\t"
10415 "eor r7, r7, r11\n\t"
10416 "subs r1, r1, #1\n\t"
10417 "bne L_AES_ECB_encrypt_block_nr_256_%=\n\t"
10418#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10419#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10420 "lsl r8, r5, #8\n\t"
10421 "lsr r8, r8, #24\n\t"
10422#else
10423 "uxtb r8, r5, ror #16\n\t"
10424#endif
10425#else
10426 "ubfx r8, r5, #16, #8\n\t"
10427#endif
10428 "lsr r11, r4, #24\n\t"
10429#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10430#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10431 "lsl lr, r6, #16\n\t"
10432 "lsr lr, lr, #24\n\t"
10433#else
10434 "uxtb lr, r6, ror #8\n\t"
10435#endif
10436#else
10437 "ubfx lr, r6, #8, #8\n\t"
10438#endif
10439#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10440#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10441 "lsl r2, r7, #24\n\t"
10442 "lsr r2, r2, #24\n\t"
10443#else
10444 "uxtb r2, r7\n\t"
10445#endif
10446#else
10447 "ubfx r2, r7, #0, #8\n\t"
10448#endif
10449 "ldr r8, [r0, r8, lsl #2]\n\t"
10450 "ldr r11, [r0, r11, lsl #2]\n\t"
10451 "ldr lr, [r0, lr, lsl #2]\n\t"
10452 "ldr r2, [r0, r2, lsl #2]\n\t"
10453#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10454#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10455 "lsl r9, r6, #8\n\t"
10456 "lsr r9, r9, #24\n\t"
10457#else
10458 "uxtb r9, r6, ror #16\n\t"
10459#endif
10460#else
10461 "ubfx r9, r6, #16, #8\n\t"
10462#endif
10463 "eor r8, r8, r11, ror #24\n\t"
10464 "lsr r11, r5, #24\n\t"
10465 "eor r8, r8, lr, ror #8\n\t"
10466#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10467#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10468 "lsl lr, r7, #16\n\t"
10469 "lsr lr, lr, #24\n\t"
10470#else
10471 "uxtb lr, r7, ror #8\n\t"
10472#endif
10473#else
10474 "ubfx lr, r7, #8, #8\n\t"
10475#endif
10476 "eor r8, r8, r2, ror #16\n\t"
10477#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10478#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10479 "lsl r2, r4, #24\n\t"
10480 "lsr r2, r2, #24\n\t"
10481#else
10482 "uxtb r2, r4\n\t"
10483#endif
10484#else
10485 "ubfx r2, r4, #0, #8\n\t"
10486#endif
10487 "ldr r9, [r0, r9, lsl #2]\n\t"
10488 "ldr r11, [r0, r11, lsl #2]\n\t"
10489 "ldr lr, [r0, lr, lsl #2]\n\t"
10490 "ldr r2, [r0, r2, lsl #2]\n\t"
10491#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10492#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10493 "lsl r10, r7, #8\n\t"
10494 "lsr r10, r10, #24\n\t"
10495#else
10496 "uxtb r10, r7, ror #16\n\t"
10497#endif
10498#else
10499 "ubfx r10, r7, #16, #8\n\t"
10500#endif
10501 "eor r9, r9, r11, ror #24\n\t"
10502 "lsr r11, r6, #24\n\t"
10503 "eor r9, r9, lr, ror #8\n\t"
10504#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10505#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10506 "lsl lr, r4, #16\n\t"
10507 "lsr lr, lr, #24\n\t"
10508#else
10509 "uxtb lr, r4, ror #8\n\t"
10510#endif
10511#else
10512 "ubfx lr, r4, #8, #8\n\t"
10513#endif
10514 "eor r9, r9, r2, ror #16\n\t"
10515#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10516#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10517 "lsl r2, r5, #24\n\t"
10518 "lsr r2, r2, #24\n\t"
10519#else
10520 "uxtb r2, r5\n\t"
10521#endif
10522#else
10523 "ubfx r2, r5, #0, #8\n\t"
10524#endif
10525 "ldr r10, [r0, r10, lsl #2]\n\t"
10526 "ldr r11, [r0, r11, lsl #2]\n\t"
10527 "ldr lr, [r0, lr, lsl #2]\n\t"
10528 "ldr r2, [r0, r2, lsl #2]\n\t"
10529#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10530#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10531 "lsl r6, r6, #24\n\t"
10532 "lsr r6, r6, #24\n\t"
10533#else
10534 "uxtb r6, r6\n\t"
10535#endif
10536#else
10537 "ubfx r6, r6, #0, #8\n\t"
10538#endif
10539 "eor r10, r10, r11, ror #24\n\t"
10540#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10541#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10542 "lsl r11, r4, #8\n\t"
10543 "lsr r11, r11, #24\n\t"
10544#else
10545 "uxtb r11, r4, ror #16\n\t"
10546#endif
10547#else
10548 "ubfx r11, r4, #16, #8\n\t"
10549#endif
10550 "eor r10, r10, lr, ror #8\n\t"
10551 "lsr lr, r7, #24\n\t"
10552 "eor r10, r10, r2, ror #16\n\t"
10553#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10554#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10555 "lsl r2, r5, #16\n\t"
10556 "lsr r2, r2, #24\n\t"
10557#else
10558 "uxtb r2, r5, ror #8\n\t"
10559#endif
10560#else
10561 "ubfx r2, r5, #8, #8\n\t"
10562#endif
10563 "ldr r6, [r0, r6, lsl #2]\n\t"
10564 "ldr lr, [r0, lr, lsl #2]\n\t"
10565 "ldr r11, [r0, r11, lsl #2]\n\t"
10566 "ldr r2, [r0, r2, lsl #2]\n\t"
10567 "eor lr, lr, r6, ror #24\n\t"
10568 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
10569 "eor r11, r11, lr, ror #24\n\t"
10570 "eor r11, r11, r2, ror #8\n\t"
10571 /* XOR in Key Schedule */
10572 "eor r8, r8, r4\n\t"
10573 "eor r9, r9, r5\n\t"
10574 "eor r10, r10, r6\n\t"
10575 "eor r11, r11, r7\n\t"
10576#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10577#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10578 "lsl r4, r11, #24\n\t"
10579 "lsr r4, r4, #24\n\t"
10580#else
10581 "uxtb r4, r11\n\t"
10582#endif
10583#else
10584 "ubfx r4, r11, #0, #8\n\t"
10585#endif
10586#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10587#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10588 "lsl r7, r10, #16\n\t"
10589 "lsr r7, r7, #24\n\t"
10590#else
10591 "uxtb r7, r10, ror #8\n\t"
10592#endif
10593#else
10594 "ubfx r7, r10, #8, #8\n\t"
10595#endif
10596#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10597#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10598 "lsl lr, r9, #8\n\t"
10599 "lsr lr, lr, #24\n\t"
10600#else
10601 "uxtb lr, r9, ror #16\n\t"
10602#endif
10603#else
10604 "ubfx lr, r9, #16, #8\n\t"
10605#endif
10606 "lsr r2, r8, #24\n\t"
10607 "ldrb r4, [r0, r4, lsl #2]\n\t"
10608 "ldrb r7, [r0, r7, lsl #2]\n\t"
10609 "ldrb lr, [r0, lr, lsl #2]\n\t"
10610 "ldrb r2, [r0, r2, lsl #2]\n\t"
10611#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10612#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10613 "lsl r5, r8, #24\n\t"
10614 "lsr r5, r5, #24\n\t"
10615#else
10616 "uxtb r5, r8\n\t"
10617#endif
10618#else
10619 "ubfx r5, r8, #0, #8\n\t"
10620#endif
10621 "eor r4, r4, r7, lsl #8\n\t"
10622#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10623#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10624 "lsl r7, r11, #16\n\t"
10625 "lsr r7, r7, #24\n\t"
10626#else
10627 "uxtb r7, r11, ror #8\n\t"
10628#endif
10629#else
10630 "ubfx r7, r11, #8, #8\n\t"
10631#endif
10632 "eor r4, r4, lr, lsl #16\n\t"
10633#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10634#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10635 "lsl lr, r10, #8\n\t"
10636 "lsr lr, lr, #24\n\t"
10637#else
10638 "uxtb lr, r10, ror #16\n\t"
10639#endif
10640#else
10641 "ubfx lr, r10, #16, #8\n\t"
10642#endif
10643 "eor r4, r4, r2, lsl #24\n\t"
10644 "lsr r2, r9, #24\n\t"
10645 "ldrb r5, [r0, r5, lsl #2]\n\t"
10646 "ldrb r7, [r0, r7, lsl #2]\n\t"
10647 "ldrb lr, [r0, lr, lsl #2]\n\t"
10648 "ldrb r2, [r0, r2, lsl #2]\n\t"
10649#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10650#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10651 "lsl r6, r9, #24\n\t"
10652 "lsr r6, r6, #24\n\t"
10653#else
10654 "uxtb r6, r9\n\t"
10655#endif
10656#else
10657 "ubfx r6, r9, #0, #8\n\t"
10658#endif
10659 "eor r5, r5, r7, lsl #8\n\t"
10660#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10661#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10662 "lsl r7, r8, #16\n\t"
10663 "lsr r7, r7, #24\n\t"
10664#else
10665 "uxtb r7, r8, ror #8\n\t"
10666#endif
10667#else
10668 "ubfx r7, r8, #8, #8\n\t"
10669#endif
10670 "eor r5, r5, lr, lsl #16\n\t"
10671#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10672#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10673 "lsl lr, r11, #8\n\t"
10674 "lsr lr, lr, #24\n\t"
10675#else
10676 "uxtb lr, r11, ror #16\n\t"
10677#endif
10678#else
10679 "ubfx lr, r11, #16, #8\n\t"
10680#endif
10681 "eor r5, r5, r2, lsl #24\n\t"
10682 "lsr r2, r10, #24\n\t"
10683 "ldrb r6, [r0, r6, lsl #2]\n\t"
10684 "ldrb r7, [r0, r7, lsl #2]\n\t"
10685 "ldrb lr, [r0, lr, lsl #2]\n\t"
10686 "ldrb r2, [r0, r2, lsl #2]\n\t"
10687 "lsr r11, r11, #24\n\t"
10688 "eor r6, r6, r7, lsl #8\n\t"
10689#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10690#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10691 "lsl r7, r10, #24\n\t"
10692 "lsr r7, r7, #24\n\t"
10693#else
10694 "uxtb r7, r10\n\t"
10695#endif
10696#else
10697 "ubfx r7, r10, #0, #8\n\t"
10698#endif
10699 "eor r6, r6, lr, lsl #16\n\t"
10700#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10701#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10702 "lsl lr, r9, #16\n\t"
10703 "lsr lr, lr, #24\n\t"
10704#else
10705 "uxtb lr, r9, ror #8\n\t"
10706#endif
10707#else
10708 "ubfx lr, r9, #8, #8\n\t"
10709#endif
10710 "eor r6, r6, r2, lsl #24\n\t"
10711#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10713 "lsl r2, r8, #8\n\t"
10714 "lsr r2, r2, #24\n\t"
10715#else
10716 "uxtb r2, r8, ror #16\n\t"
10717#endif
10718#else
10719 "ubfx r2, r8, #16, #8\n\t"
10720#endif
10721 "ldrb r11, [r0, r11, lsl #2]\n\t"
10722 "ldrb r7, [r0, r7, lsl #2]\n\t"
10723 "ldrb lr, [r0, lr, lsl #2]\n\t"
10724 "ldrb r2, [r0, r2, lsl #2]\n\t"
10725 "eor lr, lr, r11, lsl #16\n\t"
10726 "ldm %[ks], {r8, r9, r10, r11}\n\t"
10727 "eor r7, r7, lr, lsl #8\n\t"
10728 "eor r7, r7, r2, lsl #16\n\t"
10729 /* XOR in Key Schedule */
10730 "eor r4, r4, r8\n\t"
10731 "eor r5, r5, r9\n\t"
10732 "eor r6, r6, r10\n\t"
10733 "eor r7, r7, r11\n\t"
10734#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
10735 "pop {r1, %[len], lr}\n\t"
10736 "ldr %[ks], [sp]\n\t"
10737#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10738 "eor r8, r4, r4, ror #16\n\t"
10739 "eor r9, r5, r5, ror #16\n\t"
10740 "eor r10, r6, r6, ror #16\n\t"
10741 "eor r11, r7, r7, ror #16\n\t"
10742 "bic r8, r8, #0xff0000\n\t"
10743 "bic r9, r9, #0xff0000\n\t"
10744 "bic r10, r10, #0xff0000\n\t"
10745 "bic r11, r11, #0xff0000\n\t"
10746 "ror r4, r4, #8\n\t"
10747 "ror r5, r5, #8\n\t"
10748 "ror r6, r6, #8\n\t"
10749 "ror r7, r7, #8\n\t"
10750 "eor r4, r4, r8, lsr #8\n\t"
10751 "eor r5, r5, r9, lsr #8\n\t"
10752 "eor r6, r6, r10, lsr #8\n\t"
10753 "eor r7, r7, r11, lsr #8\n\t"
10754#else
10755 "rev r4, r4\n\t"
10756 "rev r5, r5\n\t"
10757 "rev r6, r6\n\t"
10758 "rev r7, r7\n\t"
10759#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
10760 "str r4, [%[out]]\n\t"
10761 "str r5, [%[out], #4]\n\t"
10762 "str r6, [%[out], #8]\n\t"
10763 "str r7, [%[out], #12]\n\t"
10764 "subs %[len], %[len], #16\n\t"
10765 "add lr, lr, #16\n\t"
10766 "add %[out], %[out], #16\n\t"
10767 "bne L_AES_ECB_encrypt_loop_block_256_%=\n\t"
10768 "b L_AES_ECB_encrypt_end_%=\n\t"
10769 "\n"
10770 "L_AES_ECB_encrypt_start_block_192_%=:\n\t"
10771 "\n"
10772 "L_AES_ECB_encrypt_loop_block_192_%=:\n\t"
10773 "ldr r4, [lr]\n\t"
10774 "ldr r5, [lr, #4]\n\t"
10775 "ldr r6, [lr, #8]\n\t"
10776 "ldr r7, [lr, #12]\n\t"
10777#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10778 "eor r8, r4, r4, ror #16\n\t"
10779 "eor r9, r5, r5, ror #16\n\t"
10780 "eor r10, r6, r6, ror #16\n\t"
10781 "eor r11, r7, r7, ror #16\n\t"
10782 "bic r8, r8, #0xff0000\n\t"
10783 "bic r9, r9, #0xff0000\n\t"
10784 "bic r10, r10, #0xff0000\n\t"
10785 "bic r11, r11, #0xff0000\n\t"
10786 "ror r4, r4, #8\n\t"
10787 "ror r5, r5, #8\n\t"
10788 "ror r6, r6, #8\n\t"
10789 "ror r7, r7, #8\n\t"
10790 "eor r4, r4, r8, lsr #8\n\t"
10791 "eor r5, r5, r9, lsr #8\n\t"
10792 "eor r6, r6, r10, lsr #8\n\t"
10793 "eor r7, r7, r11, lsr #8\n\t"
10794#else
10795 "rev r4, r4\n\t"
10796 "rev r5, r5\n\t"
10797 "rev r6, r6\n\t"
10798 "rev r7, r7\n\t"
10799#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
10800 "push {r1, %[len], lr}\n\t"
10801 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
10802 /* Round: 0 - XOR in key schedule */
10803 "eor r4, r4, r8\n\t"
10804 "eor r5, r5, r9\n\t"
10805 "eor r6, r6, r10\n\t"
10806 "eor r7, r7, r11\n\t"
10807 "mov r1, #5\n\t"
10808#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
10809 "bl AES_encrypt_block\n\t"
10810#else
10811 "\n"
10812 "L_AES_ECB_encrypt_block_nr_192_%=:\n\t"
10813#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10814#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10815 "lsl r8, r5, #8\n\t"
10816 "lsr r8, r8, #24\n\t"
10817#else
10818 "uxtb r8, r5, ror #16\n\t"
10819#endif
10820#else
10821 "ubfx r8, r5, #16, #8\n\t"
10822#endif
10823 "lsr r11, r4, #24\n\t"
10824#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10825#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10826 "lsl lr, r6, #16\n\t"
10827 "lsr lr, lr, #24\n\t"
10828#else
10829 "uxtb lr, r6, ror #8\n\t"
10830#endif
10831#else
10832 "ubfx lr, r6, #8, #8\n\t"
10833#endif
10834#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10835#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10836 "lsl r2, r7, #24\n\t"
10837 "lsr r2, r2, #24\n\t"
10838#else
10839 "uxtb r2, r7\n\t"
10840#endif
10841#else
10842 "ubfx r2, r7, #0, #8\n\t"
10843#endif
10844 "ldr r8, [r0, r8, lsl #2]\n\t"
10845 "ldr r11, [r0, r11, lsl #2]\n\t"
10846 "ldr lr, [r0, lr, lsl #2]\n\t"
10847 "ldr r2, [r0, r2, lsl #2]\n\t"
10848#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10849#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10850 "lsl r9, r6, #8\n\t"
10851 "lsr r9, r9, #24\n\t"
10852#else
10853 "uxtb r9, r6, ror #16\n\t"
10854#endif
10855#else
10856 "ubfx r9, r6, #16, #8\n\t"
10857#endif
10858 "eor r8, r8, r11, ror #24\n\t"
10859 "lsr r11, r5, #24\n\t"
10860 "eor r8, r8, lr, ror #8\n\t"
10861#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10862#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10863 "lsl lr, r7, #16\n\t"
10864 "lsr lr, lr, #24\n\t"
10865#else
10866 "uxtb lr, r7, ror #8\n\t"
10867#endif
10868#else
10869 "ubfx lr, r7, #8, #8\n\t"
10870#endif
10871 "eor r8, r8, r2, ror #16\n\t"
10872#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10873#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10874 "lsl r2, r4, #24\n\t"
10875 "lsr r2, r2, #24\n\t"
10876#else
10877 "uxtb r2, r4\n\t"
10878#endif
10879#else
10880 "ubfx r2, r4, #0, #8\n\t"
10881#endif
10882 "ldr r9, [r0, r9, lsl #2]\n\t"
10883 "ldr r11, [r0, r11, lsl #2]\n\t"
10884 "ldr lr, [r0, lr, lsl #2]\n\t"
10885 "ldr r2, [r0, r2, lsl #2]\n\t"
10886#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10887#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10888 "lsl r10, r7, #8\n\t"
10889 "lsr r10, r10, #24\n\t"
10890#else
10891 "uxtb r10, r7, ror #16\n\t"
10892#endif
10893#else
10894 "ubfx r10, r7, #16, #8\n\t"
10895#endif
10896 "eor r9, r9, r11, ror #24\n\t"
10897 "lsr r11, r6, #24\n\t"
10898 "eor r9, r9, lr, ror #8\n\t"
10899#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10900#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10901 "lsl lr, r4, #16\n\t"
10902 "lsr lr, lr, #24\n\t"
10903#else
10904 "uxtb lr, r4, ror #8\n\t"
10905#endif
10906#else
10907 "ubfx lr, r4, #8, #8\n\t"
10908#endif
10909 "eor r9, r9, r2, ror #16\n\t"
10910#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10911#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10912 "lsl r2, r5, #24\n\t"
10913 "lsr r2, r2, #24\n\t"
10914#else
10915 "uxtb r2, r5\n\t"
10916#endif
10917#else
10918 "ubfx r2, r5, #0, #8\n\t"
10919#endif
10920 "ldr r10, [r0, r10, lsl #2]\n\t"
10921 "ldr r11, [r0, r11, lsl #2]\n\t"
10922 "ldr lr, [r0, lr, lsl #2]\n\t"
10923 "ldr r2, [r0, r2, lsl #2]\n\t"
10924#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10925#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10926 "lsl r6, r6, #24\n\t"
10927 "lsr r6, r6, #24\n\t"
10928#else
10929 "uxtb r6, r6\n\t"
10930#endif
10931#else
10932 "ubfx r6, r6, #0, #8\n\t"
10933#endif
10934 "eor r10, r10, r11, ror #24\n\t"
10935#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10936#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10937 "lsl r11, r4, #8\n\t"
10938 "lsr r11, r11, #24\n\t"
10939#else
10940 "uxtb r11, r4, ror #16\n\t"
10941#endif
10942#else
10943 "ubfx r11, r4, #16, #8\n\t"
10944#endif
10945 "eor r10, r10, lr, ror #8\n\t"
10946 "lsr lr, r7, #24\n\t"
10947 "eor r10, r10, r2, ror #16\n\t"
10948#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10949#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10950 "lsl r2, r5, #16\n\t"
10951 "lsr r2, r2, #24\n\t"
10952#else
10953 "uxtb r2, r5, ror #8\n\t"
10954#endif
10955#else
10956 "ubfx r2, r5, #8, #8\n\t"
10957#endif
10958 "ldr r6, [r0, r6, lsl #2]\n\t"
10959 "ldr lr, [r0, lr, lsl #2]\n\t"
10960 "ldr r11, [r0, r11, lsl #2]\n\t"
10961 "ldr r2, [r0, r2, lsl #2]\n\t"
10962 "eor lr, lr, r6, ror #24\n\t"
10963 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
10964 "eor r11, r11, lr, ror #24\n\t"
10965 "eor r11, r11, r2, ror #8\n\t"
10966 /* XOR in Key Schedule */
10967 "eor r8, r8, r4\n\t"
10968 "eor r9, r9, r5\n\t"
10969 "eor r10, r10, r6\n\t"
10970 "eor r11, r11, r7\n\t"
10971#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10972#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10973 "lsl r4, r9, #8\n\t"
10974 "lsr r4, r4, #24\n\t"
10975#else
10976 "uxtb r4, r9, ror #16\n\t"
10977#endif
10978#else
10979 "ubfx r4, r9, #16, #8\n\t"
10980#endif
10981 "lsr r7, r8, #24\n\t"
10982#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10983#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10984 "lsl lr, r10, #16\n\t"
10985 "lsr lr, lr, #24\n\t"
10986#else
10987 "uxtb lr, r10, ror #8\n\t"
10988#endif
10989#else
10990 "ubfx lr, r10, #8, #8\n\t"
10991#endif
10992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
10993#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
10994 "lsl r2, r11, #24\n\t"
10995 "lsr r2, r2, #24\n\t"
10996#else
10997 "uxtb r2, r11\n\t"
10998#endif
10999#else
11000 "ubfx r2, r11, #0, #8\n\t"
11001#endif
11002 "ldr r4, [r0, r4, lsl #2]\n\t"
11003 "ldr r7, [r0, r7, lsl #2]\n\t"
11004 "ldr lr, [r0, lr, lsl #2]\n\t"
11005 "ldr r2, [r0, r2, lsl #2]\n\t"
11006#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11007#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11008 "lsl r5, r10, #8\n\t"
11009 "lsr r5, r5, #24\n\t"
11010#else
11011 "uxtb r5, r10, ror #16\n\t"
11012#endif
11013#else
11014 "ubfx r5, r10, #16, #8\n\t"
11015#endif
11016 "eor r4, r4, r7, ror #24\n\t"
11017 "lsr r7, r9, #24\n\t"
11018 "eor r4, r4, lr, ror #8\n\t"
11019#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11020#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11021 "lsl lr, r11, #16\n\t"
11022 "lsr lr, lr, #24\n\t"
11023#else
11024 "uxtb lr, r11, ror #8\n\t"
11025#endif
11026#else
11027 "ubfx lr, r11, #8, #8\n\t"
11028#endif
11029 "eor r4, r4, r2, ror #16\n\t"
11030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11031#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11032 "lsl r2, r8, #24\n\t"
11033 "lsr r2, r2, #24\n\t"
11034#else
11035 "uxtb r2, r8\n\t"
11036#endif
11037#else
11038 "ubfx r2, r8, #0, #8\n\t"
11039#endif
11040 "ldr r5, [r0, r5, lsl #2]\n\t"
11041 "ldr r7, [r0, r7, lsl #2]\n\t"
11042 "ldr lr, [r0, lr, lsl #2]\n\t"
11043 "ldr r2, [r0, r2, lsl #2]\n\t"
11044#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11045#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11046 "lsl r6, r11, #8\n\t"
11047 "lsr r6, r6, #24\n\t"
11048#else
11049 "uxtb r6, r11, ror #16\n\t"
11050#endif
11051#else
11052 "ubfx r6, r11, #16, #8\n\t"
11053#endif
11054 "eor r5, r5, r7, ror #24\n\t"
11055 "lsr r7, r10, #24\n\t"
11056 "eor r5, r5, lr, ror #8\n\t"
11057#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11058#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11059 "lsl lr, r8, #16\n\t"
11060 "lsr lr, lr, #24\n\t"
11061#else
11062 "uxtb lr, r8, ror #8\n\t"
11063#endif
11064#else
11065 "ubfx lr, r8, #8, #8\n\t"
11066#endif
11067 "eor r5, r5, r2, ror #16\n\t"
11068#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11069#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11070 "lsl r2, r9, #24\n\t"
11071 "lsr r2, r2, #24\n\t"
11072#else
11073 "uxtb r2, r9\n\t"
11074#endif
11075#else
11076 "ubfx r2, r9, #0, #8\n\t"
11077#endif
11078 "ldr r6, [r0, r6, lsl #2]\n\t"
11079 "ldr r7, [r0, r7, lsl #2]\n\t"
11080 "ldr lr, [r0, lr, lsl #2]\n\t"
11081 "ldr r2, [r0, r2, lsl #2]\n\t"
11082#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11083#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11084 "lsl r10, r10, #24\n\t"
11085 "lsr r10, r10, #24\n\t"
11086#else
11087 "uxtb r10, r10\n\t"
11088#endif
11089#else
11090 "ubfx r10, r10, #0, #8\n\t"
11091#endif
11092 "eor r6, r6, r7, ror #24\n\t"
11093#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11094#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11095 "lsl r7, r8, #8\n\t"
11096 "lsr r7, r7, #24\n\t"
11097#else
11098 "uxtb r7, r8, ror #16\n\t"
11099#endif
11100#else
11101 "ubfx r7, r8, #16, #8\n\t"
11102#endif
11103 "eor r6, r6, lr, ror #8\n\t"
11104 "lsr lr, r11, #24\n\t"
11105 "eor r6, r6, r2, ror #16\n\t"
11106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11107#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11108 "lsl r2, r9, #16\n\t"
11109 "lsr r2, r2, #24\n\t"
11110#else
11111 "uxtb r2, r9, ror #8\n\t"
11112#endif
11113#else
11114 "ubfx r2, r9, #8, #8\n\t"
11115#endif
11116 "ldr r10, [r0, r10, lsl #2]\n\t"
11117 "ldr lr, [r0, lr, lsl #2]\n\t"
11118 "ldr r7, [r0, r7, lsl #2]\n\t"
11119 "ldr r2, [r0, r2, lsl #2]\n\t"
11120 "eor lr, lr, r10, ror #24\n\t"
11121 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
11122 "eor r7, r7, lr, ror #24\n\t"
11123 "eor r7, r7, r2, ror #8\n\t"
11124 /* XOR in Key Schedule */
11125 "eor r4, r4, r8\n\t"
11126 "eor r5, r5, r9\n\t"
11127 "eor r6, r6, r10\n\t"
11128 "eor r7, r7, r11\n\t"
11129 "subs r1, r1, #1\n\t"
11130 "bne L_AES_ECB_encrypt_block_nr_192_%=\n\t"
11131#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11132#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11133 "lsl r8, r5, #8\n\t"
11134 "lsr r8, r8, #24\n\t"
11135#else
11136 "uxtb r8, r5, ror #16\n\t"
11137#endif
11138#else
11139 "ubfx r8, r5, #16, #8\n\t"
11140#endif
11141 "lsr r11, r4, #24\n\t"
11142#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11143#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11144 "lsl lr, r6, #16\n\t"
11145 "lsr lr, lr, #24\n\t"
11146#else
11147 "uxtb lr, r6, ror #8\n\t"
11148#endif
11149#else
11150 "ubfx lr, r6, #8, #8\n\t"
11151#endif
11152#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11153#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11154 "lsl r2, r7, #24\n\t"
11155 "lsr r2, r2, #24\n\t"
11156#else
11157 "uxtb r2, r7\n\t"
11158#endif
11159#else
11160 "ubfx r2, r7, #0, #8\n\t"
11161#endif
11162 "ldr r8, [r0, r8, lsl #2]\n\t"
11163 "ldr r11, [r0, r11, lsl #2]\n\t"
11164 "ldr lr, [r0, lr, lsl #2]\n\t"
11165 "ldr r2, [r0, r2, lsl #2]\n\t"
11166#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11167#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11168 "lsl r9, r6, #8\n\t"
11169 "lsr r9, r9, #24\n\t"
11170#else
11171 "uxtb r9, r6, ror #16\n\t"
11172#endif
11173#else
11174 "ubfx r9, r6, #16, #8\n\t"
11175#endif
11176 "eor r8, r8, r11, ror #24\n\t"
11177 "lsr r11, r5, #24\n\t"
11178 "eor r8, r8, lr, ror #8\n\t"
11179#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11180#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11181 "lsl lr, r7, #16\n\t"
11182 "lsr lr, lr, #24\n\t"
11183#else
11184 "uxtb lr, r7, ror #8\n\t"
11185#endif
11186#else
11187 "ubfx lr, r7, #8, #8\n\t"
11188#endif
11189 "eor r8, r8, r2, ror #16\n\t"
11190#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11191#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11192 "lsl r2, r4, #24\n\t"
11193 "lsr r2, r2, #24\n\t"
11194#else
11195 "uxtb r2, r4\n\t"
11196#endif
11197#else
11198 "ubfx r2, r4, #0, #8\n\t"
11199#endif
11200 "ldr r9, [r0, r9, lsl #2]\n\t"
11201 "ldr r11, [r0, r11, lsl #2]\n\t"
11202 "ldr lr, [r0, lr, lsl #2]\n\t"
11203 "ldr r2, [r0, r2, lsl #2]\n\t"
11204#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11205#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11206 "lsl r10, r7, #8\n\t"
11207 "lsr r10, r10, #24\n\t"
11208#else
11209 "uxtb r10, r7, ror #16\n\t"
11210#endif
11211#else
11212 "ubfx r10, r7, #16, #8\n\t"
11213#endif
11214 "eor r9, r9, r11, ror #24\n\t"
11215 "lsr r11, r6, #24\n\t"
11216 "eor r9, r9, lr, ror #8\n\t"
11217#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11218#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11219 "lsl lr, r4, #16\n\t"
11220 "lsr lr, lr, #24\n\t"
11221#else
11222 "uxtb lr, r4, ror #8\n\t"
11223#endif
11224#else
11225 "ubfx lr, r4, #8, #8\n\t"
11226#endif
11227 "eor r9, r9, r2, ror #16\n\t"
11228#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11229#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11230 "lsl r2, r5, #24\n\t"
11231 "lsr r2, r2, #24\n\t"
11232#else
11233 "uxtb r2, r5\n\t"
11234#endif
11235#else
11236 "ubfx r2, r5, #0, #8\n\t"
11237#endif
11238 "ldr r10, [r0, r10, lsl #2]\n\t"
11239 "ldr r11, [r0, r11, lsl #2]\n\t"
11240 "ldr lr, [r0, lr, lsl #2]\n\t"
11241 "ldr r2, [r0, r2, lsl #2]\n\t"
11242#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11243#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11244 "lsl r6, r6, #24\n\t"
11245 "lsr r6, r6, #24\n\t"
11246#else
11247 "uxtb r6, r6\n\t"
11248#endif
11249#else
11250 "ubfx r6, r6, #0, #8\n\t"
11251#endif
11252 "eor r10, r10, r11, ror #24\n\t"
11253#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11254#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11255 "lsl r11, r4, #8\n\t"
11256 "lsr r11, r11, #24\n\t"
11257#else
11258 "uxtb r11, r4, ror #16\n\t"
11259#endif
11260#else
11261 "ubfx r11, r4, #16, #8\n\t"
11262#endif
11263 "eor r10, r10, lr, ror #8\n\t"
11264 "lsr lr, r7, #24\n\t"
11265 "eor r10, r10, r2, ror #16\n\t"
11266#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11267#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11268 "lsl r2, r5, #16\n\t"
11269 "lsr r2, r2, #24\n\t"
11270#else
11271 "uxtb r2, r5, ror #8\n\t"
11272#endif
11273#else
11274 "ubfx r2, r5, #8, #8\n\t"
11275#endif
11276 "ldr r6, [r0, r6, lsl #2]\n\t"
11277 "ldr lr, [r0, lr, lsl #2]\n\t"
11278 "ldr r11, [r0, r11, lsl #2]\n\t"
11279 "ldr r2, [r0, r2, lsl #2]\n\t"
11280 "eor lr, lr, r6, ror #24\n\t"
11281 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
11282 "eor r11, r11, lr, ror #24\n\t"
11283 "eor r11, r11, r2, ror #8\n\t"
11284 /* XOR in Key Schedule */
11285 "eor r8, r8, r4\n\t"
11286 "eor r9, r9, r5\n\t"
11287 "eor r10, r10, r6\n\t"
11288 "eor r11, r11, r7\n\t"
11289#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11290#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11291 "lsl r4, r11, #24\n\t"
11292 "lsr r4, r4, #24\n\t"
11293#else
11294 "uxtb r4, r11\n\t"
11295#endif
11296#else
11297 "ubfx r4, r11, #0, #8\n\t"
11298#endif
11299#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11300#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11301 "lsl r7, r10, #16\n\t"
11302 "lsr r7, r7, #24\n\t"
11303#else
11304 "uxtb r7, r10, ror #8\n\t"
11305#endif
11306#else
11307 "ubfx r7, r10, #8, #8\n\t"
11308#endif
11309#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11310#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11311 "lsl lr, r9, #8\n\t"
11312 "lsr lr, lr, #24\n\t"
11313#else
11314 "uxtb lr, r9, ror #16\n\t"
11315#endif
11316#else
11317 "ubfx lr, r9, #16, #8\n\t"
11318#endif
11319 "lsr r2, r8, #24\n\t"
11320 "ldrb r4, [r0, r4, lsl #2]\n\t"
11321 "ldrb r7, [r0, r7, lsl #2]\n\t"
11322 "ldrb lr, [r0, lr, lsl #2]\n\t"
11323 "ldrb r2, [r0, r2, lsl #2]\n\t"
11324#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11325#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11326 "lsl r5, r8, #24\n\t"
11327 "lsr r5, r5, #24\n\t"
11328#else
11329 "uxtb r5, r8\n\t"
11330#endif
11331#else
11332 "ubfx r5, r8, #0, #8\n\t"
11333#endif
11334 "eor r4, r4, r7, lsl #8\n\t"
11335#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11336#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11337 "lsl r7, r11, #16\n\t"
11338 "lsr r7, r7, #24\n\t"
11339#else
11340 "uxtb r7, r11, ror #8\n\t"
11341#endif
11342#else
11343 "ubfx r7, r11, #8, #8\n\t"
11344#endif
11345 "eor r4, r4, lr, lsl #16\n\t"
11346#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11347#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11348 "lsl lr, r10, #8\n\t"
11349 "lsr lr, lr, #24\n\t"
11350#else
11351 "uxtb lr, r10, ror #16\n\t"
11352#endif
11353#else
11354 "ubfx lr, r10, #16, #8\n\t"
11355#endif
11356 "eor r4, r4, r2, lsl #24\n\t"
11357 "lsr r2, r9, #24\n\t"
11358 "ldrb r5, [r0, r5, lsl #2]\n\t"
11359 "ldrb r7, [r0, r7, lsl #2]\n\t"
11360 "ldrb lr, [r0, lr, lsl #2]\n\t"
11361 "ldrb r2, [r0, r2, lsl #2]\n\t"
11362#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11363#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11364 "lsl r6, r9, #24\n\t"
11365 "lsr r6, r6, #24\n\t"
11366#else
11367 "uxtb r6, r9\n\t"
11368#endif
11369#else
11370 "ubfx r6, r9, #0, #8\n\t"
11371#endif
11372 "eor r5, r5, r7, lsl #8\n\t"
11373#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11374#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11375 "lsl r7, r8, #16\n\t"
11376 "lsr r7, r7, #24\n\t"
11377#else
11378 "uxtb r7, r8, ror #8\n\t"
11379#endif
11380#else
11381 "ubfx r7, r8, #8, #8\n\t"
11382#endif
11383 "eor r5, r5, lr, lsl #16\n\t"
11384#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11385#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11386 "lsl lr, r11, #8\n\t"
11387 "lsr lr, lr, #24\n\t"
11388#else
11389 "uxtb lr, r11, ror #16\n\t"
11390#endif
11391#else
11392 "ubfx lr, r11, #16, #8\n\t"
11393#endif
11394 "eor r5, r5, r2, lsl #24\n\t"
11395 "lsr r2, r10, #24\n\t"
11396 "ldrb r6, [r0, r6, lsl #2]\n\t"
11397 "ldrb r7, [r0, r7, lsl #2]\n\t"
11398 "ldrb lr, [r0, lr, lsl #2]\n\t"
11399 "ldrb r2, [r0, r2, lsl #2]\n\t"
11400 "lsr r11, r11, #24\n\t"
11401 "eor r6, r6, r7, lsl #8\n\t"
11402#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11403#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11404 "lsl r7, r10, #24\n\t"
11405 "lsr r7, r7, #24\n\t"
11406#else
11407 "uxtb r7, r10\n\t"
11408#endif
11409#else
11410 "ubfx r7, r10, #0, #8\n\t"
11411#endif
11412 "eor r6, r6, lr, lsl #16\n\t"
11413#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11414#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11415 "lsl lr, r9, #16\n\t"
11416 "lsr lr, lr, #24\n\t"
11417#else
11418 "uxtb lr, r9, ror #8\n\t"
11419#endif
11420#else
11421 "ubfx lr, r9, #8, #8\n\t"
11422#endif
11423 "eor r6, r6, r2, lsl #24\n\t"
11424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11425#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11426 "lsl r2, r8, #8\n\t"
11427 "lsr r2, r2, #24\n\t"
11428#else
11429 "uxtb r2, r8, ror #16\n\t"
11430#endif
11431#else
11432 "ubfx r2, r8, #16, #8\n\t"
11433#endif
11434 "ldrb r11, [r0, r11, lsl #2]\n\t"
11435 "ldrb r7, [r0, r7, lsl #2]\n\t"
11436 "ldrb lr, [r0, lr, lsl #2]\n\t"
11437 "ldrb r2, [r0, r2, lsl #2]\n\t"
11438 "eor lr, lr, r11, lsl #16\n\t"
11439 "ldm %[ks], {r8, r9, r10, r11}\n\t"
11440 "eor r7, r7, lr, lsl #8\n\t"
11441 "eor r7, r7, r2, lsl #16\n\t"
11442 /* XOR in Key Schedule */
11443 "eor r4, r4, r8\n\t"
11444 "eor r5, r5, r9\n\t"
11445 "eor r6, r6, r10\n\t"
11446 "eor r7, r7, r11\n\t"
11447#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
11448 "pop {r1, %[len], lr}\n\t"
11449 "ldr %[ks], [sp]\n\t"
11450#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11451 "eor r8, r4, r4, ror #16\n\t"
11452 "eor r9, r5, r5, ror #16\n\t"
11453 "eor r10, r6, r6, ror #16\n\t"
11454 "eor r11, r7, r7, ror #16\n\t"
11455 "bic r8, r8, #0xff0000\n\t"
11456 "bic r9, r9, #0xff0000\n\t"
11457 "bic r10, r10, #0xff0000\n\t"
11458 "bic r11, r11, #0xff0000\n\t"
11459 "ror r4, r4, #8\n\t"
11460 "ror r5, r5, #8\n\t"
11461 "ror r6, r6, #8\n\t"
11462 "ror r7, r7, #8\n\t"
11463 "eor r4, r4, r8, lsr #8\n\t"
11464 "eor r5, r5, r9, lsr #8\n\t"
11465 "eor r6, r6, r10, lsr #8\n\t"
11466 "eor r7, r7, r11, lsr #8\n\t"
11467#else
11468 "rev r4, r4\n\t"
11469 "rev r5, r5\n\t"
11470 "rev r6, r6\n\t"
11471 "rev r7, r7\n\t"
11472#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
11473 "str r4, [%[out]]\n\t"
11474 "str r5, [%[out], #4]\n\t"
11475 "str r6, [%[out], #8]\n\t"
11476 "str r7, [%[out], #12]\n\t"
11477 "subs %[len], %[len], #16\n\t"
11478 "add lr, lr, #16\n\t"
11479 "add %[out], %[out], #16\n\t"
11480 "bne L_AES_ECB_encrypt_loop_block_192_%=\n\t"
11481 "b L_AES_ECB_encrypt_end_%=\n\t"
11482 "\n"
11483 "L_AES_ECB_encrypt_start_block_128_%=:\n\t"
11484 "\n"
11485 "L_AES_ECB_encrypt_loop_block_128_%=:\n\t"
11486 "ldr r4, [lr]\n\t"
11487 "ldr r5, [lr, #4]\n\t"
11488 "ldr r6, [lr, #8]\n\t"
11489 "ldr r7, [lr, #12]\n\t"
11490#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11491 "eor r8, r4, r4, ror #16\n\t"
11492 "eor r9, r5, r5, ror #16\n\t"
11493 "eor r10, r6, r6, ror #16\n\t"
11494 "eor r11, r7, r7, ror #16\n\t"
11495 "bic r8, r8, #0xff0000\n\t"
11496 "bic r9, r9, #0xff0000\n\t"
11497 "bic r10, r10, #0xff0000\n\t"
11498 "bic r11, r11, #0xff0000\n\t"
11499 "ror r4, r4, #8\n\t"
11500 "ror r5, r5, #8\n\t"
11501 "ror r6, r6, #8\n\t"
11502 "ror r7, r7, #8\n\t"
11503 "eor r4, r4, r8, lsr #8\n\t"
11504 "eor r5, r5, r9, lsr #8\n\t"
11505 "eor r6, r6, r10, lsr #8\n\t"
11506 "eor r7, r7, r11, lsr #8\n\t"
11507#else
11508 "rev r4, r4\n\t"
11509 "rev r5, r5\n\t"
11510 "rev r6, r6\n\t"
11511 "rev r7, r7\n\t"
11512#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
11513 "push {r1, %[len], lr}\n\t"
11514 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
11515 /* Round: 0 - XOR in key schedule */
11516 "eor r4, r4, r8\n\t"
11517 "eor r5, r5, r9\n\t"
11518 "eor r6, r6, r10\n\t"
11519 "eor r7, r7, r11\n\t"
11520 "mov r1, #4\n\t"
11521#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
11522 "bl AES_encrypt_block\n\t"
11523#else
11524 "\n"
11525 "L_AES_ECB_encrypt_block_nr_128_%=:\n\t"
11526#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11527#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11528 "lsl r8, r5, #8\n\t"
11529 "lsr r8, r8, #24\n\t"
11530#else
11531 "uxtb r8, r5, ror #16\n\t"
11532#endif
11533#else
11534 "ubfx r8, r5, #16, #8\n\t"
11535#endif
11536 "lsr r11, r4, #24\n\t"
11537#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11538#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11539 "lsl lr, r6, #16\n\t"
11540 "lsr lr, lr, #24\n\t"
11541#else
11542 "uxtb lr, r6, ror #8\n\t"
11543#endif
11544#else
11545 "ubfx lr, r6, #8, #8\n\t"
11546#endif
11547#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11548#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11549 "lsl r2, r7, #24\n\t"
11550 "lsr r2, r2, #24\n\t"
11551#else
11552 "uxtb r2, r7\n\t"
11553#endif
11554#else
11555 "ubfx r2, r7, #0, #8\n\t"
11556#endif
11557 "ldr r8, [r0, r8, lsl #2]\n\t"
11558 "ldr r11, [r0, r11, lsl #2]\n\t"
11559 "ldr lr, [r0, lr, lsl #2]\n\t"
11560 "ldr r2, [r0, r2, lsl #2]\n\t"
11561#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11562#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11563 "lsl r9, r6, #8\n\t"
11564 "lsr r9, r9, #24\n\t"
11565#else
11566 "uxtb r9, r6, ror #16\n\t"
11567#endif
11568#else
11569 "ubfx r9, r6, #16, #8\n\t"
11570#endif
11571 "eor r8, r8, r11, ror #24\n\t"
11572 "lsr r11, r5, #24\n\t"
11573 "eor r8, r8, lr, ror #8\n\t"
11574#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11575#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11576 "lsl lr, r7, #16\n\t"
11577 "lsr lr, lr, #24\n\t"
11578#else
11579 "uxtb lr, r7, ror #8\n\t"
11580#endif
11581#else
11582 "ubfx lr, r7, #8, #8\n\t"
11583#endif
11584 "eor r8, r8, r2, ror #16\n\t"
11585#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11586#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11587 "lsl r2, r4, #24\n\t"
11588 "lsr r2, r2, #24\n\t"
11589#else
11590 "uxtb r2, r4\n\t"
11591#endif
11592#else
11593 "ubfx r2, r4, #0, #8\n\t"
11594#endif
11595 "ldr r9, [r0, r9, lsl #2]\n\t"
11596 "ldr r11, [r0, r11, lsl #2]\n\t"
11597 "ldr lr, [r0, lr, lsl #2]\n\t"
11598 "ldr r2, [r0, r2, lsl #2]\n\t"
11599#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11600#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11601 "lsl r10, r7, #8\n\t"
11602 "lsr r10, r10, #24\n\t"
11603#else
11604 "uxtb r10, r7, ror #16\n\t"
11605#endif
11606#else
11607 "ubfx r10, r7, #16, #8\n\t"
11608#endif
11609 "eor r9, r9, r11, ror #24\n\t"
11610 "lsr r11, r6, #24\n\t"
11611 "eor r9, r9, lr, ror #8\n\t"
11612#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11613#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11614 "lsl lr, r4, #16\n\t"
11615 "lsr lr, lr, #24\n\t"
11616#else
11617 "uxtb lr, r4, ror #8\n\t"
11618#endif
11619#else
11620 "ubfx lr, r4, #8, #8\n\t"
11621#endif
11622 "eor r9, r9, r2, ror #16\n\t"
11623#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11624#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11625 "lsl r2, r5, #24\n\t"
11626 "lsr r2, r2, #24\n\t"
11627#else
11628 "uxtb r2, r5\n\t"
11629#endif
11630#else
11631 "ubfx r2, r5, #0, #8\n\t"
11632#endif
11633 "ldr r10, [r0, r10, lsl #2]\n\t"
11634 "ldr r11, [r0, r11, lsl #2]\n\t"
11635 "ldr lr, [r0, lr, lsl #2]\n\t"
11636 "ldr r2, [r0, r2, lsl #2]\n\t"
11637#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11638#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11639 "lsl r6, r6, #24\n\t"
11640 "lsr r6, r6, #24\n\t"
11641#else
11642 "uxtb r6, r6\n\t"
11643#endif
11644#else
11645 "ubfx r6, r6, #0, #8\n\t"
11646#endif
11647 "eor r10, r10, r11, ror #24\n\t"
11648#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11649#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11650 "lsl r11, r4, #8\n\t"
11651 "lsr r11, r11, #24\n\t"
11652#else
11653 "uxtb r11, r4, ror #16\n\t"
11654#endif
11655#else
11656 "ubfx r11, r4, #16, #8\n\t"
11657#endif
11658 "eor r10, r10, lr, ror #8\n\t"
11659 "lsr lr, r7, #24\n\t"
11660 "eor r10, r10, r2, ror #16\n\t"
11661#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11662#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11663 "lsl r2, r5, #16\n\t"
11664 "lsr r2, r2, #24\n\t"
11665#else
11666 "uxtb r2, r5, ror #8\n\t"
11667#endif
11668#else
11669 "ubfx r2, r5, #8, #8\n\t"
11670#endif
11671 "ldr r6, [r0, r6, lsl #2]\n\t"
11672 "ldr lr, [r0, lr, lsl #2]\n\t"
11673 "ldr r11, [r0, r11, lsl #2]\n\t"
11674 "ldr r2, [r0, r2, lsl #2]\n\t"
11675 "eor lr, lr, r6, ror #24\n\t"
11676 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
11677 "eor r11, r11, lr, ror #24\n\t"
11678 "eor r11, r11, r2, ror #8\n\t"
11679 /* XOR in Key Schedule */
11680 "eor r8, r8, r4\n\t"
11681 "eor r9, r9, r5\n\t"
11682 "eor r10, r10, r6\n\t"
11683 "eor r11, r11, r7\n\t"
11684#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11685#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11686 "lsl r4, r9, #8\n\t"
11687 "lsr r4, r4, #24\n\t"
11688#else
11689 "uxtb r4, r9, ror #16\n\t"
11690#endif
11691#else
11692 "ubfx r4, r9, #16, #8\n\t"
11693#endif
11694 "lsr r7, r8, #24\n\t"
11695#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11696#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11697 "lsl lr, r10, #16\n\t"
11698 "lsr lr, lr, #24\n\t"
11699#else
11700 "uxtb lr, r10, ror #8\n\t"
11701#endif
11702#else
11703 "ubfx lr, r10, #8, #8\n\t"
11704#endif
11705#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11706#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11707 "lsl r2, r11, #24\n\t"
11708 "lsr r2, r2, #24\n\t"
11709#else
11710 "uxtb r2, r11\n\t"
11711#endif
11712#else
11713 "ubfx r2, r11, #0, #8\n\t"
11714#endif
11715 "ldr r4, [r0, r4, lsl #2]\n\t"
11716 "ldr r7, [r0, r7, lsl #2]\n\t"
11717 "ldr lr, [r0, lr, lsl #2]\n\t"
11718 "ldr r2, [r0, r2, lsl #2]\n\t"
11719#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11720#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11721 "lsl r5, r10, #8\n\t"
11722 "lsr r5, r5, #24\n\t"
11723#else
11724 "uxtb r5, r10, ror #16\n\t"
11725#endif
11726#else
11727 "ubfx r5, r10, #16, #8\n\t"
11728#endif
11729 "eor r4, r4, r7, ror #24\n\t"
11730 "lsr r7, r9, #24\n\t"
11731 "eor r4, r4, lr, ror #8\n\t"
11732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11733#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11734 "lsl lr, r11, #16\n\t"
11735 "lsr lr, lr, #24\n\t"
11736#else
11737 "uxtb lr, r11, ror #8\n\t"
11738#endif
11739#else
11740 "ubfx lr, r11, #8, #8\n\t"
11741#endif
11742 "eor r4, r4, r2, ror #16\n\t"
11743#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11744#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11745 "lsl r2, r8, #24\n\t"
11746 "lsr r2, r2, #24\n\t"
11747#else
11748 "uxtb r2, r8\n\t"
11749#endif
11750#else
11751 "ubfx r2, r8, #0, #8\n\t"
11752#endif
11753 "ldr r5, [r0, r5, lsl #2]\n\t"
11754 "ldr r7, [r0, r7, lsl #2]\n\t"
11755 "ldr lr, [r0, lr, lsl #2]\n\t"
11756 "ldr r2, [r0, r2, lsl #2]\n\t"
11757#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11758#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11759 "lsl r6, r11, #8\n\t"
11760 "lsr r6, r6, #24\n\t"
11761#else
11762 "uxtb r6, r11, ror #16\n\t"
11763#endif
11764#else
11765 "ubfx r6, r11, #16, #8\n\t"
11766#endif
11767 "eor r5, r5, r7, ror #24\n\t"
11768 "lsr r7, r10, #24\n\t"
11769 "eor r5, r5, lr, ror #8\n\t"
11770#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11771#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11772 "lsl lr, r8, #16\n\t"
11773 "lsr lr, lr, #24\n\t"
11774#else
11775 "uxtb lr, r8, ror #8\n\t"
11776#endif
11777#else
11778 "ubfx lr, r8, #8, #8\n\t"
11779#endif
11780 "eor r5, r5, r2, ror #16\n\t"
11781#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11782#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11783 "lsl r2, r9, #24\n\t"
11784 "lsr r2, r2, #24\n\t"
11785#else
11786 "uxtb r2, r9\n\t"
11787#endif
11788#else
11789 "ubfx r2, r9, #0, #8\n\t"
11790#endif
11791 "ldr r6, [r0, r6, lsl #2]\n\t"
11792 "ldr r7, [r0, r7, lsl #2]\n\t"
11793 "ldr lr, [r0, lr, lsl #2]\n\t"
11794 "ldr r2, [r0, r2, lsl #2]\n\t"
11795#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11796#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11797 "lsl r10, r10, #24\n\t"
11798 "lsr r10, r10, #24\n\t"
11799#else
11800 "uxtb r10, r10\n\t"
11801#endif
11802#else
11803 "ubfx r10, r10, #0, #8\n\t"
11804#endif
11805 "eor r6, r6, r7, ror #24\n\t"
11806#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11807#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11808 "lsl r7, r8, #8\n\t"
11809 "lsr r7, r7, #24\n\t"
11810#else
11811 "uxtb r7, r8, ror #16\n\t"
11812#endif
11813#else
11814 "ubfx r7, r8, #16, #8\n\t"
11815#endif
11816 "eor r6, r6, lr, ror #8\n\t"
11817 "lsr lr, r11, #24\n\t"
11818 "eor r6, r6, r2, ror #16\n\t"
11819#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11820#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11821 "lsl r2, r9, #16\n\t"
11822 "lsr r2, r2, #24\n\t"
11823#else
11824 "uxtb r2, r9, ror #8\n\t"
11825#endif
11826#else
11827 "ubfx r2, r9, #8, #8\n\t"
11828#endif
11829 "ldr r10, [r0, r10, lsl #2]\n\t"
11830 "ldr lr, [r0, lr, lsl #2]\n\t"
11831 "ldr r7, [r0, r7, lsl #2]\n\t"
11832 "ldr r2, [r0, r2, lsl #2]\n\t"
11833 "eor lr, lr, r10, ror #24\n\t"
11834 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
11835 "eor r7, r7, lr, ror #24\n\t"
11836 "eor r7, r7, r2, ror #8\n\t"
11837 /* XOR in Key Schedule */
11838 "eor r4, r4, r8\n\t"
11839 "eor r5, r5, r9\n\t"
11840 "eor r6, r6, r10\n\t"
11841 "eor r7, r7, r11\n\t"
11842 "subs r1, r1, #1\n\t"
11843 "bne L_AES_ECB_encrypt_block_nr_128_%=\n\t"
11844#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11845#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11846 "lsl r8, r5, #8\n\t"
11847 "lsr r8, r8, #24\n\t"
11848#else
11849 "uxtb r8, r5, ror #16\n\t"
11850#endif
11851#else
11852 "ubfx r8, r5, #16, #8\n\t"
11853#endif
11854 "lsr r11, r4, #24\n\t"
11855#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11856#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11857 "lsl lr, r6, #16\n\t"
11858 "lsr lr, lr, #24\n\t"
11859#else
11860 "uxtb lr, r6, ror #8\n\t"
11861#endif
11862#else
11863 "ubfx lr, r6, #8, #8\n\t"
11864#endif
11865#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11866#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11867 "lsl r2, r7, #24\n\t"
11868 "lsr r2, r2, #24\n\t"
11869#else
11870 "uxtb r2, r7\n\t"
11871#endif
11872#else
11873 "ubfx r2, r7, #0, #8\n\t"
11874#endif
11875 "ldr r8, [r0, r8, lsl #2]\n\t"
11876 "ldr r11, [r0, r11, lsl #2]\n\t"
11877 "ldr lr, [r0, lr, lsl #2]\n\t"
11878 "ldr r2, [r0, r2, lsl #2]\n\t"
11879#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11880#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11881 "lsl r9, r6, #8\n\t"
11882 "lsr r9, r9, #24\n\t"
11883#else
11884 "uxtb r9, r6, ror #16\n\t"
11885#endif
11886#else
11887 "ubfx r9, r6, #16, #8\n\t"
11888#endif
11889 "eor r8, r8, r11, ror #24\n\t"
11890 "lsr r11, r5, #24\n\t"
11891 "eor r8, r8, lr, ror #8\n\t"
11892#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11893#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11894 "lsl lr, r7, #16\n\t"
11895 "lsr lr, lr, #24\n\t"
11896#else
11897 "uxtb lr, r7, ror #8\n\t"
11898#endif
11899#else
11900 "ubfx lr, r7, #8, #8\n\t"
11901#endif
11902 "eor r8, r8, r2, ror #16\n\t"
11903#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11904#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11905 "lsl r2, r4, #24\n\t"
11906 "lsr r2, r2, #24\n\t"
11907#else
11908 "uxtb r2, r4\n\t"
11909#endif
11910#else
11911 "ubfx r2, r4, #0, #8\n\t"
11912#endif
11913 "ldr r9, [r0, r9, lsl #2]\n\t"
11914 "ldr r11, [r0, r11, lsl #2]\n\t"
11915 "ldr lr, [r0, lr, lsl #2]\n\t"
11916 "ldr r2, [r0, r2, lsl #2]\n\t"
11917#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11918#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11919 "lsl r10, r7, #8\n\t"
11920 "lsr r10, r10, #24\n\t"
11921#else
11922 "uxtb r10, r7, ror #16\n\t"
11923#endif
11924#else
11925 "ubfx r10, r7, #16, #8\n\t"
11926#endif
11927 "eor r9, r9, r11, ror #24\n\t"
11928 "lsr r11, r6, #24\n\t"
11929 "eor r9, r9, lr, ror #8\n\t"
11930#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11931#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11932 "lsl lr, r4, #16\n\t"
11933 "lsr lr, lr, #24\n\t"
11934#else
11935 "uxtb lr, r4, ror #8\n\t"
11936#endif
11937#else
11938 "ubfx lr, r4, #8, #8\n\t"
11939#endif
11940 "eor r9, r9, r2, ror #16\n\t"
11941#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11942#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11943 "lsl r2, r5, #24\n\t"
11944 "lsr r2, r2, #24\n\t"
11945#else
11946 "uxtb r2, r5\n\t"
11947#endif
11948#else
11949 "ubfx r2, r5, #0, #8\n\t"
11950#endif
11951 "ldr r10, [r0, r10, lsl #2]\n\t"
11952 "ldr r11, [r0, r11, lsl #2]\n\t"
11953 "ldr lr, [r0, lr, lsl #2]\n\t"
11954 "ldr r2, [r0, r2, lsl #2]\n\t"
11955#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11956#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11957 "lsl r6, r6, #24\n\t"
11958 "lsr r6, r6, #24\n\t"
11959#else
11960 "uxtb r6, r6\n\t"
11961#endif
11962#else
11963 "ubfx r6, r6, #0, #8\n\t"
11964#endif
11965 "eor r10, r10, r11, ror #24\n\t"
11966#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11967#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11968 "lsl r11, r4, #8\n\t"
11969 "lsr r11, r11, #24\n\t"
11970#else
11971 "uxtb r11, r4, ror #16\n\t"
11972#endif
11973#else
11974 "ubfx r11, r4, #16, #8\n\t"
11975#endif
11976 "eor r10, r10, lr, ror #8\n\t"
11977 "lsr lr, r7, #24\n\t"
11978 "eor r10, r10, r2, ror #16\n\t"
11979#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
11980#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
11981 "lsl r2, r5, #16\n\t"
11982 "lsr r2, r2, #24\n\t"
11983#else
11984 "uxtb r2, r5, ror #8\n\t"
11985#endif
11986#else
11987 "ubfx r2, r5, #8, #8\n\t"
11988#endif
11989 "ldr r6, [r0, r6, lsl #2]\n\t"
11990 "ldr lr, [r0, lr, lsl #2]\n\t"
11991 "ldr r11, [r0, r11, lsl #2]\n\t"
11992 "ldr r2, [r0, r2, lsl #2]\n\t"
11993 "eor lr, lr, r6, ror #24\n\t"
11994 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
11995 "eor r11, r11, lr, ror #24\n\t"
11996 "eor r11, r11, r2, ror #8\n\t"
11997 /* XOR in Key Schedule */
11998 "eor r8, r8, r4\n\t"
11999 "eor r9, r9, r5\n\t"
12000 "eor r10, r10, r6\n\t"
12001 "eor r11, r11, r7\n\t"
12002#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12003#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12004 "lsl r4, r11, #24\n\t"
12005 "lsr r4, r4, #24\n\t"
12006#else
12007 "uxtb r4, r11\n\t"
12008#endif
12009#else
12010 "ubfx r4, r11, #0, #8\n\t"
12011#endif
12012#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12013#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12014 "lsl r7, r10, #16\n\t"
12015 "lsr r7, r7, #24\n\t"
12016#else
12017 "uxtb r7, r10, ror #8\n\t"
12018#endif
12019#else
12020 "ubfx r7, r10, #8, #8\n\t"
12021#endif
12022#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12023#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12024 "lsl lr, r9, #8\n\t"
12025 "lsr lr, lr, #24\n\t"
12026#else
12027 "uxtb lr, r9, ror #16\n\t"
12028#endif
12029#else
12030 "ubfx lr, r9, #16, #8\n\t"
12031#endif
12032 "lsr r2, r8, #24\n\t"
12033 "ldrb r4, [r0, r4, lsl #2]\n\t"
12034 "ldrb r7, [r0, r7, lsl #2]\n\t"
12035 "ldrb lr, [r0, lr, lsl #2]\n\t"
12036 "ldrb r2, [r0, r2, lsl #2]\n\t"
12037#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12038#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12039 "lsl r5, r8, #24\n\t"
12040 "lsr r5, r5, #24\n\t"
12041#else
12042 "uxtb r5, r8\n\t"
12043#endif
12044#else
12045 "ubfx r5, r8, #0, #8\n\t"
12046#endif
12047 "eor r4, r4, r7, lsl #8\n\t"
12048#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12049#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12050 "lsl r7, r11, #16\n\t"
12051 "lsr r7, r7, #24\n\t"
12052#else
12053 "uxtb r7, r11, ror #8\n\t"
12054#endif
12055#else
12056 "ubfx r7, r11, #8, #8\n\t"
12057#endif
12058 "eor r4, r4, lr, lsl #16\n\t"
12059#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12060#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12061 "lsl lr, r10, #8\n\t"
12062 "lsr lr, lr, #24\n\t"
12063#else
12064 "uxtb lr, r10, ror #16\n\t"
12065#endif
12066#else
12067 "ubfx lr, r10, #16, #8\n\t"
12068#endif
12069 "eor r4, r4, r2, lsl #24\n\t"
12070 "lsr r2, r9, #24\n\t"
12071 "ldrb r5, [r0, r5, lsl #2]\n\t"
12072 "ldrb r7, [r0, r7, lsl #2]\n\t"
12073 "ldrb lr, [r0, lr, lsl #2]\n\t"
12074 "ldrb r2, [r0, r2, lsl #2]\n\t"
12075#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12077 "lsl r6, r9, #24\n\t"
12078 "lsr r6, r6, #24\n\t"
12079#else
12080 "uxtb r6, r9\n\t"
12081#endif
12082#else
12083 "ubfx r6, r9, #0, #8\n\t"
12084#endif
12085 "eor r5, r5, r7, lsl #8\n\t"
12086#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12087#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12088 "lsl r7, r8, #16\n\t"
12089 "lsr r7, r7, #24\n\t"
12090#else
12091 "uxtb r7, r8, ror #8\n\t"
12092#endif
12093#else
12094 "ubfx r7, r8, #8, #8\n\t"
12095#endif
12096 "eor r5, r5, lr, lsl #16\n\t"
12097#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12098#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12099 "lsl lr, r11, #8\n\t"
12100 "lsr lr, lr, #24\n\t"
12101#else
12102 "uxtb lr, r11, ror #16\n\t"
12103#endif
12104#else
12105 "ubfx lr, r11, #16, #8\n\t"
12106#endif
12107 "eor r5, r5, r2, lsl #24\n\t"
12108 "lsr r2, r10, #24\n\t"
12109 "ldrb r6, [r0, r6, lsl #2]\n\t"
12110 "ldrb r7, [r0, r7, lsl #2]\n\t"
12111 "ldrb lr, [r0, lr, lsl #2]\n\t"
12112 "ldrb r2, [r0, r2, lsl #2]\n\t"
12113 "lsr r11, r11, #24\n\t"
12114 "eor r6, r6, r7, lsl #8\n\t"
12115#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12116#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12117 "lsl r7, r10, #24\n\t"
12118 "lsr r7, r7, #24\n\t"
12119#else
12120 "uxtb r7, r10\n\t"
12121#endif
12122#else
12123 "ubfx r7, r10, #0, #8\n\t"
12124#endif
12125 "eor r6, r6, lr, lsl #16\n\t"
12126#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12127#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12128 "lsl lr, r9, #16\n\t"
12129 "lsr lr, lr, #24\n\t"
12130#else
12131 "uxtb lr, r9, ror #8\n\t"
12132#endif
12133#else
12134 "ubfx lr, r9, #8, #8\n\t"
12135#endif
12136 "eor r6, r6, r2, lsl #24\n\t"
12137#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12138#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12139 "lsl r2, r8, #8\n\t"
12140 "lsr r2, r2, #24\n\t"
12141#else
12142 "uxtb r2, r8, ror #16\n\t"
12143#endif
12144#else
12145 "ubfx r2, r8, #16, #8\n\t"
12146#endif
12147 "ldrb r11, [r0, r11, lsl #2]\n\t"
12148 "ldrb r7, [r0, r7, lsl #2]\n\t"
12149 "ldrb lr, [r0, lr, lsl #2]\n\t"
12150 "ldrb r2, [r0, r2, lsl #2]\n\t"
12151 "eor lr, lr, r11, lsl #16\n\t"
12152 "ldm %[ks], {r8, r9, r10, r11}\n\t"
12153 "eor r7, r7, lr, lsl #8\n\t"
12154 "eor r7, r7, r2, lsl #16\n\t"
12155 /* XOR in Key Schedule */
12156 "eor r4, r4, r8\n\t"
12157 "eor r5, r5, r9\n\t"
12158 "eor r6, r6, r10\n\t"
12159 "eor r7, r7, r11\n\t"
12160#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
12161 "pop {r1, %[len], lr}\n\t"
12162 "ldr %[ks], [sp]\n\t"
12163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12164 "eor r8, r4, r4, ror #16\n\t"
12165 "eor r9, r5, r5, ror #16\n\t"
12166 "eor r10, r6, r6, ror #16\n\t"
12167 "eor r11, r7, r7, ror #16\n\t"
12168 "bic r8, r8, #0xff0000\n\t"
12169 "bic r9, r9, #0xff0000\n\t"
12170 "bic r10, r10, #0xff0000\n\t"
12171 "bic r11, r11, #0xff0000\n\t"
12172 "ror r4, r4, #8\n\t"
12173 "ror r5, r5, #8\n\t"
12174 "ror r6, r6, #8\n\t"
12175 "ror r7, r7, #8\n\t"
12176 "eor r4, r4, r8, lsr #8\n\t"
12177 "eor r5, r5, r9, lsr #8\n\t"
12178 "eor r6, r6, r10, lsr #8\n\t"
12179 "eor r7, r7, r11, lsr #8\n\t"
12180#else
12181 "rev r4, r4\n\t"
12182 "rev r5, r5\n\t"
12183 "rev r6, r6\n\t"
12184 "rev r7, r7\n\t"
12185#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
12186 "str r4, [%[out]]\n\t"
12187 "str r5, [%[out], #4]\n\t"
12188 "str r6, [%[out], #8]\n\t"
12189 "str r7, [%[out], #12]\n\t"
12190 "subs %[len], %[len], #16\n\t"
12191 "add lr, lr, #16\n\t"
12192 "add %[out], %[out], #16\n\t"
12193 "bne L_AES_ECB_encrypt_loop_block_128_%=\n\t"
12194 "\n"
12195 "L_AES_ECB_encrypt_end_%=:\n\t"
12196 "pop {%[ks]}\n\t"
12197 "pop {%[nr], %[L_AES_ARM32_te_ecb]}\n\t"
12198#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
12199 : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
12200 [nr] "+r" (nr), [L_AES_ARM32_te_ecb] "+r" (L_AES_ARM32_te_ecb_c)
12201 :
12202#else
12203 :
12204 : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
12205 [nr] "r" (nr), [L_AES_ARM32_te_ecb] "r" (L_AES_ARM32_te_ecb_c)
12206#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
12207 : "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
12208 );
12209}
12210
12211#endif /* HAVE_AESCCM || HAVE_AESGCM || WOLFSSL_AES_DIRECT ||
12212 * WOLFSSL_AES_COUNTER || HAVE_AES_ECB */
12213#ifdef HAVE_AES_CBC
12214static const word32* L_AES_ARM32_te_cbc = L_AES_ARM32_te_data;
12215void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p,
12216 unsigned long len_p, const unsigned char* ks_p, int nr_p,
12217 unsigned char* iv_p);
12218#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
12219WC_OMIT_FRAME_POINTER void AES_CBC_encrypt(const unsigned char* in_p,
12220 unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
12221 int nr_p, unsigned char* iv_p)
12222#else
12223WC_OMIT_FRAME_POINTER void AES_CBC_encrypt(const unsigned char* in,
12224 unsigned char* out, unsigned long len, const unsigned char* ks, int nr,
12225 unsigned char* iv)
12226#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
12227{
12228#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
12229 register const unsigned char* in __asm__ ("r0") =
12230 (const unsigned char*)in_p;
12231 register unsigned char* out __asm__ ("r1") = (unsigned char*)out_p;
12232 register unsigned long len __asm__ ("r2") = (unsigned long)len_p;
12233 register const unsigned char* ks __asm__ ("r3") =
12234 (const unsigned char*)ks_p;
12235 register int nr __asm__ ("r12") = (int)nr_p;
12236 register unsigned char* iv __asm__ ("lr") = (unsigned char*)iv_p;
12237 register word32* L_AES_ARM32_te_cbc_c __asm__ ("r4") =
12238 (word32*)L_AES_ARM32_te_cbc;
12239#else
12240 register word32* L_AES_ARM32_te_cbc_c = (word32*)L_AES_ARM32_te_cbc;
12241#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
12242
12243 __asm__ __volatile__ (
12244 "push {%[L_AES_ARM32_te_cbc]}\n\t"
12245 "push {%[nr], %[iv]}\n\t"
12246 "ldr r8, [sp]\n\t"
12247 "ldr r9, [sp, #4]\n\t"
12248 "mov lr, %[in]\n\t"
12249 "ldr r0, [sp, #8]\n\t"
12250 "ldm r9, {r4, r5, r6, r7}\n\t"
12251 "push {%[ks], r9}\n\t"
12252 "cmp r8, #10\n\t"
12253 "beq L_AES_CBC_encrypt_start_block_128_%=\n\t"
12254 "cmp r8, #12\n\t"
12255 "beq L_AES_CBC_encrypt_start_block_192_%=\n\t"
12256 "\n"
12257 "L_AES_CBC_encrypt_loop_block_256_%=:\n\t"
12258 "ldr r8, [lr]\n\t"
12259 "ldr r9, [lr, #4]\n\t"
12260 "ldr r10, [lr, #8]\n\t"
12261 "ldr r11, [lr, #12]\n\t"
12262 "eor r4, r4, r8\n\t"
12263 "eor r5, r5, r9\n\t"
12264 "eor r6, r6, r10\n\t"
12265 "eor r7, r7, r11\n\t"
12266 "push {r1, %[len], lr}\n\t"
12267#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12268 "eor r8, r4, r4, ror #16\n\t"
12269 "eor r9, r5, r5, ror #16\n\t"
12270 "eor r10, r6, r6, ror #16\n\t"
12271 "eor r11, r7, r7, ror #16\n\t"
12272 "bic r8, r8, #0xff0000\n\t"
12273 "bic r9, r9, #0xff0000\n\t"
12274 "bic r10, r10, #0xff0000\n\t"
12275 "bic r11, r11, #0xff0000\n\t"
12276 "ror r4, r4, #8\n\t"
12277 "ror r5, r5, #8\n\t"
12278 "ror r6, r6, #8\n\t"
12279 "ror r7, r7, #8\n\t"
12280 "eor r4, r4, r8, lsr #8\n\t"
12281 "eor r5, r5, r9, lsr #8\n\t"
12282 "eor r6, r6, r10, lsr #8\n\t"
12283 "eor r7, r7, r11, lsr #8\n\t"
12284#else
12285 "rev r4, r4\n\t"
12286 "rev r5, r5\n\t"
12287 "rev r6, r6\n\t"
12288 "rev r7, r7\n\t"
12289#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
12290 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
12291 /* Round: 0 - XOR in key schedule */
12292 "eor r4, r4, r8\n\t"
12293 "eor r5, r5, r9\n\t"
12294 "eor r6, r6, r10\n\t"
12295 "eor r7, r7, r11\n\t"
12296 "mov r1, #6\n\t"
12297#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
12298 "bl AES_encrypt_block\n\t"
12299#else
12300 "\n"
12301 "L_AES_CBC_encrypt_block_nr_256_%=:\n\t"
12302#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12303#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12304 "lsl r8, r5, #8\n\t"
12305 "lsr r8, r8, #24\n\t"
12306#else
12307 "uxtb r8, r5, ror #16\n\t"
12308#endif
12309#else
12310 "ubfx r8, r5, #16, #8\n\t"
12311#endif
12312 "lsr r11, r4, #24\n\t"
12313#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12314#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12315 "lsl lr, r6, #16\n\t"
12316 "lsr lr, lr, #24\n\t"
12317#else
12318 "uxtb lr, r6, ror #8\n\t"
12319#endif
12320#else
12321 "ubfx lr, r6, #8, #8\n\t"
12322#endif
12323#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12324#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12325 "lsl r2, r7, #24\n\t"
12326 "lsr r2, r2, #24\n\t"
12327#else
12328 "uxtb r2, r7\n\t"
12329#endif
12330#else
12331 "ubfx r2, r7, #0, #8\n\t"
12332#endif
12333 "ldr r8, [r0, r8, lsl #2]\n\t"
12334 "ldr r11, [r0, r11, lsl #2]\n\t"
12335 "ldr lr, [r0, lr, lsl #2]\n\t"
12336 "ldr r2, [r0, r2, lsl #2]\n\t"
12337#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12338#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12339 "lsl r9, r6, #8\n\t"
12340 "lsr r9, r9, #24\n\t"
12341#else
12342 "uxtb r9, r6, ror #16\n\t"
12343#endif
12344#else
12345 "ubfx r9, r6, #16, #8\n\t"
12346#endif
12347 "eor r8, r8, r11, ror #24\n\t"
12348 "lsr r11, r5, #24\n\t"
12349 "eor r8, r8, lr, ror #8\n\t"
12350#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12351#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12352 "lsl lr, r7, #16\n\t"
12353 "lsr lr, lr, #24\n\t"
12354#else
12355 "uxtb lr, r7, ror #8\n\t"
12356#endif
12357#else
12358 "ubfx lr, r7, #8, #8\n\t"
12359#endif
12360 "eor r8, r8, r2, ror #16\n\t"
12361#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12362#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12363 "lsl r2, r4, #24\n\t"
12364 "lsr r2, r2, #24\n\t"
12365#else
12366 "uxtb r2, r4\n\t"
12367#endif
12368#else
12369 "ubfx r2, r4, #0, #8\n\t"
12370#endif
12371 "ldr r9, [r0, r9, lsl #2]\n\t"
12372 "ldr r11, [r0, r11, lsl #2]\n\t"
12373 "ldr lr, [r0, lr, lsl #2]\n\t"
12374 "ldr r2, [r0, r2, lsl #2]\n\t"
12375#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12376#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12377 "lsl r10, r7, #8\n\t"
12378 "lsr r10, r10, #24\n\t"
12379#else
12380 "uxtb r10, r7, ror #16\n\t"
12381#endif
12382#else
12383 "ubfx r10, r7, #16, #8\n\t"
12384#endif
12385 "eor r9, r9, r11, ror #24\n\t"
12386 "lsr r11, r6, #24\n\t"
12387 "eor r9, r9, lr, ror #8\n\t"
12388#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12389#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12390 "lsl lr, r4, #16\n\t"
12391 "lsr lr, lr, #24\n\t"
12392#else
12393 "uxtb lr, r4, ror #8\n\t"
12394#endif
12395#else
12396 "ubfx lr, r4, #8, #8\n\t"
12397#endif
12398 "eor r9, r9, r2, ror #16\n\t"
12399#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12400#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12401 "lsl r2, r5, #24\n\t"
12402 "lsr r2, r2, #24\n\t"
12403#else
12404 "uxtb r2, r5\n\t"
12405#endif
12406#else
12407 "ubfx r2, r5, #0, #8\n\t"
12408#endif
12409 "ldr r10, [r0, r10, lsl #2]\n\t"
12410 "ldr r11, [r0, r11, lsl #2]\n\t"
12411 "ldr lr, [r0, lr, lsl #2]\n\t"
12412 "ldr r2, [r0, r2, lsl #2]\n\t"
12413#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12414#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12415 "lsl r6, r6, #24\n\t"
12416 "lsr r6, r6, #24\n\t"
12417#else
12418 "uxtb r6, r6\n\t"
12419#endif
12420#else
12421 "ubfx r6, r6, #0, #8\n\t"
12422#endif
12423 "eor r10, r10, r11, ror #24\n\t"
12424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12425#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12426 "lsl r11, r4, #8\n\t"
12427 "lsr r11, r11, #24\n\t"
12428#else
12429 "uxtb r11, r4, ror #16\n\t"
12430#endif
12431#else
12432 "ubfx r11, r4, #16, #8\n\t"
12433#endif
12434 "eor r10, r10, lr, ror #8\n\t"
12435 "lsr lr, r7, #24\n\t"
12436 "eor r10, r10, r2, ror #16\n\t"
12437#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12438#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12439 "lsl r2, r5, #16\n\t"
12440 "lsr r2, r2, #24\n\t"
12441#else
12442 "uxtb r2, r5, ror #8\n\t"
12443#endif
12444#else
12445 "ubfx r2, r5, #8, #8\n\t"
12446#endif
12447 "ldr r6, [r0, r6, lsl #2]\n\t"
12448 "ldr lr, [r0, lr, lsl #2]\n\t"
12449 "ldr r11, [r0, r11, lsl #2]\n\t"
12450 "ldr r2, [r0, r2, lsl #2]\n\t"
12451 "eor lr, lr, r6, ror #24\n\t"
12452 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
12453 "eor r11, r11, lr, ror #24\n\t"
12454 "eor r11, r11, r2, ror #8\n\t"
12455 /* XOR in Key Schedule */
12456 "eor r8, r8, r4\n\t"
12457 "eor r9, r9, r5\n\t"
12458 "eor r10, r10, r6\n\t"
12459 "eor r11, r11, r7\n\t"
12460#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12461#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12462 "lsl r4, r9, #8\n\t"
12463 "lsr r4, r4, #24\n\t"
12464#else
12465 "uxtb r4, r9, ror #16\n\t"
12466#endif
12467#else
12468 "ubfx r4, r9, #16, #8\n\t"
12469#endif
12470 "lsr r7, r8, #24\n\t"
12471#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12472#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12473 "lsl lr, r10, #16\n\t"
12474 "lsr lr, lr, #24\n\t"
12475#else
12476 "uxtb lr, r10, ror #8\n\t"
12477#endif
12478#else
12479 "ubfx lr, r10, #8, #8\n\t"
12480#endif
12481#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12482#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12483 "lsl r2, r11, #24\n\t"
12484 "lsr r2, r2, #24\n\t"
12485#else
12486 "uxtb r2, r11\n\t"
12487#endif
12488#else
12489 "ubfx r2, r11, #0, #8\n\t"
12490#endif
12491 "ldr r4, [r0, r4, lsl #2]\n\t"
12492 "ldr r7, [r0, r7, lsl #2]\n\t"
12493 "ldr lr, [r0, lr, lsl #2]\n\t"
12494 "ldr r2, [r0, r2, lsl #2]\n\t"
12495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12496#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12497 "lsl r5, r10, #8\n\t"
12498 "lsr r5, r5, #24\n\t"
12499#else
12500 "uxtb r5, r10, ror #16\n\t"
12501#endif
12502#else
12503 "ubfx r5, r10, #16, #8\n\t"
12504#endif
12505 "eor r4, r4, r7, ror #24\n\t"
12506 "lsr r7, r9, #24\n\t"
12507 "eor r4, r4, lr, ror #8\n\t"
12508#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12509#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12510 "lsl lr, r11, #16\n\t"
12511 "lsr lr, lr, #24\n\t"
12512#else
12513 "uxtb lr, r11, ror #8\n\t"
12514#endif
12515#else
12516 "ubfx lr, r11, #8, #8\n\t"
12517#endif
12518 "eor r4, r4, r2, ror #16\n\t"
12519#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12520#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12521 "lsl r2, r8, #24\n\t"
12522 "lsr r2, r2, #24\n\t"
12523#else
12524 "uxtb r2, r8\n\t"
12525#endif
12526#else
12527 "ubfx r2, r8, #0, #8\n\t"
12528#endif
12529 "ldr r5, [r0, r5, lsl #2]\n\t"
12530 "ldr r7, [r0, r7, lsl #2]\n\t"
12531 "ldr lr, [r0, lr, lsl #2]\n\t"
12532 "ldr r2, [r0, r2, lsl #2]\n\t"
12533#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12534#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12535 "lsl r6, r11, #8\n\t"
12536 "lsr r6, r6, #24\n\t"
12537#else
12538 "uxtb r6, r11, ror #16\n\t"
12539#endif
12540#else
12541 "ubfx r6, r11, #16, #8\n\t"
12542#endif
12543 "eor r5, r5, r7, ror #24\n\t"
12544 "lsr r7, r10, #24\n\t"
12545 "eor r5, r5, lr, ror #8\n\t"
12546#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12547#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12548 "lsl lr, r8, #16\n\t"
12549 "lsr lr, lr, #24\n\t"
12550#else
12551 "uxtb lr, r8, ror #8\n\t"
12552#endif
12553#else
12554 "ubfx lr, r8, #8, #8\n\t"
12555#endif
12556 "eor r5, r5, r2, ror #16\n\t"
12557#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12558#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12559 "lsl r2, r9, #24\n\t"
12560 "lsr r2, r2, #24\n\t"
12561#else
12562 "uxtb r2, r9\n\t"
12563#endif
12564#else
12565 "ubfx r2, r9, #0, #8\n\t"
12566#endif
12567 "ldr r6, [r0, r6, lsl #2]\n\t"
12568 "ldr r7, [r0, r7, lsl #2]\n\t"
12569 "ldr lr, [r0, lr, lsl #2]\n\t"
12570 "ldr r2, [r0, r2, lsl #2]\n\t"
12571#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12572#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12573 "lsl r10, r10, #24\n\t"
12574 "lsr r10, r10, #24\n\t"
12575#else
12576 "uxtb r10, r10\n\t"
12577#endif
12578#else
12579 "ubfx r10, r10, #0, #8\n\t"
12580#endif
12581 "eor r6, r6, r7, ror #24\n\t"
12582#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12583#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12584 "lsl r7, r8, #8\n\t"
12585 "lsr r7, r7, #24\n\t"
12586#else
12587 "uxtb r7, r8, ror #16\n\t"
12588#endif
12589#else
12590 "ubfx r7, r8, #16, #8\n\t"
12591#endif
12592 "eor r6, r6, lr, ror #8\n\t"
12593 "lsr lr, r11, #24\n\t"
12594 "eor r6, r6, r2, ror #16\n\t"
12595#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12596#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12597 "lsl r2, r9, #16\n\t"
12598 "lsr r2, r2, #24\n\t"
12599#else
12600 "uxtb r2, r9, ror #8\n\t"
12601#endif
12602#else
12603 "ubfx r2, r9, #8, #8\n\t"
12604#endif
12605 "ldr r10, [r0, r10, lsl #2]\n\t"
12606 "ldr lr, [r0, lr, lsl #2]\n\t"
12607 "ldr r7, [r0, r7, lsl #2]\n\t"
12608 "ldr r2, [r0, r2, lsl #2]\n\t"
12609 "eor lr, lr, r10, ror #24\n\t"
12610 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
12611 "eor r7, r7, lr, ror #24\n\t"
12612 "eor r7, r7, r2, ror #8\n\t"
12613 /* XOR in Key Schedule */
12614 "eor r4, r4, r8\n\t"
12615 "eor r5, r5, r9\n\t"
12616 "eor r6, r6, r10\n\t"
12617 "eor r7, r7, r11\n\t"
12618 "subs r1, r1, #1\n\t"
12619 "bne L_AES_CBC_encrypt_block_nr_256_%=\n\t"
12620#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12621#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12622 "lsl r8, r5, #8\n\t"
12623 "lsr r8, r8, #24\n\t"
12624#else
12625 "uxtb r8, r5, ror #16\n\t"
12626#endif
12627#else
12628 "ubfx r8, r5, #16, #8\n\t"
12629#endif
12630 "lsr r11, r4, #24\n\t"
12631#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12632#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12633 "lsl lr, r6, #16\n\t"
12634 "lsr lr, lr, #24\n\t"
12635#else
12636 "uxtb lr, r6, ror #8\n\t"
12637#endif
12638#else
12639 "ubfx lr, r6, #8, #8\n\t"
12640#endif
12641#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12642#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12643 "lsl r2, r7, #24\n\t"
12644 "lsr r2, r2, #24\n\t"
12645#else
12646 "uxtb r2, r7\n\t"
12647#endif
12648#else
12649 "ubfx r2, r7, #0, #8\n\t"
12650#endif
12651 "ldr r8, [r0, r8, lsl #2]\n\t"
12652 "ldr r11, [r0, r11, lsl #2]\n\t"
12653 "ldr lr, [r0, lr, lsl #2]\n\t"
12654 "ldr r2, [r0, r2, lsl #2]\n\t"
12655#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12656#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12657 "lsl r9, r6, #8\n\t"
12658 "lsr r9, r9, #24\n\t"
12659#else
12660 "uxtb r9, r6, ror #16\n\t"
12661#endif
12662#else
12663 "ubfx r9, r6, #16, #8\n\t"
12664#endif
12665 "eor r8, r8, r11, ror #24\n\t"
12666 "lsr r11, r5, #24\n\t"
12667 "eor r8, r8, lr, ror #8\n\t"
12668#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12669#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12670 "lsl lr, r7, #16\n\t"
12671 "lsr lr, lr, #24\n\t"
12672#else
12673 "uxtb lr, r7, ror #8\n\t"
12674#endif
12675#else
12676 "ubfx lr, r7, #8, #8\n\t"
12677#endif
12678 "eor r8, r8, r2, ror #16\n\t"
12679#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12680#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12681 "lsl r2, r4, #24\n\t"
12682 "lsr r2, r2, #24\n\t"
12683#else
12684 "uxtb r2, r4\n\t"
12685#endif
12686#else
12687 "ubfx r2, r4, #0, #8\n\t"
12688#endif
12689 "ldr r9, [r0, r9, lsl #2]\n\t"
12690 "ldr r11, [r0, r11, lsl #2]\n\t"
12691 "ldr lr, [r0, lr, lsl #2]\n\t"
12692 "ldr r2, [r0, r2, lsl #2]\n\t"
12693#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12694#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12695 "lsl r10, r7, #8\n\t"
12696 "lsr r10, r10, #24\n\t"
12697#else
12698 "uxtb r10, r7, ror #16\n\t"
12699#endif
12700#else
12701 "ubfx r10, r7, #16, #8\n\t"
12702#endif
12703 "eor r9, r9, r11, ror #24\n\t"
12704 "lsr r11, r6, #24\n\t"
12705 "eor r9, r9, lr, ror #8\n\t"
12706#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12707#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12708 "lsl lr, r4, #16\n\t"
12709 "lsr lr, lr, #24\n\t"
12710#else
12711 "uxtb lr, r4, ror #8\n\t"
12712#endif
12713#else
12714 "ubfx lr, r4, #8, #8\n\t"
12715#endif
12716 "eor r9, r9, r2, ror #16\n\t"
12717#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12718#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12719 "lsl r2, r5, #24\n\t"
12720 "lsr r2, r2, #24\n\t"
12721#else
12722 "uxtb r2, r5\n\t"
12723#endif
12724#else
12725 "ubfx r2, r5, #0, #8\n\t"
12726#endif
12727 "ldr r10, [r0, r10, lsl #2]\n\t"
12728 "ldr r11, [r0, r11, lsl #2]\n\t"
12729 "ldr lr, [r0, lr, lsl #2]\n\t"
12730 "ldr r2, [r0, r2, lsl #2]\n\t"
12731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12733 "lsl r6, r6, #24\n\t"
12734 "lsr r6, r6, #24\n\t"
12735#else
12736 "uxtb r6, r6\n\t"
12737#endif
12738#else
12739 "ubfx r6, r6, #0, #8\n\t"
12740#endif
12741 "eor r10, r10, r11, ror #24\n\t"
12742#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12743#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12744 "lsl r11, r4, #8\n\t"
12745 "lsr r11, r11, #24\n\t"
12746#else
12747 "uxtb r11, r4, ror #16\n\t"
12748#endif
12749#else
12750 "ubfx r11, r4, #16, #8\n\t"
12751#endif
12752 "eor r10, r10, lr, ror #8\n\t"
12753 "lsr lr, r7, #24\n\t"
12754 "eor r10, r10, r2, ror #16\n\t"
12755#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12756#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12757 "lsl r2, r5, #16\n\t"
12758 "lsr r2, r2, #24\n\t"
12759#else
12760 "uxtb r2, r5, ror #8\n\t"
12761#endif
12762#else
12763 "ubfx r2, r5, #8, #8\n\t"
12764#endif
12765 "ldr r6, [r0, r6, lsl #2]\n\t"
12766 "ldr lr, [r0, lr, lsl #2]\n\t"
12767 "ldr r11, [r0, r11, lsl #2]\n\t"
12768 "ldr r2, [r0, r2, lsl #2]\n\t"
12769 "eor lr, lr, r6, ror #24\n\t"
12770 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
12771 "eor r11, r11, lr, ror #24\n\t"
12772 "eor r11, r11, r2, ror #8\n\t"
12773 /* XOR in Key Schedule */
12774 "eor r8, r8, r4\n\t"
12775 "eor r9, r9, r5\n\t"
12776 "eor r10, r10, r6\n\t"
12777 "eor r11, r11, r7\n\t"
12778#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12779#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12780 "lsl r4, r11, #24\n\t"
12781 "lsr r4, r4, #24\n\t"
12782#else
12783 "uxtb r4, r11\n\t"
12784#endif
12785#else
12786 "ubfx r4, r11, #0, #8\n\t"
12787#endif
12788#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12789#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12790 "lsl r7, r10, #16\n\t"
12791 "lsr r7, r7, #24\n\t"
12792#else
12793 "uxtb r7, r10, ror #8\n\t"
12794#endif
12795#else
12796 "ubfx r7, r10, #8, #8\n\t"
12797#endif
12798#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12799#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12800 "lsl lr, r9, #8\n\t"
12801 "lsr lr, lr, #24\n\t"
12802#else
12803 "uxtb lr, r9, ror #16\n\t"
12804#endif
12805#else
12806 "ubfx lr, r9, #16, #8\n\t"
12807#endif
12808 "lsr r2, r8, #24\n\t"
12809 "ldrb r4, [r0, r4, lsl #2]\n\t"
12810 "ldrb r7, [r0, r7, lsl #2]\n\t"
12811 "ldrb lr, [r0, lr, lsl #2]\n\t"
12812 "ldrb r2, [r0, r2, lsl #2]\n\t"
12813#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12814#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12815 "lsl r5, r8, #24\n\t"
12816 "lsr r5, r5, #24\n\t"
12817#else
12818 "uxtb r5, r8\n\t"
12819#endif
12820#else
12821 "ubfx r5, r8, #0, #8\n\t"
12822#endif
12823 "eor r4, r4, r7, lsl #8\n\t"
12824#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12825#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12826 "lsl r7, r11, #16\n\t"
12827 "lsr r7, r7, #24\n\t"
12828#else
12829 "uxtb r7, r11, ror #8\n\t"
12830#endif
12831#else
12832 "ubfx r7, r11, #8, #8\n\t"
12833#endif
12834 "eor r4, r4, lr, lsl #16\n\t"
12835#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12836#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12837 "lsl lr, r10, #8\n\t"
12838 "lsr lr, lr, #24\n\t"
12839#else
12840 "uxtb lr, r10, ror #16\n\t"
12841#endif
12842#else
12843 "ubfx lr, r10, #16, #8\n\t"
12844#endif
12845 "eor r4, r4, r2, lsl #24\n\t"
12846 "lsr r2, r9, #24\n\t"
12847 "ldrb r5, [r0, r5, lsl #2]\n\t"
12848 "ldrb r7, [r0, r7, lsl #2]\n\t"
12849 "ldrb lr, [r0, lr, lsl #2]\n\t"
12850 "ldrb r2, [r0, r2, lsl #2]\n\t"
12851#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12852#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12853 "lsl r6, r9, #24\n\t"
12854 "lsr r6, r6, #24\n\t"
12855#else
12856 "uxtb r6, r9\n\t"
12857#endif
12858#else
12859 "ubfx r6, r9, #0, #8\n\t"
12860#endif
12861 "eor r5, r5, r7, lsl #8\n\t"
12862#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12863#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12864 "lsl r7, r8, #16\n\t"
12865 "lsr r7, r7, #24\n\t"
12866#else
12867 "uxtb r7, r8, ror #8\n\t"
12868#endif
12869#else
12870 "ubfx r7, r8, #8, #8\n\t"
12871#endif
12872 "eor r5, r5, lr, lsl #16\n\t"
12873#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12874#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12875 "lsl lr, r11, #8\n\t"
12876 "lsr lr, lr, #24\n\t"
12877#else
12878 "uxtb lr, r11, ror #16\n\t"
12879#endif
12880#else
12881 "ubfx lr, r11, #16, #8\n\t"
12882#endif
12883 "eor r5, r5, r2, lsl #24\n\t"
12884 "lsr r2, r10, #24\n\t"
12885 "ldrb r6, [r0, r6, lsl #2]\n\t"
12886 "ldrb r7, [r0, r7, lsl #2]\n\t"
12887 "ldrb lr, [r0, lr, lsl #2]\n\t"
12888 "ldrb r2, [r0, r2, lsl #2]\n\t"
12889 "lsr r11, r11, #24\n\t"
12890 "eor r6, r6, r7, lsl #8\n\t"
12891#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12892#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12893 "lsl r7, r10, #24\n\t"
12894 "lsr r7, r7, #24\n\t"
12895#else
12896 "uxtb r7, r10\n\t"
12897#endif
12898#else
12899 "ubfx r7, r10, #0, #8\n\t"
12900#endif
12901 "eor r6, r6, lr, lsl #16\n\t"
12902#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12903#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12904 "lsl lr, r9, #16\n\t"
12905 "lsr lr, lr, #24\n\t"
12906#else
12907 "uxtb lr, r9, ror #8\n\t"
12908#endif
12909#else
12910 "ubfx lr, r9, #8, #8\n\t"
12911#endif
12912 "eor r6, r6, r2, lsl #24\n\t"
12913#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
12914#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12915 "lsl r2, r8, #8\n\t"
12916 "lsr r2, r2, #24\n\t"
12917#else
12918 "uxtb r2, r8, ror #16\n\t"
12919#endif
12920#else
12921 "ubfx r2, r8, #16, #8\n\t"
12922#endif
12923 "ldrb r11, [r0, r11, lsl #2]\n\t"
12924 "ldrb r7, [r0, r7, lsl #2]\n\t"
12925 "ldrb lr, [r0, lr, lsl #2]\n\t"
12926 "ldrb r2, [r0, r2, lsl #2]\n\t"
12927 "eor lr, lr, r11, lsl #16\n\t"
12928 "ldm %[ks], {r8, r9, r10, r11}\n\t"
12929 "eor r7, r7, lr, lsl #8\n\t"
12930 "eor r7, r7, r2, lsl #16\n\t"
12931 /* XOR in Key Schedule */
12932 "eor r4, r4, r8\n\t"
12933 "eor r5, r5, r9\n\t"
12934 "eor r6, r6, r10\n\t"
12935 "eor r7, r7, r11\n\t"
12936#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
12937 "pop {r1, %[len], lr}\n\t"
12938 "ldr %[ks], [sp]\n\t"
12939#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12940 "eor r8, r4, r4, ror #16\n\t"
12941 "eor r9, r5, r5, ror #16\n\t"
12942 "eor r10, r6, r6, ror #16\n\t"
12943 "eor r11, r7, r7, ror #16\n\t"
12944 "bic r8, r8, #0xff0000\n\t"
12945 "bic r9, r9, #0xff0000\n\t"
12946 "bic r10, r10, #0xff0000\n\t"
12947 "bic r11, r11, #0xff0000\n\t"
12948 "ror r4, r4, #8\n\t"
12949 "ror r5, r5, #8\n\t"
12950 "ror r6, r6, #8\n\t"
12951 "ror r7, r7, #8\n\t"
12952 "eor r4, r4, r8, lsr #8\n\t"
12953 "eor r5, r5, r9, lsr #8\n\t"
12954 "eor r6, r6, r10, lsr #8\n\t"
12955 "eor r7, r7, r11, lsr #8\n\t"
12956#else
12957 "rev r4, r4\n\t"
12958 "rev r5, r5\n\t"
12959 "rev r6, r6\n\t"
12960 "rev r7, r7\n\t"
12961#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
12962 "str r4, [%[out]]\n\t"
12963 "str r5, [%[out], #4]\n\t"
12964 "str r6, [%[out], #8]\n\t"
12965 "str r7, [%[out], #12]\n\t"
12966 "subs %[len], %[len], #16\n\t"
12967 "add lr, lr, #16\n\t"
12968 "add %[out], %[out], #16\n\t"
12969 "bne L_AES_CBC_encrypt_loop_block_256_%=\n\t"
12970 "b L_AES_CBC_encrypt_end_%=\n\t"
12971 "\n"
12972 "L_AES_CBC_encrypt_start_block_192_%=:\n\t"
12973 "\n"
12974 "L_AES_CBC_encrypt_loop_block_192_%=:\n\t"
12975 "ldr r8, [lr]\n\t"
12976 "ldr r9, [lr, #4]\n\t"
12977 "ldr r10, [lr, #8]\n\t"
12978 "ldr r11, [lr, #12]\n\t"
12979 "eor r4, r4, r8\n\t"
12980 "eor r5, r5, r9\n\t"
12981 "eor r6, r6, r10\n\t"
12982 "eor r7, r7, r11\n\t"
12983 "push {r1, %[len], lr}\n\t"
12984#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
12985 "eor r8, r4, r4, ror #16\n\t"
12986 "eor r9, r5, r5, ror #16\n\t"
12987 "eor r10, r6, r6, ror #16\n\t"
12988 "eor r11, r7, r7, ror #16\n\t"
12989 "bic r8, r8, #0xff0000\n\t"
12990 "bic r9, r9, #0xff0000\n\t"
12991 "bic r10, r10, #0xff0000\n\t"
12992 "bic r11, r11, #0xff0000\n\t"
12993 "ror r4, r4, #8\n\t"
12994 "ror r5, r5, #8\n\t"
12995 "ror r6, r6, #8\n\t"
12996 "ror r7, r7, #8\n\t"
12997 "eor r4, r4, r8, lsr #8\n\t"
12998 "eor r5, r5, r9, lsr #8\n\t"
12999 "eor r6, r6, r10, lsr #8\n\t"
13000 "eor r7, r7, r11, lsr #8\n\t"
13001#else
13002 "rev r4, r4\n\t"
13003 "rev r5, r5\n\t"
13004 "rev r6, r6\n\t"
13005 "rev r7, r7\n\t"
13006#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
13007 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
13008 /* Round: 0 - XOR in key schedule */
13009 "eor r4, r4, r8\n\t"
13010 "eor r5, r5, r9\n\t"
13011 "eor r6, r6, r10\n\t"
13012 "eor r7, r7, r11\n\t"
13013 "mov r1, #5\n\t"
13014#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
13015 "bl AES_encrypt_block\n\t"
13016#else
13017 "\n"
13018 "L_AES_CBC_encrypt_block_nr_192_%=:\n\t"
13019#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13020#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13021 "lsl r8, r5, #8\n\t"
13022 "lsr r8, r8, #24\n\t"
13023#else
13024 "uxtb r8, r5, ror #16\n\t"
13025#endif
13026#else
13027 "ubfx r8, r5, #16, #8\n\t"
13028#endif
13029 "lsr r11, r4, #24\n\t"
13030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13031#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13032 "lsl lr, r6, #16\n\t"
13033 "lsr lr, lr, #24\n\t"
13034#else
13035 "uxtb lr, r6, ror #8\n\t"
13036#endif
13037#else
13038 "ubfx lr, r6, #8, #8\n\t"
13039#endif
13040#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13041#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13042 "lsl r2, r7, #24\n\t"
13043 "lsr r2, r2, #24\n\t"
13044#else
13045 "uxtb r2, r7\n\t"
13046#endif
13047#else
13048 "ubfx r2, r7, #0, #8\n\t"
13049#endif
13050 "ldr r8, [r0, r8, lsl #2]\n\t"
13051 "ldr r11, [r0, r11, lsl #2]\n\t"
13052 "ldr lr, [r0, lr, lsl #2]\n\t"
13053 "ldr r2, [r0, r2, lsl #2]\n\t"
13054#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13055#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13056 "lsl r9, r6, #8\n\t"
13057 "lsr r9, r9, #24\n\t"
13058#else
13059 "uxtb r9, r6, ror #16\n\t"
13060#endif
13061#else
13062 "ubfx r9, r6, #16, #8\n\t"
13063#endif
13064 "eor r8, r8, r11, ror #24\n\t"
13065 "lsr r11, r5, #24\n\t"
13066 "eor r8, r8, lr, ror #8\n\t"
13067#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13068#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13069 "lsl lr, r7, #16\n\t"
13070 "lsr lr, lr, #24\n\t"
13071#else
13072 "uxtb lr, r7, ror #8\n\t"
13073#endif
13074#else
13075 "ubfx lr, r7, #8, #8\n\t"
13076#endif
13077 "eor r8, r8, r2, ror #16\n\t"
13078#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13079#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13080 "lsl r2, r4, #24\n\t"
13081 "lsr r2, r2, #24\n\t"
13082#else
13083 "uxtb r2, r4\n\t"
13084#endif
13085#else
13086 "ubfx r2, r4, #0, #8\n\t"
13087#endif
13088 "ldr r9, [r0, r9, lsl #2]\n\t"
13089 "ldr r11, [r0, r11, lsl #2]\n\t"
13090 "ldr lr, [r0, lr, lsl #2]\n\t"
13091 "ldr r2, [r0, r2, lsl #2]\n\t"
13092#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13093#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13094 "lsl r10, r7, #8\n\t"
13095 "lsr r10, r10, #24\n\t"
13096#else
13097 "uxtb r10, r7, ror #16\n\t"
13098#endif
13099#else
13100 "ubfx r10, r7, #16, #8\n\t"
13101#endif
13102 "eor r9, r9, r11, ror #24\n\t"
13103 "lsr r11, r6, #24\n\t"
13104 "eor r9, r9, lr, ror #8\n\t"
13105#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13107 "lsl lr, r4, #16\n\t"
13108 "lsr lr, lr, #24\n\t"
13109#else
13110 "uxtb lr, r4, ror #8\n\t"
13111#endif
13112#else
13113 "ubfx lr, r4, #8, #8\n\t"
13114#endif
13115 "eor r9, r9, r2, ror #16\n\t"
13116#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13117#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13118 "lsl r2, r5, #24\n\t"
13119 "lsr r2, r2, #24\n\t"
13120#else
13121 "uxtb r2, r5\n\t"
13122#endif
13123#else
13124 "ubfx r2, r5, #0, #8\n\t"
13125#endif
13126 "ldr r10, [r0, r10, lsl #2]\n\t"
13127 "ldr r11, [r0, r11, lsl #2]\n\t"
13128 "ldr lr, [r0, lr, lsl #2]\n\t"
13129 "ldr r2, [r0, r2, lsl #2]\n\t"
13130#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13131#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13132 "lsl r6, r6, #24\n\t"
13133 "lsr r6, r6, #24\n\t"
13134#else
13135 "uxtb r6, r6\n\t"
13136#endif
13137#else
13138 "ubfx r6, r6, #0, #8\n\t"
13139#endif
13140 "eor r10, r10, r11, ror #24\n\t"
13141#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13142#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13143 "lsl r11, r4, #8\n\t"
13144 "lsr r11, r11, #24\n\t"
13145#else
13146 "uxtb r11, r4, ror #16\n\t"
13147#endif
13148#else
13149 "ubfx r11, r4, #16, #8\n\t"
13150#endif
13151 "eor r10, r10, lr, ror #8\n\t"
13152 "lsr lr, r7, #24\n\t"
13153 "eor r10, r10, r2, ror #16\n\t"
13154#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13155#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13156 "lsl r2, r5, #16\n\t"
13157 "lsr r2, r2, #24\n\t"
13158#else
13159 "uxtb r2, r5, ror #8\n\t"
13160#endif
13161#else
13162 "ubfx r2, r5, #8, #8\n\t"
13163#endif
13164 "ldr r6, [r0, r6, lsl #2]\n\t"
13165 "ldr lr, [r0, lr, lsl #2]\n\t"
13166 "ldr r11, [r0, r11, lsl #2]\n\t"
13167 "ldr r2, [r0, r2, lsl #2]\n\t"
13168 "eor lr, lr, r6, ror #24\n\t"
13169 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
13170 "eor r11, r11, lr, ror #24\n\t"
13171 "eor r11, r11, r2, ror #8\n\t"
13172 /* XOR in Key Schedule */
13173 "eor r8, r8, r4\n\t"
13174 "eor r9, r9, r5\n\t"
13175 "eor r10, r10, r6\n\t"
13176 "eor r11, r11, r7\n\t"
13177#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13178#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13179 "lsl r4, r9, #8\n\t"
13180 "lsr r4, r4, #24\n\t"
13181#else
13182 "uxtb r4, r9, ror #16\n\t"
13183#endif
13184#else
13185 "ubfx r4, r9, #16, #8\n\t"
13186#endif
13187 "lsr r7, r8, #24\n\t"
13188#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13189#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13190 "lsl lr, r10, #16\n\t"
13191 "lsr lr, lr, #24\n\t"
13192#else
13193 "uxtb lr, r10, ror #8\n\t"
13194#endif
13195#else
13196 "ubfx lr, r10, #8, #8\n\t"
13197#endif
13198#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13200 "lsl r2, r11, #24\n\t"
13201 "lsr r2, r2, #24\n\t"
13202#else
13203 "uxtb r2, r11\n\t"
13204#endif
13205#else
13206 "ubfx r2, r11, #0, #8\n\t"
13207#endif
13208 "ldr r4, [r0, r4, lsl #2]\n\t"
13209 "ldr r7, [r0, r7, lsl #2]\n\t"
13210 "ldr lr, [r0, lr, lsl #2]\n\t"
13211 "ldr r2, [r0, r2, lsl #2]\n\t"
13212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13213#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13214 "lsl r5, r10, #8\n\t"
13215 "lsr r5, r5, #24\n\t"
13216#else
13217 "uxtb r5, r10, ror #16\n\t"
13218#endif
13219#else
13220 "ubfx r5, r10, #16, #8\n\t"
13221#endif
13222 "eor r4, r4, r7, ror #24\n\t"
13223 "lsr r7, r9, #24\n\t"
13224 "eor r4, r4, lr, ror #8\n\t"
13225#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13226#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13227 "lsl lr, r11, #16\n\t"
13228 "lsr lr, lr, #24\n\t"
13229#else
13230 "uxtb lr, r11, ror #8\n\t"
13231#endif
13232#else
13233 "ubfx lr, r11, #8, #8\n\t"
13234#endif
13235 "eor r4, r4, r2, ror #16\n\t"
13236#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13237#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13238 "lsl r2, r8, #24\n\t"
13239 "lsr r2, r2, #24\n\t"
13240#else
13241 "uxtb r2, r8\n\t"
13242#endif
13243#else
13244 "ubfx r2, r8, #0, #8\n\t"
13245#endif
13246 "ldr r5, [r0, r5, lsl #2]\n\t"
13247 "ldr r7, [r0, r7, lsl #2]\n\t"
13248 "ldr lr, [r0, lr, lsl #2]\n\t"
13249 "ldr r2, [r0, r2, lsl #2]\n\t"
13250#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13251#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13252 "lsl r6, r11, #8\n\t"
13253 "lsr r6, r6, #24\n\t"
13254#else
13255 "uxtb r6, r11, ror #16\n\t"
13256#endif
13257#else
13258 "ubfx r6, r11, #16, #8\n\t"
13259#endif
13260 "eor r5, r5, r7, ror #24\n\t"
13261 "lsr r7, r10, #24\n\t"
13262 "eor r5, r5, lr, ror #8\n\t"
13263#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13264#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13265 "lsl lr, r8, #16\n\t"
13266 "lsr lr, lr, #24\n\t"
13267#else
13268 "uxtb lr, r8, ror #8\n\t"
13269#endif
13270#else
13271 "ubfx lr, r8, #8, #8\n\t"
13272#endif
13273 "eor r5, r5, r2, ror #16\n\t"
13274#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13275#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13276 "lsl r2, r9, #24\n\t"
13277 "lsr r2, r2, #24\n\t"
13278#else
13279 "uxtb r2, r9\n\t"
13280#endif
13281#else
13282 "ubfx r2, r9, #0, #8\n\t"
13283#endif
13284 "ldr r6, [r0, r6, lsl #2]\n\t"
13285 "ldr r7, [r0, r7, lsl #2]\n\t"
13286 "ldr lr, [r0, lr, lsl #2]\n\t"
13287 "ldr r2, [r0, r2, lsl #2]\n\t"
13288#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13289#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13290 "lsl r10, r10, #24\n\t"
13291 "lsr r10, r10, #24\n\t"
13292#else
13293 "uxtb r10, r10\n\t"
13294#endif
13295#else
13296 "ubfx r10, r10, #0, #8\n\t"
13297#endif
13298 "eor r6, r6, r7, ror #24\n\t"
13299#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13300#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13301 "lsl r7, r8, #8\n\t"
13302 "lsr r7, r7, #24\n\t"
13303#else
13304 "uxtb r7, r8, ror #16\n\t"
13305#endif
13306#else
13307 "ubfx r7, r8, #16, #8\n\t"
13308#endif
13309 "eor r6, r6, lr, ror #8\n\t"
13310 "lsr lr, r11, #24\n\t"
13311 "eor r6, r6, r2, ror #16\n\t"
13312#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13313#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13314 "lsl r2, r9, #16\n\t"
13315 "lsr r2, r2, #24\n\t"
13316#else
13317 "uxtb r2, r9, ror #8\n\t"
13318#endif
13319#else
13320 "ubfx r2, r9, #8, #8\n\t"
13321#endif
13322 "ldr r10, [r0, r10, lsl #2]\n\t"
13323 "ldr lr, [r0, lr, lsl #2]\n\t"
13324 "ldr r7, [r0, r7, lsl #2]\n\t"
13325 "ldr r2, [r0, r2, lsl #2]\n\t"
13326 "eor lr, lr, r10, ror #24\n\t"
13327 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
13328 "eor r7, r7, lr, ror #24\n\t"
13329 "eor r7, r7, r2, ror #8\n\t"
13330 /* XOR in Key Schedule */
13331 "eor r4, r4, r8\n\t"
13332 "eor r5, r5, r9\n\t"
13333 "eor r6, r6, r10\n\t"
13334 "eor r7, r7, r11\n\t"
13335 "subs r1, r1, #1\n\t"
13336 "bne L_AES_CBC_encrypt_block_nr_192_%=\n\t"
13337#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13338#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13339 "lsl r8, r5, #8\n\t"
13340 "lsr r8, r8, #24\n\t"
13341#else
13342 "uxtb r8, r5, ror #16\n\t"
13343#endif
13344#else
13345 "ubfx r8, r5, #16, #8\n\t"
13346#endif
13347 "lsr r11, r4, #24\n\t"
13348#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13349#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13350 "lsl lr, r6, #16\n\t"
13351 "lsr lr, lr, #24\n\t"
13352#else
13353 "uxtb lr, r6, ror #8\n\t"
13354#endif
13355#else
13356 "ubfx lr, r6, #8, #8\n\t"
13357#endif
13358#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13359#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13360 "lsl r2, r7, #24\n\t"
13361 "lsr r2, r2, #24\n\t"
13362#else
13363 "uxtb r2, r7\n\t"
13364#endif
13365#else
13366 "ubfx r2, r7, #0, #8\n\t"
13367#endif
13368 "ldr r8, [r0, r8, lsl #2]\n\t"
13369 "ldr r11, [r0, r11, lsl #2]\n\t"
13370 "ldr lr, [r0, lr, lsl #2]\n\t"
13371 "ldr r2, [r0, r2, lsl #2]\n\t"
13372#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13373#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13374 "lsl r9, r6, #8\n\t"
13375 "lsr r9, r9, #24\n\t"
13376#else
13377 "uxtb r9, r6, ror #16\n\t"
13378#endif
13379#else
13380 "ubfx r9, r6, #16, #8\n\t"
13381#endif
13382 "eor r8, r8, r11, ror #24\n\t"
13383 "lsr r11, r5, #24\n\t"
13384 "eor r8, r8, lr, ror #8\n\t"
13385#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13386#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13387 "lsl lr, r7, #16\n\t"
13388 "lsr lr, lr, #24\n\t"
13389#else
13390 "uxtb lr, r7, ror #8\n\t"
13391#endif
13392#else
13393 "ubfx lr, r7, #8, #8\n\t"
13394#endif
13395 "eor r8, r8, r2, ror #16\n\t"
13396#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13397#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13398 "lsl r2, r4, #24\n\t"
13399 "lsr r2, r2, #24\n\t"
13400#else
13401 "uxtb r2, r4\n\t"
13402#endif
13403#else
13404 "ubfx r2, r4, #0, #8\n\t"
13405#endif
13406 "ldr r9, [r0, r9, lsl #2]\n\t"
13407 "ldr r11, [r0, r11, lsl #2]\n\t"
13408 "ldr lr, [r0, lr, lsl #2]\n\t"
13409 "ldr r2, [r0, r2, lsl #2]\n\t"
13410#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13411#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13412 "lsl r10, r7, #8\n\t"
13413 "lsr r10, r10, #24\n\t"
13414#else
13415 "uxtb r10, r7, ror #16\n\t"
13416#endif
13417#else
13418 "ubfx r10, r7, #16, #8\n\t"
13419#endif
13420 "eor r9, r9, r11, ror #24\n\t"
13421 "lsr r11, r6, #24\n\t"
13422 "eor r9, r9, lr, ror #8\n\t"
13423#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13425 "lsl lr, r4, #16\n\t"
13426 "lsr lr, lr, #24\n\t"
13427#else
13428 "uxtb lr, r4, ror #8\n\t"
13429#endif
13430#else
13431 "ubfx lr, r4, #8, #8\n\t"
13432#endif
13433 "eor r9, r9, r2, ror #16\n\t"
13434#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13435#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13436 "lsl r2, r5, #24\n\t"
13437 "lsr r2, r2, #24\n\t"
13438#else
13439 "uxtb r2, r5\n\t"
13440#endif
13441#else
13442 "ubfx r2, r5, #0, #8\n\t"
13443#endif
13444 "ldr r10, [r0, r10, lsl #2]\n\t"
13445 "ldr r11, [r0, r11, lsl #2]\n\t"
13446 "ldr lr, [r0, lr, lsl #2]\n\t"
13447 "ldr r2, [r0, r2, lsl #2]\n\t"
13448#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13449#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13450 "lsl r6, r6, #24\n\t"
13451 "lsr r6, r6, #24\n\t"
13452#else
13453 "uxtb r6, r6\n\t"
13454#endif
13455#else
13456 "ubfx r6, r6, #0, #8\n\t"
13457#endif
13458 "eor r10, r10, r11, ror #24\n\t"
13459#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13460#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13461 "lsl r11, r4, #8\n\t"
13462 "lsr r11, r11, #24\n\t"
13463#else
13464 "uxtb r11, r4, ror #16\n\t"
13465#endif
13466#else
13467 "ubfx r11, r4, #16, #8\n\t"
13468#endif
13469 "eor r10, r10, lr, ror #8\n\t"
13470 "lsr lr, r7, #24\n\t"
13471 "eor r10, r10, r2, ror #16\n\t"
13472#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13473#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13474 "lsl r2, r5, #16\n\t"
13475 "lsr r2, r2, #24\n\t"
13476#else
13477 "uxtb r2, r5, ror #8\n\t"
13478#endif
13479#else
13480 "ubfx r2, r5, #8, #8\n\t"
13481#endif
13482 "ldr r6, [r0, r6, lsl #2]\n\t"
13483 "ldr lr, [r0, lr, lsl #2]\n\t"
13484 "ldr r11, [r0, r11, lsl #2]\n\t"
13485 "ldr r2, [r0, r2, lsl #2]\n\t"
13486 "eor lr, lr, r6, ror #24\n\t"
13487 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
13488 "eor r11, r11, lr, ror #24\n\t"
13489 "eor r11, r11, r2, ror #8\n\t"
13490 /* XOR in Key Schedule */
13491 "eor r8, r8, r4\n\t"
13492 "eor r9, r9, r5\n\t"
13493 "eor r10, r10, r6\n\t"
13494 "eor r11, r11, r7\n\t"
13495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13496#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13497 "lsl r4, r11, #24\n\t"
13498 "lsr r4, r4, #24\n\t"
13499#else
13500 "uxtb r4, r11\n\t"
13501#endif
13502#else
13503 "ubfx r4, r11, #0, #8\n\t"
13504#endif
13505#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13506#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13507 "lsl r7, r10, #16\n\t"
13508 "lsr r7, r7, #24\n\t"
13509#else
13510 "uxtb r7, r10, ror #8\n\t"
13511#endif
13512#else
13513 "ubfx r7, r10, #8, #8\n\t"
13514#endif
13515#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13516#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13517 "lsl lr, r9, #8\n\t"
13518 "lsr lr, lr, #24\n\t"
13519#else
13520 "uxtb lr, r9, ror #16\n\t"
13521#endif
13522#else
13523 "ubfx lr, r9, #16, #8\n\t"
13524#endif
13525 "lsr r2, r8, #24\n\t"
13526 "ldrb r4, [r0, r4, lsl #2]\n\t"
13527 "ldrb r7, [r0, r7, lsl #2]\n\t"
13528 "ldrb lr, [r0, lr, lsl #2]\n\t"
13529 "ldrb r2, [r0, r2, lsl #2]\n\t"
13530#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13531#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13532 "lsl r5, r8, #24\n\t"
13533 "lsr r5, r5, #24\n\t"
13534#else
13535 "uxtb r5, r8\n\t"
13536#endif
13537#else
13538 "ubfx r5, r8, #0, #8\n\t"
13539#endif
13540 "eor r4, r4, r7, lsl #8\n\t"
13541#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13542#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13543 "lsl r7, r11, #16\n\t"
13544 "lsr r7, r7, #24\n\t"
13545#else
13546 "uxtb r7, r11, ror #8\n\t"
13547#endif
13548#else
13549 "ubfx r7, r11, #8, #8\n\t"
13550#endif
13551 "eor r4, r4, lr, lsl #16\n\t"
13552#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13553#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13554 "lsl lr, r10, #8\n\t"
13555 "lsr lr, lr, #24\n\t"
13556#else
13557 "uxtb lr, r10, ror #16\n\t"
13558#endif
13559#else
13560 "ubfx lr, r10, #16, #8\n\t"
13561#endif
13562 "eor r4, r4, r2, lsl #24\n\t"
13563 "lsr r2, r9, #24\n\t"
13564 "ldrb r5, [r0, r5, lsl #2]\n\t"
13565 "ldrb r7, [r0, r7, lsl #2]\n\t"
13566 "ldrb lr, [r0, lr, lsl #2]\n\t"
13567 "ldrb r2, [r0, r2, lsl #2]\n\t"
13568#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13569#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13570 "lsl r6, r9, #24\n\t"
13571 "lsr r6, r6, #24\n\t"
13572#else
13573 "uxtb r6, r9\n\t"
13574#endif
13575#else
13576 "ubfx r6, r9, #0, #8\n\t"
13577#endif
13578 "eor r5, r5, r7, lsl #8\n\t"
13579#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13580#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13581 "lsl r7, r8, #16\n\t"
13582 "lsr r7, r7, #24\n\t"
13583#else
13584 "uxtb r7, r8, ror #8\n\t"
13585#endif
13586#else
13587 "ubfx r7, r8, #8, #8\n\t"
13588#endif
13589 "eor r5, r5, lr, lsl #16\n\t"
13590#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13591#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13592 "lsl lr, r11, #8\n\t"
13593 "lsr lr, lr, #24\n\t"
13594#else
13595 "uxtb lr, r11, ror #16\n\t"
13596#endif
13597#else
13598 "ubfx lr, r11, #16, #8\n\t"
13599#endif
13600 "eor r5, r5, r2, lsl #24\n\t"
13601 "lsr r2, r10, #24\n\t"
13602 "ldrb r6, [r0, r6, lsl #2]\n\t"
13603 "ldrb r7, [r0, r7, lsl #2]\n\t"
13604 "ldrb lr, [r0, lr, lsl #2]\n\t"
13605 "ldrb r2, [r0, r2, lsl #2]\n\t"
13606 "lsr r11, r11, #24\n\t"
13607 "eor r6, r6, r7, lsl #8\n\t"
13608#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13609#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13610 "lsl r7, r10, #24\n\t"
13611 "lsr r7, r7, #24\n\t"
13612#else
13613 "uxtb r7, r10\n\t"
13614#endif
13615#else
13616 "ubfx r7, r10, #0, #8\n\t"
13617#endif
13618 "eor r6, r6, lr, lsl #16\n\t"
13619#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13620#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13621 "lsl lr, r9, #16\n\t"
13622 "lsr lr, lr, #24\n\t"
13623#else
13624 "uxtb lr, r9, ror #8\n\t"
13625#endif
13626#else
13627 "ubfx lr, r9, #8, #8\n\t"
13628#endif
13629 "eor r6, r6, r2, lsl #24\n\t"
13630#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13631#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13632 "lsl r2, r8, #8\n\t"
13633 "lsr r2, r2, #24\n\t"
13634#else
13635 "uxtb r2, r8, ror #16\n\t"
13636#endif
13637#else
13638 "ubfx r2, r8, #16, #8\n\t"
13639#endif
13640 "ldrb r11, [r0, r11, lsl #2]\n\t"
13641 "ldrb r7, [r0, r7, lsl #2]\n\t"
13642 "ldrb lr, [r0, lr, lsl #2]\n\t"
13643 "ldrb r2, [r0, r2, lsl #2]\n\t"
13644 "eor lr, lr, r11, lsl #16\n\t"
13645 "ldm %[ks], {r8, r9, r10, r11}\n\t"
13646 "eor r7, r7, lr, lsl #8\n\t"
13647 "eor r7, r7, r2, lsl #16\n\t"
13648 /* XOR in Key Schedule */
13649 "eor r4, r4, r8\n\t"
13650 "eor r5, r5, r9\n\t"
13651 "eor r6, r6, r10\n\t"
13652 "eor r7, r7, r11\n\t"
13653#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
13654 "pop {r1, %[len], lr}\n\t"
13655 "ldr %[ks], [sp]\n\t"
13656#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13657 "eor r8, r4, r4, ror #16\n\t"
13658 "eor r9, r5, r5, ror #16\n\t"
13659 "eor r10, r6, r6, ror #16\n\t"
13660 "eor r11, r7, r7, ror #16\n\t"
13661 "bic r8, r8, #0xff0000\n\t"
13662 "bic r9, r9, #0xff0000\n\t"
13663 "bic r10, r10, #0xff0000\n\t"
13664 "bic r11, r11, #0xff0000\n\t"
13665 "ror r4, r4, #8\n\t"
13666 "ror r5, r5, #8\n\t"
13667 "ror r6, r6, #8\n\t"
13668 "ror r7, r7, #8\n\t"
13669 "eor r4, r4, r8, lsr #8\n\t"
13670 "eor r5, r5, r9, lsr #8\n\t"
13671 "eor r6, r6, r10, lsr #8\n\t"
13672 "eor r7, r7, r11, lsr #8\n\t"
13673#else
13674 "rev r4, r4\n\t"
13675 "rev r5, r5\n\t"
13676 "rev r6, r6\n\t"
13677 "rev r7, r7\n\t"
13678#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
13679 "str r4, [%[out]]\n\t"
13680 "str r5, [%[out], #4]\n\t"
13681 "str r6, [%[out], #8]\n\t"
13682 "str r7, [%[out], #12]\n\t"
13683 "subs %[len], %[len], #16\n\t"
13684 "add lr, lr, #16\n\t"
13685 "add %[out], %[out], #16\n\t"
13686 "bne L_AES_CBC_encrypt_loop_block_192_%=\n\t"
13687 "b L_AES_CBC_encrypt_end_%=\n\t"
13688 "\n"
13689 "L_AES_CBC_encrypt_start_block_128_%=:\n\t"
13690 "\n"
13691 "L_AES_CBC_encrypt_loop_block_128_%=:\n\t"
13692 "ldr r8, [lr]\n\t"
13693 "ldr r9, [lr, #4]\n\t"
13694 "ldr r10, [lr, #8]\n\t"
13695 "ldr r11, [lr, #12]\n\t"
13696 "eor r4, r4, r8\n\t"
13697 "eor r5, r5, r9\n\t"
13698 "eor r6, r6, r10\n\t"
13699 "eor r7, r7, r11\n\t"
13700 "push {r1, %[len], lr}\n\t"
13701#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13702 "eor r8, r4, r4, ror #16\n\t"
13703 "eor r9, r5, r5, ror #16\n\t"
13704 "eor r10, r6, r6, ror #16\n\t"
13705 "eor r11, r7, r7, ror #16\n\t"
13706 "bic r8, r8, #0xff0000\n\t"
13707 "bic r9, r9, #0xff0000\n\t"
13708 "bic r10, r10, #0xff0000\n\t"
13709 "bic r11, r11, #0xff0000\n\t"
13710 "ror r4, r4, #8\n\t"
13711 "ror r5, r5, #8\n\t"
13712 "ror r6, r6, #8\n\t"
13713 "ror r7, r7, #8\n\t"
13714 "eor r4, r4, r8, lsr #8\n\t"
13715 "eor r5, r5, r9, lsr #8\n\t"
13716 "eor r6, r6, r10, lsr #8\n\t"
13717 "eor r7, r7, r11, lsr #8\n\t"
13718#else
13719 "rev r4, r4\n\t"
13720 "rev r5, r5\n\t"
13721 "rev r6, r6\n\t"
13722 "rev r7, r7\n\t"
13723#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
13724 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
13725 /* Round: 0 - XOR in key schedule */
13726 "eor r4, r4, r8\n\t"
13727 "eor r5, r5, r9\n\t"
13728 "eor r6, r6, r10\n\t"
13729 "eor r7, r7, r11\n\t"
13730 "mov r1, #4\n\t"
13731#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
13732 "bl AES_encrypt_block\n\t"
13733#else
13734 "\n"
13735 "L_AES_CBC_encrypt_block_nr_128_%=:\n\t"
13736#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13737#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13738 "lsl r8, r5, #8\n\t"
13739 "lsr r8, r8, #24\n\t"
13740#else
13741 "uxtb r8, r5, ror #16\n\t"
13742#endif
13743#else
13744 "ubfx r8, r5, #16, #8\n\t"
13745#endif
13746 "lsr r11, r4, #24\n\t"
13747#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13748#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13749 "lsl lr, r6, #16\n\t"
13750 "lsr lr, lr, #24\n\t"
13751#else
13752 "uxtb lr, r6, ror #8\n\t"
13753#endif
13754#else
13755 "ubfx lr, r6, #8, #8\n\t"
13756#endif
13757#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13758#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13759 "lsl r2, r7, #24\n\t"
13760 "lsr r2, r2, #24\n\t"
13761#else
13762 "uxtb r2, r7\n\t"
13763#endif
13764#else
13765 "ubfx r2, r7, #0, #8\n\t"
13766#endif
13767 "ldr r8, [r0, r8, lsl #2]\n\t"
13768 "ldr r11, [r0, r11, lsl #2]\n\t"
13769 "ldr lr, [r0, lr, lsl #2]\n\t"
13770 "ldr r2, [r0, r2, lsl #2]\n\t"
13771#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13772#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13773 "lsl r9, r6, #8\n\t"
13774 "lsr r9, r9, #24\n\t"
13775#else
13776 "uxtb r9, r6, ror #16\n\t"
13777#endif
13778#else
13779 "ubfx r9, r6, #16, #8\n\t"
13780#endif
13781 "eor r8, r8, r11, ror #24\n\t"
13782 "lsr r11, r5, #24\n\t"
13783 "eor r8, r8, lr, ror #8\n\t"
13784#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13785#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13786 "lsl lr, r7, #16\n\t"
13787 "lsr lr, lr, #24\n\t"
13788#else
13789 "uxtb lr, r7, ror #8\n\t"
13790#endif
13791#else
13792 "ubfx lr, r7, #8, #8\n\t"
13793#endif
13794 "eor r8, r8, r2, ror #16\n\t"
13795#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13796#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13797 "lsl r2, r4, #24\n\t"
13798 "lsr r2, r2, #24\n\t"
13799#else
13800 "uxtb r2, r4\n\t"
13801#endif
13802#else
13803 "ubfx r2, r4, #0, #8\n\t"
13804#endif
13805 "ldr r9, [r0, r9, lsl #2]\n\t"
13806 "ldr r11, [r0, r11, lsl #2]\n\t"
13807 "ldr lr, [r0, lr, lsl #2]\n\t"
13808 "ldr r2, [r0, r2, lsl #2]\n\t"
13809#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13810#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13811 "lsl r10, r7, #8\n\t"
13812 "lsr r10, r10, #24\n\t"
13813#else
13814 "uxtb r10, r7, ror #16\n\t"
13815#endif
13816#else
13817 "ubfx r10, r7, #16, #8\n\t"
13818#endif
13819 "eor r9, r9, r11, ror #24\n\t"
13820 "lsr r11, r6, #24\n\t"
13821 "eor r9, r9, lr, ror #8\n\t"
13822#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13823#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13824 "lsl lr, r4, #16\n\t"
13825 "lsr lr, lr, #24\n\t"
13826#else
13827 "uxtb lr, r4, ror #8\n\t"
13828#endif
13829#else
13830 "ubfx lr, r4, #8, #8\n\t"
13831#endif
13832 "eor r9, r9, r2, ror #16\n\t"
13833#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13834#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13835 "lsl r2, r5, #24\n\t"
13836 "lsr r2, r2, #24\n\t"
13837#else
13838 "uxtb r2, r5\n\t"
13839#endif
13840#else
13841 "ubfx r2, r5, #0, #8\n\t"
13842#endif
13843 "ldr r10, [r0, r10, lsl #2]\n\t"
13844 "ldr r11, [r0, r11, lsl #2]\n\t"
13845 "ldr lr, [r0, lr, lsl #2]\n\t"
13846 "ldr r2, [r0, r2, lsl #2]\n\t"
13847#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13848#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13849 "lsl r6, r6, #24\n\t"
13850 "lsr r6, r6, #24\n\t"
13851#else
13852 "uxtb r6, r6\n\t"
13853#endif
13854#else
13855 "ubfx r6, r6, #0, #8\n\t"
13856#endif
13857 "eor r10, r10, r11, ror #24\n\t"
13858#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13859#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13860 "lsl r11, r4, #8\n\t"
13861 "lsr r11, r11, #24\n\t"
13862#else
13863 "uxtb r11, r4, ror #16\n\t"
13864#endif
13865#else
13866 "ubfx r11, r4, #16, #8\n\t"
13867#endif
13868 "eor r10, r10, lr, ror #8\n\t"
13869 "lsr lr, r7, #24\n\t"
13870 "eor r10, r10, r2, ror #16\n\t"
13871#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13872#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13873 "lsl r2, r5, #16\n\t"
13874 "lsr r2, r2, #24\n\t"
13875#else
13876 "uxtb r2, r5, ror #8\n\t"
13877#endif
13878#else
13879 "ubfx r2, r5, #8, #8\n\t"
13880#endif
13881 "ldr r6, [r0, r6, lsl #2]\n\t"
13882 "ldr lr, [r0, lr, lsl #2]\n\t"
13883 "ldr r11, [r0, r11, lsl #2]\n\t"
13884 "ldr r2, [r0, r2, lsl #2]\n\t"
13885 "eor lr, lr, r6, ror #24\n\t"
13886 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
13887 "eor r11, r11, lr, ror #24\n\t"
13888 "eor r11, r11, r2, ror #8\n\t"
13889 /* XOR in Key Schedule */
13890 "eor r8, r8, r4\n\t"
13891 "eor r9, r9, r5\n\t"
13892 "eor r10, r10, r6\n\t"
13893 "eor r11, r11, r7\n\t"
13894#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13895#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13896 "lsl r4, r9, #8\n\t"
13897 "lsr r4, r4, #24\n\t"
13898#else
13899 "uxtb r4, r9, ror #16\n\t"
13900#endif
13901#else
13902 "ubfx r4, r9, #16, #8\n\t"
13903#endif
13904 "lsr r7, r8, #24\n\t"
13905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13906#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13907 "lsl lr, r10, #16\n\t"
13908 "lsr lr, lr, #24\n\t"
13909#else
13910 "uxtb lr, r10, ror #8\n\t"
13911#endif
13912#else
13913 "ubfx lr, r10, #8, #8\n\t"
13914#endif
13915#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13916#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13917 "lsl r2, r11, #24\n\t"
13918 "lsr r2, r2, #24\n\t"
13919#else
13920 "uxtb r2, r11\n\t"
13921#endif
13922#else
13923 "ubfx r2, r11, #0, #8\n\t"
13924#endif
13925 "ldr r4, [r0, r4, lsl #2]\n\t"
13926 "ldr r7, [r0, r7, lsl #2]\n\t"
13927 "ldr lr, [r0, lr, lsl #2]\n\t"
13928 "ldr r2, [r0, r2, lsl #2]\n\t"
13929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13930#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13931 "lsl r5, r10, #8\n\t"
13932 "lsr r5, r5, #24\n\t"
13933#else
13934 "uxtb r5, r10, ror #16\n\t"
13935#endif
13936#else
13937 "ubfx r5, r10, #16, #8\n\t"
13938#endif
13939 "eor r4, r4, r7, ror #24\n\t"
13940 "lsr r7, r9, #24\n\t"
13941 "eor r4, r4, lr, ror #8\n\t"
13942#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13943#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13944 "lsl lr, r11, #16\n\t"
13945 "lsr lr, lr, #24\n\t"
13946#else
13947 "uxtb lr, r11, ror #8\n\t"
13948#endif
13949#else
13950 "ubfx lr, r11, #8, #8\n\t"
13951#endif
13952 "eor r4, r4, r2, ror #16\n\t"
13953#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13954#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13955 "lsl r2, r8, #24\n\t"
13956 "lsr r2, r2, #24\n\t"
13957#else
13958 "uxtb r2, r8\n\t"
13959#endif
13960#else
13961 "ubfx r2, r8, #0, #8\n\t"
13962#endif
13963 "ldr r5, [r0, r5, lsl #2]\n\t"
13964 "ldr r7, [r0, r7, lsl #2]\n\t"
13965 "ldr lr, [r0, lr, lsl #2]\n\t"
13966 "ldr r2, [r0, r2, lsl #2]\n\t"
13967#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13968#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13969 "lsl r6, r11, #8\n\t"
13970 "lsr r6, r6, #24\n\t"
13971#else
13972 "uxtb r6, r11, ror #16\n\t"
13973#endif
13974#else
13975 "ubfx r6, r11, #16, #8\n\t"
13976#endif
13977 "eor r5, r5, r7, ror #24\n\t"
13978 "lsr r7, r10, #24\n\t"
13979 "eor r5, r5, lr, ror #8\n\t"
13980#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13981#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13982 "lsl lr, r8, #16\n\t"
13983 "lsr lr, lr, #24\n\t"
13984#else
13985 "uxtb lr, r8, ror #8\n\t"
13986#endif
13987#else
13988 "ubfx lr, r8, #8, #8\n\t"
13989#endif
13990 "eor r5, r5, r2, ror #16\n\t"
13991#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
13992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
13993 "lsl r2, r9, #24\n\t"
13994 "lsr r2, r2, #24\n\t"
13995#else
13996 "uxtb r2, r9\n\t"
13997#endif
13998#else
13999 "ubfx r2, r9, #0, #8\n\t"
14000#endif
14001 "ldr r6, [r0, r6, lsl #2]\n\t"
14002 "ldr r7, [r0, r7, lsl #2]\n\t"
14003 "ldr lr, [r0, lr, lsl #2]\n\t"
14004 "ldr r2, [r0, r2, lsl #2]\n\t"
14005#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14006#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14007 "lsl r10, r10, #24\n\t"
14008 "lsr r10, r10, #24\n\t"
14009#else
14010 "uxtb r10, r10\n\t"
14011#endif
14012#else
14013 "ubfx r10, r10, #0, #8\n\t"
14014#endif
14015 "eor r6, r6, r7, ror #24\n\t"
14016#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14017#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14018 "lsl r7, r8, #8\n\t"
14019 "lsr r7, r7, #24\n\t"
14020#else
14021 "uxtb r7, r8, ror #16\n\t"
14022#endif
14023#else
14024 "ubfx r7, r8, #16, #8\n\t"
14025#endif
14026 "eor r6, r6, lr, ror #8\n\t"
14027 "lsr lr, r11, #24\n\t"
14028 "eor r6, r6, r2, ror #16\n\t"
14029#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14031 "lsl r2, r9, #16\n\t"
14032 "lsr r2, r2, #24\n\t"
14033#else
14034 "uxtb r2, r9, ror #8\n\t"
14035#endif
14036#else
14037 "ubfx r2, r9, #8, #8\n\t"
14038#endif
14039 "ldr r10, [r0, r10, lsl #2]\n\t"
14040 "ldr lr, [r0, lr, lsl #2]\n\t"
14041 "ldr r7, [r0, r7, lsl #2]\n\t"
14042 "ldr r2, [r0, r2, lsl #2]\n\t"
14043 "eor lr, lr, r10, ror #24\n\t"
14044 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
14045 "eor r7, r7, lr, ror #24\n\t"
14046 "eor r7, r7, r2, ror #8\n\t"
14047 /* XOR in Key Schedule */
14048 "eor r4, r4, r8\n\t"
14049 "eor r5, r5, r9\n\t"
14050 "eor r6, r6, r10\n\t"
14051 "eor r7, r7, r11\n\t"
14052 "subs r1, r1, #1\n\t"
14053 "bne L_AES_CBC_encrypt_block_nr_128_%=\n\t"
14054#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14055#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14056 "lsl r8, r5, #8\n\t"
14057 "lsr r8, r8, #24\n\t"
14058#else
14059 "uxtb r8, r5, ror #16\n\t"
14060#endif
14061#else
14062 "ubfx r8, r5, #16, #8\n\t"
14063#endif
14064 "lsr r11, r4, #24\n\t"
14065#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14066#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14067 "lsl lr, r6, #16\n\t"
14068 "lsr lr, lr, #24\n\t"
14069#else
14070 "uxtb lr, r6, ror #8\n\t"
14071#endif
14072#else
14073 "ubfx lr, r6, #8, #8\n\t"
14074#endif
14075#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14077 "lsl r2, r7, #24\n\t"
14078 "lsr r2, r2, #24\n\t"
14079#else
14080 "uxtb r2, r7\n\t"
14081#endif
14082#else
14083 "ubfx r2, r7, #0, #8\n\t"
14084#endif
14085 "ldr r8, [r0, r8, lsl #2]\n\t"
14086 "ldr r11, [r0, r11, lsl #2]\n\t"
14087 "ldr lr, [r0, lr, lsl #2]\n\t"
14088 "ldr r2, [r0, r2, lsl #2]\n\t"
14089#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14090#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14091 "lsl r9, r6, #8\n\t"
14092 "lsr r9, r9, #24\n\t"
14093#else
14094 "uxtb r9, r6, ror #16\n\t"
14095#endif
14096#else
14097 "ubfx r9, r6, #16, #8\n\t"
14098#endif
14099 "eor r8, r8, r11, ror #24\n\t"
14100 "lsr r11, r5, #24\n\t"
14101 "eor r8, r8, lr, ror #8\n\t"
14102#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14103#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14104 "lsl lr, r7, #16\n\t"
14105 "lsr lr, lr, #24\n\t"
14106#else
14107 "uxtb lr, r7, ror #8\n\t"
14108#endif
14109#else
14110 "ubfx lr, r7, #8, #8\n\t"
14111#endif
14112 "eor r8, r8, r2, ror #16\n\t"
14113#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14114#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14115 "lsl r2, r4, #24\n\t"
14116 "lsr r2, r2, #24\n\t"
14117#else
14118 "uxtb r2, r4\n\t"
14119#endif
14120#else
14121 "ubfx r2, r4, #0, #8\n\t"
14122#endif
14123 "ldr r9, [r0, r9, lsl #2]\n\t"
14124 "ldr r11, [r0, r11, lsl #2]\n\t"
14125 "ldr lr, [r0, lr, lsl #2]\n\t"
14126 "ldr r2, [r0, r2, lsl #2]\n\t"
14127#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14128#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14129 "lsl r10, r7, #8\n\t"
14130 "lsr r10, r10, #24\n\t"
14131#else
14132 "uxtb r10, r7, ror #16\n\t"
14133#endif
14134#else
14135 "ubfx r10, r7, #16, #8\n\t"
14136#endif
14137 "eor r9, r9, r11, ror #24\n\t"
14138 "lsr r11, r6, #24\n\t"
14139 "eor r9, r9, lr, ror #8\n\t"
14140#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14141#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14142 "lsl lr, r4, #16\n\t"
14143 "lsr lr, lr, #24\n\t"
14144#else
14145 "uxtb lr, r4, ror #8\n\t"
14146#endif
14147#else
14148 "ubfx lr, r4, #8, #8\n\t"
14149#endif
14150 "eor r9, r9, r2, ror #16\n\t"
14151#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14152#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14153 "lsl r2, r5, #24\n\t"
14154 "lsr r2, r2, #24\n\t"
14155#else
14156 "uxtb r2, r5\n\t"
14157#endif
14158#else
14159 "ubfx r2, r5, #0, #8\n\t"
14160#endif
14161 "ldr r10, [r0, r10, lsl #2]\n\t"
14162 "ldr r11, [r0, r11, lsl #2]\n\t"
14163 "ldr lr, [r0, lr, lsl #2]\n\t"
14164 "ldr r2, [r0, r2, lsl #2]\n\t"
14165#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14166#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14167 "lsl r6, r6, #24\n\t"
14168 "lsr r6, r6, #24\n\t"
14169#else
14170 "uxtb r6, r6\n\t"
14171#endif
14172#else
14173 "ubfx r6, r6, #0, #8\n\t"
14174#endif
14175 "eor r10, r10, r11, ror #24\n\t"
14176#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14177#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14178 "lsl r11, r4, #8\n\t"
14179 "lsr r11, r11, #24\n\t"
14180#else
14181 "uxtb r11, r4, ror #16\n\t"
14182#endif
14183#else
14184 "ubfx r11, r4, #16, #8\n\t"
14185#endif
14186 "eor r10, r10, lr, ror #8\n\t"
14187 "lsr lr, r7, #24\n\t"
14188 "eor r10, r10, r2, ror #16\n\t"
14189#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14190#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14191 "lsl r2, r5, #16\n\t"
14192 "lsr r2, r2, #24\n\t"
14193#else
14194 "uxtb r2, r5, ror #8\n\t"
14195#endif
14196#else
14197 "ubfx r2, r5, #8, #8\n\t"
14198#endif
14199 "ldr r6, [r0, r6, lsl #2]\n\t"
14200 "ldr lr, [r0, lr, lsl #2]\n\t"
14201 "ldr r11, [r0, r11, lsl #2]\n\t"
14202 "ldr r2, [r0, r2, lsl #2]\n\t"
14203 "eor lr, lr, r6, ror #24\n\t"
14204 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
14205 "eor r11, r11, lr, ror #24\n\t"
14206 "eor r11, r11, r2, ror #8\n\t"
14207 /* XOR in Key Schedule */
14208 "eor r8, r8, r4\n\t"
14209 "eor r9, r9, r5\n\t"
14210 "eor r10, r10, r6\n\t"
14211 "eor r11, r11, r7\n\t"
14212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14213#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14214 "lsl r4, r11, #24\n\t"
14215 "lsr r4, r4, #24\n\t"
14216#else
14217 "uxtb r4, r11\n\t"
14218#endif
14219#else
14220 "ubfx r4, r11, #0, #8\n\t"
14221#endif
14222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14223#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14224 "lsl r7, r10, #16\n\t"
14225 "lsr r7, r7, #24\n\t"
14226#else
14227 "uxtb r7, r10, ror #8\n\t"
14228#endif
14229#else
14230 "ubfx r7, r10, #8, #8\n\t"
14231#endif
14232#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14233#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14234 "lsl lr, r9, #8\n\t"
14235 "lsr lr, lr, #24\n\t"
14236#else
14237 "uxtb lr, r9, ror #16\n\t"
14238#endif
14239#else
14240 "ubfx lr, r9, #16, #8\n\t"
14241#endif
14242 "lsr r2, r8, #24\n\t"
14243 "ldrb r4, [r0, r4, lsl #2]\n\t"
14244 "ldrb r7, [r0, r7, lsl #2]\n\t"
14245 "ldrb lr, [r0, lr, lsl #2]\n\t"
14246 "ldrb r2, [r0, r2, lsl #2]\n\t"
14247#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14248#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14249 "lsl r5, r8, #24\n\t"
14250 "lsr r5, r5, #24\n\t"
14251#else
14252 "uxtb r5, r8\n\t"
14253#endif
14254#else
14255 "ubfx r5, r8, #0, #8\n\t"
14256#endif
14257 "eor r4, r4, r7, lsl #8\n\t"
14258#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14259#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14260 "lsl r7, r11, #16\n\t"
14261 "lsr r7, r7, #24\n\t"
14262#else
14263 "uxtb r7, r11, ror #8\n\t"
14264#endif
14265#else
14266 "ubfx r7, r11, #8, #8\n\t"
14267#endif
14268 "eor r4, r4, lr, lsl #16\n\t"
14269#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14270#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14271 "lsl lr, r10, #8\n\t"
14272 "lsr lr, lr, #24\n\t"
14273#else
14274 "uxtb lr, r10, ror #16\n\t"
14275#endif
14276#else
14277 "ubfx lr, r10, #16, #8\n\t"
14278#endif
14279 "eor r4, r4, r2, lsl #24\n\t"
14280 "lsr r2, r9, #24\n\t"
14281 "ldrb r5, [r0, r5, lsl #2]\n\t"
14282 "ldrb r7, [r0, r7, lsl #2]\n\t"
14283 "ldrb lr, [r0, lr, lsl #2]\n\t"
14284 "ldrb r2, [r0, r2, lsl #2]\n\t"
14285#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14286#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14287 "lsl r6, r9, #24\n\t"
14288 "lsr r6, r6, #24\n\t"
14289#else
14290 "uxtb r6, r9\n\t"
14291#endif
14292#else
14293 "ubfx r6, r9, #0, #8\n\t"
14294#endif
14295 "eor r5, r5, r7, lsl #8\n\t"
14296#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14297#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14298 "lsl r7, r8, #16\n\t"
14299 "lsr r7, r7, #24\n\t"
14300#else
14301 "uxtb r7, r8, ror #8\n\t"
14302#endif
14303#else
14304 "ubfx r7, r8, #8, #8\n\t"
14305#endif
14306 "eor r5, r5, lr, lsl #16\n\t"
14307#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14308#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14309 "lsl lr, r11, #8\n\t"
14310 "lsr lr, lr, #24\n\t"
14311#else
14312 "uxtb lr, r11, ror #16\n\t"
14313#endif
14314#else
14315 "ubfx lr, r11, #16, #8\n\t"
14316#endif
14317 "eor r5, r5, r2, lsl #24\n\t"
14318 "lsr r2, r10, #24\n\t"
14319 "ldrb r6, [r0, r6, lsl #2]\n\t"
14320 "ldrb r7, [r0, r7, lsl #2]\n\t"
14321 "ldrb lr, [r0, lr, lsl #2]\n\t"
14322 "ldrb r2, [r0, r2, lsl #2]\n\t"
14323 "lsr r11, r11, #24\n\t"
14324 "eor r6, r6, r7, lsl #8\n\t"
14325#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14326#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14327 "lsl r7, r10, #24\n\t"
14328 "lsr r7, r7, #24\n\t"
14329#else
14330 "uxtb r7, r10\n\t"
14331#endif
14332#else
14333 "ubfx r7, r10, #0, #8\n\t"
14334#endif
14335 "eor r6, r6, lr, lsl #16\n\t"
14336#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14337#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14338 "lsl lr, r9, #16\n\t"
14339 "lsr lr, lr, #24\n\t"
14340#else
14341 "uxtb lr, r9, ror #8\n\t"
14342#endif
14343#else
14344 "ubfx lr, r9, #8, #8\n\t"
14345#endif
14346 "eor r6, r6, r2, lsl #24\n\t"
14347#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14348#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14349 "lsl r2, r8, #8\n\t"
14350 "lsr r2, r2, #24\n\t"
14351#else
14352 "uxtb r2, r8, ror #16\n\t"
14353#endif
14354#else
14355 "ubfx r2, r8, #16, #8\n\t"
14356#endif
14357 "ldrb r11, [r0, r11, lsl #2]\n\t"
14358 "ldrb r7, [r0, r7, lsl #2]\n\t"
14359 "ldrb lr, [r0, lr, lsl #2]\n\t"
14360 "ldrb r2, [r0, r2, lsl #2]\n\t"
14361 "eor lr, lr, r11, lsl #16\n\t"
14362 "ldm %[ks], {r8, r9, r10, r11}\n\t"
14363 "eor r7, r7, lr, lsl #8\n\t"
14364 "eor r7, r7, r2, lsl #16\n\t"
14365 /* XOR in Key Schedule */
14366 "eor r4, r4, r8\n\t"
14367 "eor r5, r5, r9\n\t"
14368 "eor r6, r6, r10\n\t"
14369 "eor r7, r7, r11\n\t"
14370#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
14371 "pop {r1, %[len], lr}\n\t"
14372 "ldr %[ks], [sp]\n\t"
14373#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14374 "eor r8, r4, r4, ror #16\n\t"
14375 "eor r9, r5, r5, ror #16\n\t"
14376 "eor r10, r6, r6, ror #16\n\t"
14377 "eor r11, r7, r7, ror #16\n\t"
14378 "bic r8, r8, #0xff0000\n\t"
14379 "bic r9, r9, #0xff0000\n\t"
14380 "bic r10, r10, #0xff0000\n\t"
14381 "bic r11, r11, #0xff0000\n\t"
14382 "ror r4, r4, #8\n\t"
14383 "ror r5, r5, #8\n\t"
14384 "ror r6, r6, #8\n\t"
14385 "ror r7, r7, #8\n\t"
14386 "eor r4, r4, r8, lsr #8\n\t"
14387 "eor r5, r5, r9, lsr #8\n\t"
14388 "eor r6, r6, r10, lsr #8\n\t"
14389 "eor r7, r7, r11, lsr #8\n\t"
14390#else
14391 "rev r4, r4\n\t"
14392 "rev r5, r5\n\t"
14393 "rev r6, r6\n\t"
14394 "rev r7, r7\n\t"
14395#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
14396 "str r4, [%[out]]\n\t"
14397 "str r5, [%[out], #4]\n\t"
14398 "str r6, [%[out], #8]\n\t"
14399 "str r7, [%[out], #12]\n\t"
14400 "subs %[len], %[len], #16\n\t"
14401 "add lr, lr, #16\n\t"
14402 "add %[out], %[out], #16\n\t"
14403 "bne L_AES_CBC_encrypt_loop_block_128_%=\n\t"
14404 "\n"
14405 "L_AES_CBC_encrypt_end_%=:\n\t"
14406 "pop {%[ks], r9}\n\t"
14407 "stm r9, {r4, r5, r6, r7}\n\t"
14408 "pop {%[nr], %[iv]}\n\t"
14409 "pop {%[L_AES_ARM32_te_cbc]}\n\t"
14410#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
14411 : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
14412 [nr] "+r" (nr), [iv] "+r" (iv),
14413 [L_AES_ARM32_te_cbc] "+r" (L_AES_ARM32_te_cbc_c)
14414 :
14415#else
14416 :
14417 : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
14418 [nr] "r" (nr), [iv] "r" (iv),
14419 [L_AES_ARM32_te_cbc] "r" (L_AES_ARM32_te_cbc_c)
14420#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
14421 : "memory", "cc", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
14422 );
14423}
14424
14425#endif /* HAVE_AES_CBC */
14426#ifdef WOLFSSL_AES_COUNTER
14427static const word32* L_AES_ARM32_te_ctr = L_AES_ARM32_te_data;
14428void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
14429 unsigned long len_p, const unsigned char* ks_p, int nr_p,
14430 unsigned char* ctr_p);
14431#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
14432WC_OMIT_FRAME_POINTER void AES_CTR_encrypt(const unsigned char* in_p,
14433 unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
14434 int nr_p, unsigned char* ctr_p)
14435#else
14436WC_OMIT_FRAME_POINTER void AES_CTR_encrypt(const unsigned char* in,
14437 unsigned char* out, unsigned long len, const unsigned char* ks, int nr,
14438 unsigned char* ctr)
14439#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
14440{
14441#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
14442 register const unsigned char* in __asm__ ("r0") =
14443 (const unsigned char*)in_p;
14444 register unsigned char* out __asm__ ("r1") = (unsigned char*)out_p;
14445 register unsigned long len __asm__ ("r2") = (unsigned long)len_p;
14446 register const unsigned char* ks __asm__ ("r3") =
14447 (const unsigned char*)ks_p;
14448 register int nr __asm__ ("r12") = (int)nr_p;
14449 register unsigned char* ctr __asm__ ("lr") = (unsigned char*)ctr_p;
14450 register word32* L_AES_ARM32_te_ctr_c __asm__ ("r4") =
14451 (word32*)L_AES_ARM32_te_ctr;
14452#else
14453 register word32* L_AES_ARM32_te_ctr_c = (word32*)L_AES_ARM32_te_ctr;
14454#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
14455
14456 __asm__ __volatile__ (
14457 "push {%[L_AES_ARM32_te_ctr]}\n\t"
14458 "push {%[nr], %[ctr]}\n\t"
14459 "ldr r12, [sp]\n\t"
14460 "ldr r8, [sp, #4]\n\t"
14461 "mov lr, %[in]\n\t"
14462 "ldr r0, [sp, #8]\n\t"
14463 "ldm r8, {r4, r5, r6, r7}\n\t"
14464#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14465 "eor r10, r4, r4, ror #16\n\t"
14466 "eor r11, r5, r5, ror #16\n\t"
14467 "bic r10, r10, #0xff0000\n\t"
14468 "bic r11, r11, #0xff0000\n\t"
14469 "ror r4, r4, #8\n\t"
14470 "ror r5, r5, #8\n\t"
14471 "eor r4, r4, r10, lsr #8\n\t"
14472 "eor r5, r5, r11, lsr #8\n\t"
14473 "eor r10, r6, r6, ror #16\n\t"
14474 "eor r11, r7, r7, ror #16\n\t"
14475 "bic r10, r10, #0xff0000\n\t"
14476 "bic r11, r11, #0xff0000\n\t"
14477 "ror r6, r6, #8\n\t"
14478 "ror r7, r7, #8\n\t"
14479 "eor r6, r6, r10, lsr #8\n\t"
14480 "eor r7, r7, r11, lsr #8\n\t"
14481#else
14482 "rev r4, r4\n\t"
14483 "rev r5, r5\n\t"
14484 "rev r6, r6\n\t"
14485 "rev r7, r7\n\t"
14486#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
14487 "stm r8, {r4, r5, r6, r7}\n\t"
14488 "push {%[ks], r8}\n\t"
14489 "cmp r12, #10\n\t"
14490 "beq L_AES_CTR_encrypt_start_block_128_%=\n\t"
14491 "cmp r12, #12\n\t"
14492 "beq L_AES_CTR_encrypt_start_block_192_%=\n\t"
14493 "\n"
14494 "L_AES_CTR_encrypt_loop_block_256_%=:\n\t"
14495 "push {r1, %[len], lr}\n\t"
14496 "ldr lr, [sp, #16]\n\t"
14497 "adds r11, r7, #1\n\t"
14498 "adcs r10, r6, #0\n\t"
14499 "adcs r9, r5, #0\n\t"
14500 "adc r8, r4, #0\n\t"
14501 "stm lr, {r8, r9, r10, r11}\n\t"
14502 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
14503 /* Round: 0 - XOR in key schedule */
14504 "eor r4, r4, r8\n\t"
14505 "eor r5, r5, r9\n\t"
14506 "eor r6, r6, r10\n\t"
14507 "eor r7, r7, r11\n\t"
14508 "mov r1, #6\n\t"
14509#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
14510 "bl AES_encrypt_block\n\t"
14511#else
14512 "\n"
14513 "L_AES_CTR_encrypt_block_nr_256_%=:\n\t"
14514#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14515#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14516 "lsl r8, r5, #8\n\t"
14517 "lsr r8, r8, #24\n\t"
14518#else
14519 "uxtb r8, r5, ror #16\n\t"
14520#endif
14521#else
14522 "ubfx r8, r5, #16, #8\n\t"
14523#endif
14524 "lsr r11, r4, #24\n\t"
14525#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14526#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14527 "lsl lr, r6, #16\n\t"
14528 "lsr lr, lr, #24\n\t"
14529#else
14530 "uxtb lr, r6, ror #8\n\t"
14531#endif
14532#else
14533 "ubfx lr, r6, #8, #8\n\t"
14534#endif
14535#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14536#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14537 "lsl r2, r7, #24\n\t"
14538 "lsr r2, r2, #24\n\t"
14539#else
14540 "uxtb r2, r7\n\t"
14541#endif
14542#else
14543 "ubfx r2, r7, #0, #8\n\t"
14544#endif
14545 "ldr r8, [r0, r8, lsl #2]\n\t"
14546 "ldr r11, [r0, r11, lsl #2]\n\t"
14547 "ldr lr, [r0, lr, lsl #2]\n\t"
14548 "ldr r2, [r0, r2, lsl #2]\n\t"
14549#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14550#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14551 "lsl r9, r6, #8\n\t"
14552 "lsr r9, r9, #24\n\t"
14553#else
14554 "uxtb r9, r6, ror #16\n\t"
14555#endif
14556#else
14557 "ubfx r9, r6, #16, #8\n\t"
14558#endif
14559 "eor r8, r8, r11, ror #24\n\t"
14560 "lsr r11, r5, #24\n\t"
14561 "eor r8, r8, lr, ror #8\n\t"
14562#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14563#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14564 "lsl lr, r7, #16\n\t"
14565 "lsr lr, lr, #24\n\t"
14566#else
14567 "uxtb lr, r7, ror #8\n\t"
14568#endif
14569#else
14570 "ubfx lr, r7, #8, #8\n\t"
14571#endif
14572 "eor r8, r8, r2, ror #16\n\t"
14573#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14574#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14575 "lsl r2, r4, #24\n\t"
14576 "lsr r2, r2, #24\n\t"
14577#else
14578 "uxtb r2, r4\n\t"
14579#endif
14580#else
14581 "ubfx r2, r4, #0, #8\n\t"
14582#endif
14583 "ldr r9, [r0, r9, lsl #2]\n\t"
14584 "ldr r11, [r0, r11, lsl #2]\n\t"
14585 "ldr lr, [r0, lr, lsl #2]\n\t"
14586 "ldr r2, [r0, r2, lsl #2]\n\t"
14587#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14588#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14589 "lsl r10, r7, #8\n\t"
14590 "lsr r10, r10, #24\n\t"
14591#else
14592 "uxtb r10, r7, ror #16\n\t"
14593#endif
14594#else
14595 "ubfx r10, r7, #16, #8\n\t"
14596#endif
14597 "eor r9, r9, r11, ror #24\n\t"
14598 "lsr r11, r6, #24\n\t"
14599 "eor r9, r9, lr, ror #8\n\t"
14600#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14601#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14602 "lsl lr, r4, #16\n\t"
14603 "lsr lr, lr, #24\n\t"
14604#else
14605 "uxtb lr, r4, ror #8\n\t"
14606#endif
14607#else
14608 "ubfx lr, r4, #8, #8\n\t"
14609#endif
14610 "eor r9, r9, r2, ror #16\n\t"
14611#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14612#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14613 "lsl r2, r5, #24\n\t"
14614 "lsr r2, r2, #24\n\t"
14615#else
14616 "uxtb r2, r5\n\t"
14617#endif
14618#else
14619 "ubfx r2, r5, #0, #8\n\t"
14620#endif
14621 "ldr r10, [r0, r10, lsl #2]\n\t"
14622 "ldr r11, [r0, r11, lsl #2]\n\t"
14623 "ldr lr, [r0, lr, lsl #2]\n\t"
14624 "ldr r2, [r0, r2, lsl #2]\n\t"
14625#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14626#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14627 "lsl r6, r6, #24\n\t"
14628 "lsr r6, r6, #24\n\t"
14629#else
14630 "uxtb r6, r6\n\t"
14631#endif
14632#else
14633 "ubfx r6, r6, #0, #8\n\t"
14634#endif
14635 "eor r10, r10, r11, ror #24\n\t"
14636#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14637#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14638 "lsl r11, r4, #8\n\t"
14639 "lsr r11, r11, #24\n\t"
14640#else
14641 "uxtb r11, r4, ror #16\n\t"
14642#endif
14643#else
14644 "ubfx r11, r4, #16, #8\n\t"
14645#endif
14646 "eor r10, r10, lr, ror #8\n\t"
14647 "lsr lr, r7, #24\n\t"
14648 "eor r10, r10, r2, ror #16\n\t"
14649#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14650#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14651 "lsl r2, r5, #16\n\t"
14652 "lsr r2, r2, #24\n\t"
14653#else
14654 "uxtb r2, r5, ror #8\n\t"
14655#endif
14656#else
14657 "ubfx r2, r5, #8, #8\n\t"
14658#endif
14659 "ldr r6, [r0, r6, lsl #2]\n\t"
14660 "ldr lr, [r0, lr, lsl #2]\n\t"
14661 "ldr r11, [r0, r11, lsl #2]\n\t"
14662 "ldr r2, [r0, r2, lsl #2]\n\t"
14663 "eor lr, lr, r6, ror #24\n\t"
14664 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
14665 "eor r11, r11, lr, ror #24\n\t"
14666 "eor r11, r11, r2, ror #8\n\t"
14667 /* XOR in Key Schedule */
14668 "eor r8, r8, r4\n\t"
14669 "eor r9, r9, r5\n\t"
14670 "eor r10, r10, r6\n\t"
14671 "eor r11, r11, r7\n\t"
14672#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14673#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14674 "lsl r4, r9, #8\n\t"
14675 "lsr r4, r4, #24\n\t"
14676#else
14677 "uxtb r4, r9, ror #16\n\t"
14678#endif
14679#else
14680 "ubfx r4, r9, #16, #8\n\t"
14681#endif
14682 "lsr r7, r8, #24\n\t"
14683#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14684#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14685 "lsl lr, r10, #16\n\t"
14686 "lsr lr, lr, #24\n\t"
14687#else
14688 "uxtb lr, r10, ror #8\n\t"
14689#endif
14690#else
14691 "ubfx lr, r10, #8, #8\n\t"
14692#endif
14693#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14694#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14695 "lsl r2, r11, #24\n\t"
14696 "lsr r2, r2, #24\n\t"
14697#else
14698 "uxtb r2, r11\n\t"
14699#endif
14700#else
14701 "ubfx r2, r11, #0, #8\n\t"
14702#endif
14703 "ldr r4, [r0, r4, lsl #2]\n\t"
14704 "ldr r7, [r0, r7, lsl #2]\n\t"
14705 "ldr lr, [r0, lr, lsl #2]\n\t"
14706 "ldr r2, [r0, r2, lsl #2]\n\t"
14707#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14708#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14709 "lsl r5, r10, #8\n\t"
14710 "lsr r5, r5, #24\n\t"
14711#else
14712 "uxtb r5, r10, ror #16\n\t"
14713#endif
14714#else
14715 "ubfx r5, r10, #16, #8\n\t"
14716#endif
14717 "eor r4, r4, r7, ror #24\n\t"
14718 "lsr r7, r9, #24\n\t"
14719 "eor r4, r4, lr, ror #8\n\t"
14720#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14721#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14722 "lsl lr, r11, #16\n\t"
14723 "lsr lr, lr, #24\n\t"
14724#else
14725 "uxtb lr, r11, ror #8\n\t"
14726#endif
14727#else
14728 "ubfx lr, r11, #8, #8\n\t"
14729#endif
14730 "eor r4, r4, r2, ror #16\n\t"
14731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14733 "lsl r2, r8, #24\n\t"
14734 "lsr r2, r2, #24\n\t"
14735#else
14736 "uxtb r2, r8\n\t"
14737#endif
14738#else
14739 "ubfx r2, r8, #0, #8\n\t"
14740#endif
14741 "ldr r5, [r0, r5, lsl #2]\n\t"
14742 "ldr r7, [r0, r7, lsl #2]\n\t"
14743 "ldr lr, [r0, lr, lsl #2]\n\t"
14744 "ldr r2, [r0, r2, lsl #2]\n\t"
14745#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14746#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14747 "lsl r6, r11, #8\n\t"
14748 "lsr r6, r6, #24\n\t"
14749#else
14750 "uxtb r6, r11, ror #16\n\t"
14751#endif
14752#else
14753 "ubfx r6, r11, #16, #8\n\t"
14754#endif
14755 "eor r5, r5, r7, ror #24\n\t"
14756 "lsr r7, r10, #24\n\t"
14757 "eor r5, r5, lr, ror #8\n\t"
14758#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14759#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14760 "lsl lr, r8, #16\n\t"
14761 "lsr lr, lr, #24\n\t"
14762#else
14763 "uxtb lr, r8, ror #8\n\t"
14764#endif
14765#else
14766 "ubfx lr, r8, #8, #8\n\t"
14767#endif
14768 "eor r5, r5, r2, ror #16\n\t"
14769#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14770#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14771 "lsl r2, r9, #24\n\t"
14772 "lsr r2, r2, #24\n\t"
14773#else
14774 "uxtb r2, r9\n\t"
14775#endif
14776#else
14777 "ubfx r2, r9, #0, #8\n\t"
14778#endif
14779 "ldr r6, [r0, r6, lsl #2]\n\t"
14780 "ldr r7, [r0, r7, lsl #2]\n\t"
14781 "ldr lr, [r0, lr, lsl #2]\n\t"
14782 "ldr r2, [r0, r2, lsl #2]\n\t"
14783#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14784#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14785 "lsl r10, r10, #24\n\t"
14786 "lsr r10, r10, #24\n\t"
14787#else
14788 "uxtb r10, r10\n\t"
14789#endif
14790#else
14791 "ubfx r10, r10, #0, #8\n\t"
14792#endif
14793 "eor r6, r6, r7, ror #24\n\t"
14794#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14795#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14796 "lsl r7, r8, #8\n\t"
14797 "lsr r7, r7, #24\n\t"
14798#else
14799 "uxtb r7, r8, ror #16\n\t"
14800#endif
14801#else
14802 "ubfx r7, r8, #16, #8\n\t"
14803#endif
14804 "eor r6, r6, lr, ror #8\n\t"
14805 "lsr lr, r11, #24\n\t"
14806 "eor r6, r6, r2, ror #16\n\t"
14807#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14808#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14809 "lsl r2, r9, #16\n\t"
14810 "lsr r2, r2, #24\n\t"
14811#else
14812 "uxtb r2, r9, ror #8\n\t"
14813#endif
14814#else
14815 "ubfx r2, r9, #8, #8\n\t"
14816#endif
14817 "ldr r10, [r0, r10, lsl #2]\n\t"
14818 "ldr lr, [r0, lr, lsl #2]\n\t"
14819 "ldr r7, [r0, r7, lsl #2]\n\t"
14820 "ldr r2, [r0, r2, lsl #2]\n\t"
14821 "eor lr, lr, r10, ror #24\n\t"
14822 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
14823 "eor r7, r7, lr, ror #24\n\t"
14824 "eor r7, r7, r2, ror #8\n\t"
14825 /* XOR in Key Schedule */
14826 "eor r4, r4, r8\n\t"
14827 "eor r5, r5, r9\n\t"
14828 "eor r6, r6, r10\n\t"
14829 "eor r7, r7, r11\n\t"
14830 "subs r1, r1, #1\n\t"
14831 "bne L_AES_CTR_encrypt_block_nr_256_%=\n\t"
14832#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14833#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14834 "lsl r8, r5, #8\n\t"
14835 "lsr r8, r8, #24\n\t"
14836#else
14837 "uxtb r8, r5, ror #16\n\t"
14838#endif
14839#else
14840 "ubfx r8, r5, #16, #8\n\t"
14841#endif
14842 "lsr r11, r4, #24\n\t"
14843#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14844#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14845 "lsl lr, r6, #16\n\t"
14846 "lsr lr, lr, #24\n\t"
14847#else
14848 "uxtb lr, r6, ror #8\n\t"
14849#endif
14850#else
14851 "ubfx lr, r6, #8, #8\n\t"
14852#endif
14853#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14854#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14855 "lsl r2, r7, #24\n\t"
14856 "lsr r2, r2, #24\n\t"
14857#else
14858 "uxtb r2, r7\n\t"
14859#endif
14860#else
14861 "ubfx r2, r7, #0, #8\n\t"
14862#endif
14863 "ldr r8, [r0, r8, lsl #2]\n\t"
14864 "ldr r11, [r0, r11, lsl #2]\n\t"
14865 "ldr lr, [r0, lr, lsl #2]\n\t"
14866 "ldr r2, [r0, r2, lsl #2]\n\t"
14867#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14868#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14869 "lsl r9, r6, #8\n\t"
14870 "lsr r9, r9, #24\n\t"
14871#else
14872 "uxtb r9, r6, ror #16\n\t"
14873#endif
14874#else
14875 "ubfx r9, r6, #16, #8\n\t"
14876#endif
14877 "eor r8, r8, r11, ror #24\n\t"
14878 "lsr r11, r5, #24\n\t"
14879 "eor r8, r8, lr, ror #8\n\t"
14880#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14881#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14882 "lsl lr, r7, #16\n\t"
14883 "lsr lr, lr, #24\n\t"
14884#else
14885 "uxtb lr, r7, ror #8\n\t"
14886#endif
14887#else
14888 "ubfx lr, r7, #8, #8\n\t"
14889#endif
14890 "eor r8, r8, r2, ror #16\n\t"
14891#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14892#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14893 "lsl r2, r4, #24\n\t"
14894 "lsr r2, r2, #24\n\t"
14895#else
14896 "uxtb r2, r4\n\t"
14897#endif
14898#else
14899 "ubfx r2, r4, #0, #8\n\t"
14900#endif
14901 "ldr r9, [r0, r9, lsl #2]\n\t"
14902 "ldr r11, [r0, r11, lsl #2]\n\t"
14903 "ldr lr, [r0, lr, lsl #2]\n\t"
14904 "ldr r2, [r0, r2, lsl #2]\n\t"
14905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14906#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14907 "lsl r10, r7, #8\n\t"
14908 "lsr r10, r10, #24\n\t"
14909#else
14910 "uxtb r10, r7, ror #16\n\t"
14911#endif
14912#else
14913 "ubfx r10, r7, #16, #8\n\t"
14914#endif
14915 "eor r9, r9, r11, ror #24\n\t"
14916 "lsr r11, r6, #24\n\t"
14917 "eor r9, r9, lr, ror #8\n\t"
14918#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14919#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14920 "lsl lr, r4, #16\n\t"
14921 "lsr lr, lr, #24\n\t"
14922#else
14923 "uxtb lr, r4, ror #8\n\t"
14924#endif
14925#else
14926 "ubfx lr, r4, #8, #8\n\t"
14927#endif
14928 "eor r9, r9, r2, ror #16\n\t"
14929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14930#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14931 "lsl r2, r5, #24\n\t"
14932 "lsr r2, r2, #24\n\t"
14933#else
14934 "uxtb r2, r5\n\t"
14935#endif
14936#else
14937 "ubfx r2, r5, #0, #8\n\t"
14938#endif
14939 "ldr r10, [r0, r10, lsl #2]\n\t"
14940 "ldr r11, [r0, r11, lsl #2]\n\t"
14941 "ldr lr, [r0, lr, lsl #2]\n\t"
14942 "ldr r2, [r0, r2, lsl #2]\n\t"
14943#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14944#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14945 "lsl r6, r6, #24\n\t"
14946 "lsr r6, r6, #24\n\t"
14947#else
14948 "uxtb r6, r6\n\t"
14949#endif
14950#else
14951 "ubfx r6, r6, #0, #8\n\t"
14952#endif
14953 "eor r10, r10, r11, ror #24\n\t"
14954#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14955#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14956 "lsl r11, r4, #8\n\t"
14957 "lsr r11, r11, #24\n\t"
14958#else
14959 "uxtb r11, r4, ror #16\n\t"
14960#endif
14961#else
14962 "ubfx r11, r4, #16, #8\n\t"
14963#endif
14964 "eor r10, r10, lr, ror #8\n\t"
14965 "lsr lr, r7, #24\n\t"
14966 "eor r10, r10, r2, ror #16\n\t"
14967#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14968#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14969 "lsl r2, r5, #16\n\t"
14970 "lsr r2, r2, #24\n\t"
14971#else
14972 "uxtb r2, r5, ror #8\n\t"
14973#endif
14974#else
14975 "ubfx r2, r5, #8, #8\n\t"
14976#endif
14977 "ldr r6, [r0, r6, lsl #2]\n\t"
14978 "ldr lr, [r0, lr, lsl #2]\n\t"
14979 "ldr r11, [r0, r11, lsl #2]\n\t"
14980 "ldr r2, [r0, r2, lsl #2]\n\t"
14981 "eor lr, lr, r6, ror #24\n\t"
14982 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
14983 "eor r11, r11, lr, ror #24\n\t"
14984 "eor r11, r11, r2, ror #8\n\t"
14985 /* XOR in Key Schedule */
14986 "eor r8, r8, r4\n\t"
14987 "eor r9, r9, r5\n\t"
14988 "eor r10, r10, r6\n\t"
14989 "eor r11, r11, r7\n\t"
14990#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
14991#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
14992 "lsl r4, r11, #24\n\t"
14993 "lsr r4, r4, #24\n\t"
14994#else
14995 "uxtb r4, r11\n\t"
14996#endif
14997#else
14998 "ubfx r4, r11, #0, #8\n\t"
14999#endif
15000#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15001#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15002 "lsl r7, r10, #16\n\t"
15003 "lsr r7, r7, #24\n\t"
15004#else
15005 "uxtb r7, r10, ror #8\n\t"
15006#endif
15007#else
15008 "ubfx r7, r10, #8, #8\n\t"
15009#endif
15010#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15011#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15012 "lsl lr, r9, #8\n\t"
15013 "lsr lr, lr, #24\n\t"
15014#else
15015 "uxtb lr, r9, ror #16\n\t"
15016#endif
15017#else
15018 "ubfx lr, r9, #16, #8\n\t"
15019#endif
15020 "lsr r2, r8, #24\n\t"
15021 "ldrb r4, [r0, r4, lsl #2]\n\t"
15022 "ldrb r7, [r0, r7, lsl #2]\n\t"
15023 "ldrb lr, [r0, lr, lsl #2]\n\t"
15024 "ldrb r2, [r0, r2, lsl #2]\n\t"
15025#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15026#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15027 "lsl r5, r8, #24\n\t"
15028 "lsr r5, r5, #24\n\t"
15029#else
15030 "uxtb r5, r8\n\t"
15031#endif
15032#else
15033 "ubfx r5, r8, #0, #8\n\t"
15034#endif
15035 "eor r4, r4, r7, lsl #8\n\t"
15036#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15037#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15038 "lsl r7, r11, #16\n\t"
15039 "lsr r7, r7, #24\n\t"
15040#else
15041 "uxtb r7, r11, ror #8\n\t"
15042#endif
15043#else
15044 "ubfx r7, r11, #8, #8\n\t"
15045#endif
15046 "eor r4, r4, lr, lsl #16\n\t"
15047#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15048#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15049 "lsl lr, r10, #8\n\t"
15050 "lsr lr, lr, #24\n\t"
15051#else
15052 "uxtb lr, r10, ror #16\n\t"
15053#endif
15054#else
15055 "ubfx lr, r10, #16, #8\n\t"
15056#endif
15057 "eor r4, r4, r2, lsl #24\n\t"
15058 "lsr r2, r9, #24\n\t"
15059 "ldrb r5, [r0, r5, lsl #2]\n\t"
15060 "ldrb r7, [r0, r7, lsl #2]\n\t"
15061 "ldrb lr, [r0, lr, lsl #2]\n\t"
15062 "ldrb r2, [r0, r2, lsl #2]\n\t"
15063#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15064#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15065 "lsl r6, r9, #24\n\t"
15066 "lsr r6, r6, #24\n\t"
15067#else
15068 "uxtb r6, r9\n\t"
15069#endif
15070#else
15071 "ubfx r6, r9, #0, #8\n\t"
15072#endif
15073 "eor r5, r5, r7, lsl #8\n\t"
15074#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15075#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15076 "lsl r7, r8, #16\n\t"
15077 "lsr r7, r7, #24\n\t"
15078#else
15079 "uxtb r7, r8, ror #8\n\t"
15080#endif
15081#else
15082 "ubfx r7, r8, #8, #8\n\t"
15083#endif
15084 "eor r5, r5, lr, lsl #16\n\t"
15085#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15086#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15087 "lsl lr, r11, #8\n\t"
15088 "lsr lr, lr, #24\n\t"
15089#else
15090 "uxtb lr, r11, ror #16\n\t"
15091#endif
15092#else
15093 "ubfx lr, r11, #16, #8\n\t"
15094#endif
15095 "eor r5, r5, r2, lsl #24\n\t"
15096 "lsr r2, r10, #24\n\t"
15097 "ldrb r6, [r0, r6, lsl #2]\n\t"
15098 "ldrb r7, [r0, r7, lsl #2]\n\t"
15099 "ldrb lr, [r0, lr, lsl #2]\n\t"
15100 "ldrb r2, [r0, r2, lsl #2]\n\t"
15101 "lsr r11, r11, #24\n\t"
15102 "eor r6, r6, r7, lsl #8\n\t"
15103#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15104#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15105 "lsl r7, r10, #24\n\t"
15106 "lsr r7, r7, #24\n\t"
15107#else
15108 "uxtb r7, r10\n\t"
15109#endif
15110#else
15111 "ubfx r7, r10, #0, #8\n\t"
15112#endif
15113 "eor r6, r6, lr, lsl #16\n\t"
15114#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15115#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15116 "lsl lr, r9, #16\n\t"
15117 "lsr lr, lr, #24\n\t"
15118#else
15119 "uxtb lr, r9, ror #8\n\t"
15120#endif
15121#else
15122 "ubfx lr, r9, #8, #8\n\t"
15123#endif
15124 "eor r6, r6, r2, lsl #24\n\t"
15125#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15126#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15127 "lsl r2, r8, #8\n\t"
15128 "lsr r2, r2, #24\n\t"
15129#else
15130 "uxtb r2, r8, ror #16\n\t"
15131#endif
15132#else
15133 "ubfx r2, r8, #16, #8\n\t"
15134#endif
15135 "ldrb r11, [r0, r11, lsl #2]\n\t"
15136 "ldrb r7, [r0, r7, lsl #2]\n\t"
15137 "ldrb lr, [r0, lr, lsl #2]\n\t"
15138 "ldrb r2, [r0, r2, lsl #2]\n\t"
15139 "eor lr, lr, r11, lsl #16\n\t"
15140 "ldm %[ks], {r8, r9, r10, r11}\n\t"
15141 "eor r7, r7, lr, lsl #8\n\t"
15142 "eor r7, r7, r2, lsl #16\n\t"
15143 /* XOR in Key Schedule */
15144 "eor r4, r4, r8\n\t"
15145 "eor r5, r5, r9\n\t"
15146 "eor r6, r6, r10\n\t"
15147 "eor r7, r7, r11\n\t"
15148#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
15149 "pop {r1, %[len], lr}\n\t"
15150 "ldr %[ks], [sp]\n\t"
15151#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15152 "eor r8, r4, r4, ror #16\n\t"
15153 "eor r9, r5, r5, ror #16\n\t"
15154 "eor r10, r6, r6, ror #16\n\t"
15155 "eor r11, r7, r7, ror #16\n\t"
15156 "bic r8, r8, #0xff0000\n\t"
15157 "bic r9, r9, #0xff0000\n\t"
15158 "bic r10, r10, #0xff0000\n\t"
15159 "bic r11, r11, #0xff0000\n\t"
15160 "ror r4, r4, #8\n\t"
15161 "ror r5, r5, #8\n\t"
15162 "ror r6, r6, #8\n\t"
15163 "ror r7, r7, #8\n\t"
15164 "eor r4, r4, r8, lsr #8\n\t"
15165 "eor r5, r5, r9, lsr #8\n\t"
15166 "eor r6, r6, r10, lsr #8\n\t"
15167 "eor r7, r7, r11, lsr #8\n\t"
15168#else
15169 "rev r4, r4\n\t"
15170 "rev r5, r5\n\t"
15171 "rev r6, r6\n\t"
15172 "rev r7, r7\n\t"
15173#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
15174 "ldr r8, [lr]\n\t"
15175 "ldr r9, [lr, #4]\n\t"
15176 "ldr r10, [lr, #8]\n\t"
15177 "ldr r11, [lr, #12]\n\t"
15178 "eor r4, r4, r8\n\t"
15179 "eor r5, r5, r9\n\t"
15180 "eor r6, r6, r10\n\t"
15181 "eor r7, r7, r11\n\t"
15182 "ldr r8, [sp, #4]\n\t"
15183 "str r4, [%[out]]\n\t"
15184 "str r5, [%[out], #4]\n\t"
15185 "str r6, [%[out], #8]\n\t"
15186 "str r7, [%[out], #12]\n\t"
15187 "ldm r8, {r4, r5, r6, r7}\n\t"
15188 "subs %[len], %[len], #16\n\t"
15189 "add lr, lr, #16\n\t"
15190 "add %[out], %[out], #16\n\t"
15191 "bne L_AES_CTR_encrypt_loop_block_256_%=\n\t"
15192 "b L_AES_CTR_encrypt_end_%=\n\t"
15193 "\n"
15194 "L_AES_CTR_encrypt_start_block_192_%=:\n\t"
15195 "\n"
15196 "L_AES_CTR_encrypt_loop_block_192_%=:\n\t"
15197 "push {r1, %[len], lr}\n\t"
15198 "ldr lr, [sp, #16]\n\t"
15199 "adds r11, r7, #1\n\t"
15200 "adcs r10, r6, #0\n\t"
15201 "adcs r9, r5, #0\n\t"
15202 "adc r8, r4, #0\n\t"
15203 "stm lr, {r8, r9, r10, r11}\n\t"
15204 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
15205 /* Round: 0 - XOR in key schedule */
15206 "eor r4, r4, r8\n\t"
15207 "eor r5, r5, r9\n\t"
15208 "eor r6, r6, r10\n\t"
15209 "eor r7, r7, r11\n\t"
15210 "mov r1, #5\n\t"
15211#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
15212 "bl AES_encrypt_block\n\t"
15213#else
15214 "\n"
15215 "L_AES_CTR_encrypt_block_nr_192_%=:\n\t"
15216#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15217#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15218 "lsl r8, r5, #8\n\t"
15219 "lsr r8, r8, #24\n\t"
15220#else
15221 "uxtb r8, r5, ror #16\n\t"
15222#endif
15223#else
15224 "ubfx r8, r5, #16, #8\n\t"
15225#endif
15226 "lsr r11, r4, #24\n\t"
15227#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15228#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15229 "lsl lr, r6, #16\n\t"
15230 "lsr lr, lr, #24\n\t"
15231#else
15232 "uxtb lr, r6, ror #8\n\t"
15233#endif
15234#else
15235 "ubfx lr, r6, #8, #8\n\t"
15236#endif
15237#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15238#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15239 "lsl r2, r7, #24\n\t"
15240 "lsr r2, r2, #24\n\t"
15241#else
15242 "uxtb r2, r7\n\t"
15243#endif
15244#else
15245 "ubfx r2, r7, #0, #8\n\t"
15246#endif
15247 "ldr r8, [r0, r8, lsl #2]\n\t"
15248 "ldr r11, [r0, r11, lsl #2]\n\t"
15249 "ldr lr, [r0, lr, lsl #2]\n\t"
15250 "ldr r2, [r0, r2, lsl #2]\n\t"
15251#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15252#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15253 "lsl r9, r6, #8\n\t"
15254 "lsr r9, r9, #24\n\t"
15255#else
15256 "uxtb r9, r6, ror #16\n\t"
15257#endif
15258#else
15259 "ubfx r9, r6, #16, #8\n\t"
15260#endif
15261 "eor r8, r8, r11, ror #24\n\t"
15262 "lsr r11, r5, #24\n\t"
15263 "eor r8, r8, lr, ror #8\n\t"
15264#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15265#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15266 "lsl lr, r7, #16\n\t"
15267 "lsr lr, lr, #24\n\t"
15268#else
15269 "uxtb lr, r7, ror #8\n\t"
15270#endif
15271#else
15272 "ubfx lr, r7, #8, #8\n\t"
15273#endif
15274 "eor r8, r8, r2, ror #16\n\t"
15275#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15276#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15277 "lsl r2, r4, #24\n\t"
15278 "lsr r2, r2, #24\n\t"
15279#else
15280 "uxtb r2, r4\n\t"
15281#endif
15282#else
15283 "ubfx r2, r4, #0, #8\n\t"
15284#endif
15285 "ldr r9, [r0, r9, lsl #2]\n\t"
15286 "ldr r11, [r0, r11, lsl #2]\n\t"
15287 "ldr lr, [r0, lr, lsl #2]\n\t"
15288 "ldr r2, [r0, r2, lsl #2]\n\t"
15289#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15290#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15291 "lsl r10, r7, #8\n\t"
15292 "lsr r10, r10, #24\n\t"
15293#else
15294 "uxtb r10, r7, ror #16\n\t"
15295#endif
15296#else
15297 "ubfx r10, r7, #16, #8\n\t"
15298#endif
15299 "eor r9, r9, r11, ror #24\n\t"
15300 "lsr r11, r6, #24\n\t"
15301 "eor r9, r9, lr, ror #8\n\t"
15302#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15303#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15304 "lsl lr, r4, #16\n\t"
15305 "lsr lr, lr, #24\n\t"
15306#else
15307 "uxtb lr, r4, ror #8\n\t"
15308#endif
15309#else
15310 "ubfx lr, r4, #8, #8\n\t"
15311#endif
15312 "eor r9, r9, r2, ror #16\n\t"
15313#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15314#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15315 "lsl r2, r5, #24\n\t"
15316 "lsr r2, r2, #24\n\t"
15317#else
15318 "uxtb r2, r5\n\t"
15319#endif
15320#else
15321 "ubfx r2, r5, #0, #8\n\t"
15322#endif
15323 "ldr r10, [r0, r10, lsl #2]\n\t"
15324 "ldr r11, [r0, r11, lsl #2]\n\t"
15325 "ldr lr, [r0, lr, lsl #2]\n\t"
15326 "ldr r2, [r0, r2, lsl #2]\n\t"
15327#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15328#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15329 "lsl r6, r6, #24\n\t"
15330 "lsr r6, r6, #24\n\t"
15331#else
15332 "uxtb r6, r6\n\t"
15333#endif
15334#else
15335 "ubfx r6, r6, #0, #8\n\t"
15336#endif
15337 "eor r10, r10, r11, ror #24\n\t"
15338#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15339#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15340 "lsl r11, r4, #8\n\t"
15341 "lsr r11, r11, #24\n\t"
15342#else
15343 "uxtb r11, r4, ror #16\n\t"
15344#endif
15345#else
15346 "ubfx r11, r4, #16, #8\n\t"
15347#endif
15348 "eor r10, r10, lr, ror #8\n\t"
15349 "lsr lr, r7, #24\n\t"
15350 "eor r10, r10, r2, ror #16\n\t"
15351#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15352#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15353 "lsl r2, r5, #16\n\t"
15354 "lsr r2, r2, #24\n\t"
15355#else
15356 "uxtb r2, r5, ror #8\n\t"
15357#endif
15358#else
15359 "ubfx r2, r5, #8, #8\n\t"
15360#endif
15361 "ldr r6, [r0, r6, lsl #2]\n\t"
15362 "ldr lr, [r0, lr, lsl #2]\n\t"
15363 "ldr r11, [r0, r11, lsl #2]\n\t"
15364 "ldr r2, [r0, r2, lsl #2]\n\t"
15365 "eor lr, lr, r6, ror #24\n\t"
15366 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
15367 "eor r11, r11, lr, ror #24\n\t"
15368 "eor r11, r11, r2, ror #8\n\t"
15369 /* XOR in Key Schedule */
15370 "eor r8, r8, r4\n\t"
15371 "eor r9, r9, r5\n\t"
15372 "eor r10, r10, r6\n\t"
15373 "eor r11, r11, r7\n\t"
15374#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15375#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15376 "lsl r4, r9, #8\n\t"
15377 "lsr r4, r4, #24\n\t"
15378#else
15379 "uxtb r4, r9, ror #16\n\t"
15380#endif
15381#else
15382 "ubfx r4, r9, #16, #8\n\t"
15383#endif
15384 "lsr r7, r8, #24\n\t"
15385#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15386#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15387 "lsl lr, r10, #16\n\t"
15388 "lsr lr, lr, #24\n\t"
15389#else
15390 "uxtb lr, r10, ror #8\n\t"
15391#endif
15392#else
15393 "ubfx lr, r10, #8, #8\n\t"
15394#endif
15395#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15396#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15397 "lsl r2, r11, #24\n\t"
15398 "lsr r2, r2, #24\n\t"
15399#else
15400 "uxtb r2, r11\n\t"
15401#endif
15402#else
15403 "ubfx r2, r11, #0, #8\n\t"
15404#endif
15405 "ldr r4, [r0, r4, lsl #2]\n\t"
15406 "ldr r7, [r0, r7, lsl #2]\n\t"
15407 "ldr lr, [r0, lr, lsl #2]\n\t"
15408 "ldr r2, [r0, r2, lsl #2]\n\t"
15409#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15410#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15411 "lsl r5, r10, #8\n\t"
15412 "lsr r5, r5, #24\n\t"
15413#else
15414 "uxtb r5, r10, ror #16\n\t"
15415#endif
15416#else
15417 "ubfx r5, r10, #16, #8\n\t"
15418#endif
15419 "eor r4, r4, r7, ror #24\n\t"
15420 "lsr r7, r9, #24\n\t"
15421 "eor r4, r4, lr, ror #8\n\t"
15422#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15423#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15424 "lsl lr, r11, #16\n\t"
15425 "lsr lr, lr, #24\n\t"
15426#else
15427 "uxtb lr, r11, ror #8\n\t"
15428#endif
15429#else
15430 "ubfx lr, r11, #8, #8\n\t"
15431#endif
15432 "eor r4, r4, r2, ror #16\n\t"
15433#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15434#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15435 "lsl r2, r8, #24\n\t"
15436 "lsr r2, r2, #24\n\t"
15437#else
15438 "uxtb r2, r8\n\t"
15439#endif
15440#else
15441 "ubfx r2, r8, #0, #8\n\t"
15442#endif
15443 "ldr r5, [r0, r5, lsl #2]\n\t"
15444 "ldr r7, [r0, r7, lsl #2]\n\t"
15445 "ldr lr, [r0, lr, lsl #2]\n\t"
15446 "ldr r2, [r0, r2, lsl #2]\n\t"
15447#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15448#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15449 "lsl r6, r11, #8\n\t"
15450 "lsr r6, r6, #24\n\t"
15451#else
15452 "uxtb r6, r11, ror #16\n\t"
15453#endif
15454#else
15455 "ubfx r6, r11, #16, #8\n\t"
15456#endif
15457 "eor r5, r5, r7, ror #24\n\t"
15458 "lsr r7, r10, #24\n\t"
15459 "eor r5, r5, lr, ror #8\n\t"
15460#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15461#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15462 "lsl lr, r8, #16\n\t"
15463 "lsr lr, lr, #24\n\t"
15464#else
15465 "uxtb lr, r8, ror #8\n\t"
15466#endif
15467#else
15468 "ubfx lr, r8, #8, #8\n\t"
15469#endif
15470 "eor r5, r5, r2, ror #16\n\t"
15471#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15472#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15473 "lsl r2, r9, #24\n\t"
15474 "lsr r2, r2, #24\n\t"
15475#else
15476 "uxtb r2, r9\n\t"
15477#endif
15478#else
15479 "ubfx r2, r9, #0, #8\n\t"
15480#endif
15481 "ldr r6, [r0, r6, lsl #2]\n\t"
15482 "ldr r7, [r0, r7, lsl #2]\n\t"
15483 "ldr lr, [r0, lr, lsl #2]\n\t"
15484 "ldr r2, [r0, r2, lsl #2]\n\t"
15485#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15486#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15487 "lsl r10, r10, #24\n\t"
15488 "lsr r10, r10, #24\n\t"
15489#else
15490 "uxtb r10, r10\n\t"
15491#endif
15492#else
15493 "ubfx r10, r10, #0, #8\n\t"
15494#endif
15495 "eor r6, r6, r7, ror #24\n\t"
15496#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15497#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15498 "lsl r7, r8, #8\n\t"
15499 "lsr r7, r7, #24\n\t"
15500#else
15501 "uxtb r7, r8, ror #16\n\t"
15502#endif
15503#else
15504 "ubfx r7, r8, #16, #8\n\t"
15505#endif
15506 "eor r6, r6, lr, ror #8\n\t"
15507 "lsr lr, r11, #24\n\t"
15508 "eor r6, r6, r2, ror #16\n\t"
15509#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15510#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15511 "lsl r2, r9, #16\n\t"
15512 "lsr r2, r2, #24\n\t"
15513#else
15514 "uxtb r2, r9, ror #8\n\t"
15515#endif
15516#else
15517 "ubfx r2, r9, #8, #8\n\t"
15518#endif
15519 "ldr r10, [r0, r10, lsl #2]\n\t"
15520 "ldr lr, [r0, lr, lsl #2]\n\t"
15521 "ldr r7, [r0, r7, lsl #2]\n\t"
15522 "ldr r2, [r0, r2, lsl #2]\n\t"
15523 "eor lr, lr, r10, ror #24\n\t"
15524 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
15525 "eor r7, r7, lr, ror #24\n\t"
15526 "eor r7, r7, r2, ror #8\n\t"
15527 /* XOR in Key Schedule */
15528 "eor r4, r4, r8\n\t"
15529 "eor r5, r5, r9\n\t"
15530 "eor r6, r6, r10\n\t"
15531 "eor r7, r7, r11\n\t"
15532 "subs r1, r1, #1\n\t"
15533 "bne L_AES_CTR_encrypt_block_nr_192_%=\n\t"
15534#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15535#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15536 "lsl r8, r5, #8\n\t"
15537 "lsr r8, r8, #24\n\t"
15538#else
15539 "uxtb r8, r5, ror #16\n\t"
15540#endif
15541#else
15542 "ubfx r8, r5, #16, #8\n\t"
15543#endif
15544 "lsr r11, r4, #24\n\t"
15545#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15546#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15547 "lsl lr, r6, #16\n\t"
15548 "lsr lr, lr, #24\n\t"
15549#else
15550 "uxtb lr, r6, ror #8\n\t"
15551#endif
15552#else
15553 "ubfx lr, r6, #8, #8\n\t"
15554#endif
15555#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15556#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15557 "lsl r2, r7, #24\n\t"
15558 "lsr r2, r2, #24\n\t"
15559#else
15560 "uxtb r2, r7\n\t"
15561#endif
15562#else
15563 "ubfx r2, r7, #0, #8\n\t"
15564#endif
15565 "ldr r8, [r0, r8, lsl #2]\n\t"
15566 "ldr r11, [r0, r11, lsl #2]\n\t"
15567 "ldr lr, [r0, lr, lsl #2]\n\t"
15568 "ldr r2, [r0, r2, lsl #2]\n\t"
15569#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15570#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15571 "lsl r9, r6, #8\n\t"
15572 "lsr r9, r9, #24\n\t"
15573#else
15574 "uxtb r9, r6, ror #16\n\t"
15575#endif
15576#else
15577 "ubfx r9, r6, #16, #8\n\t"
15578#endif
15579 "eor r8, r8, r11, ror #24\n\t"
15580 "lsr r11, r5, #24\n\t"
15581 "eor r8, r8, lr, ror #8\n\t"
15582#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15583#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15584 "lsl lr, r7, #16\n\t"
15585 "lsr lr, lr, #24\n\t"
15586#else
15587 "uxtb lr, r7, ror #8\n\t"
15588#endif
15589#else
15590 "ubfx lr, r7, #8, #8\n\t"
15591#endif
15592 "eor r8, r8, r2, ror #16\n\t"
15593#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15594#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15595 "lsl r2, r4, #24\n\t"
15596 "lsr r2, r2, #24\n\t"
15597#else
15598 "uxtb r2, r4\n\t"
15599#endif
15600#else
15601 "ubfx r2, r4, #0, #8\n\t"
15602#endif
15603 "ldr r9, [r0, r9, lsl #2]\n\t"
15604 "ldr r11, [r0, r11, lsl #2]\n\t"
15605 "ldr lr, [r0, lr, lsl #2]\n\t"
15606 "ldr r2, [r0, r2, lsl #2]\n\t"
15607#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15608#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15609 "lsl r10, r7, #8\n\t"
15610 "lsr r10, r10, #24\n\t"
15611#else
15612 "uxtb r10, r7, ror #16\n\t"
15613#endif
15614#else
15615 "ubfx r10, r7, #16, #8\n\t"
15616#endif
15617 "eor r9, r9, r11, ror #24\n\t"
15618 "lsr r11, r6, #24\n\t"
15619 "eor r9, r9, lr, ror #8\n\t"
15620#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15621#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15622 "lsl lr, r4, #16\n\t"
15623 "lsr lr, lr, #24\n\t"
15624#else
15625 "uxtb lr, r4, ror #8\n\t"
15626#endif
15627#else
15628 "ubfx lr, r4, #8, #8\n\t"
15629#endif
15630 "eor r9, r9, r2, ror #16\n\t"
15631#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15632#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15633 "lsl r2, r5, #24\n\t"
15634 "lsr r2, r2, #24\n\t"
15635#else
15636 "uxtb r2, r5\n\t"
15637#endif
15638#else
15639 "ubfx r2, r5, #0, #8\n\t"
15640#endif
15641 "ldr r10, [r0, r10, lsl #2]\n\t"
15642 "ldr r11, [r0, r11, lsl #2]\n\t"
15643 "ldr lr, [r0, lr, lsl #2]\n\t"
15644 "ldr r2, [r0, r2, lsl #2]\n\t"
15645#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15647 "lsl r6, r6, #24\n\t"
15648 "lsr r6, r6, #24\n\t"
15649#else
15650 "uxtb r6, r6\n\t"
15651#endif
15652#else
15653 "ubfx r6, r6, #0, #8\n\t"
15654#endif
15655 "eor r10, r10, r11, ror #24\n\t"
15656#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15657#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15658 "lsl r11, r4, #8\n\t"
15659 "lsr r11, r11, #24\n\t"
15660#else
15661 "uxtb r11, r4, ror #16\n\t"
15662#endif
15663#else
15664 "ubfx r11, r4, #16, #8\n\t"
15665#endif
15666 "eor r10, r10, lr, ror #8\n\t"
15667 "lsr lr, r7, #24\n\t"
15668 "eor r10, r10, r2, ror #16\n\t"
15669#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15670#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15671 "lsl r2, r5, #16\n\t"
15672 "lsr r2, r2, #24\n\t"
15673#else
15674 "uxtb r2, r5, ror #8\n\t"
15675#endif
15676#else
15677 "ubfx r2, r5, #8, #8\n\t"
15678#endif
15679 "ldr r6, [r0, r6, lsl #2]\n\t"
15680 "ldr lr, [r0, lr, lsl #2]\n\t"
15681 "ldr r11, [r0, r11, lsl #2]\n\t"
15682 "ldr r2, [r0, r2, lsl #2]\n\t"
15683 "eor lr, lr, r6, ror #24\n\t"
15684 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
15685 "eor r11, r11, lr, ror #24\n\t"
15686 "eor r11, r11, r2, ror #8\n\t"
15687 /* XOR in Key Schedule */
15688 "eor r8, r8, r4\n\t"
15689 "eor r9, r9, r5\n\t"
15690 "eor r10, r10, r6\n\t"
15691 "eor r11, r11, r7\n\t"
15692#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15693#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15694 "lsl r4, r11, #24\n\t"
15695 "lsr r4, r4, #24\n\t"
15696#else
15697 "uxtb r4, r11\n\t"
15698#endif
15699#else
15700 "ubfx r4, r11, #0, #8\n\t"
15701#endif
15702#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15703#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15704 "lsl r7, r10, #16\n\t"
15705 "lsr r7, r7, #24\n\t"
15706#else
15707 "uxtb r7, r10, ror #8\n\t"
15708#endif
15709#else
15710 "ubfx r7, r10, #8, #8\n\t"
15711#endif
15712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15713#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15714 "lsl lr, r9, #8\n\t"
15715 "lsr lr, lr, #24\n\t"
15716#else
15717 "uxtb lr, r9, ror #16\n\t"
15718#endif
15719#else
15720 "ubfx lr, r9, #16, #8\n\t"
15721#endif
15722 "lsr r2, r8, #24\n\t"
15723 "ldrb r4, [r0, r4, lsl #2]\n\t"
15724 "ldrb r7, [r0, r7, lsl #2]\n\t"
15725 "ldrb lr, [r0, lr, lsl #2]\n\t"
15726 "ldrb r2, [r0, r2, lsl #2]\n\t"
15727#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15728#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15729 "lsl r5, r8, #24\n\t"
15730 "lsr r5, r5, #24\n\t"
15731#else
15732 "uxtb r5, r8\n\t"
15733#endif
15734#else
15735 "ubfx r5, r8, #0, #8\n\t"
15736#endif
15737 "eor r4, r4, r7, lsl #8\n\t"
15738#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15739#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15740 "lsl r7, r11, #16\n\t"
15741 "lsr r7, r7, #24\n\t"
15742#else
15743 "uxtb r7, r11, ror #8\n\t"
15744#endif
15745#else
15746 "ubfx r7, r11, #8, #8\n\t"
15747#endif
15748 "eor r4, r4, lr, lsl #16\n\t"
15749#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15750#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15751 "lsl lr, r10, #8\n\t"
15752 "lsr lr, lr, #24\n\t"
15753#else
15754 "uxtb lr, r10, ror #16\n\t"
15755#endif
15756#else
15757 "ubfx lr, r10, #16, #8\n\t"
15758#endif
15759 "eor r4, r4, r2, lsl #24\n\t"
15760 "lsr r2, r9, #24\n\t"
15761 "ldrb r5, [r0, r5, lsl #2]\n\t"
15762 "ldrb r7, [r0, r7, lsl #2]\n\t"
15763 "ldrb lr, [r0, lr, lsl #2]\n\t"
15764 "ldrb r2, [r0, r2, lsl #2]\n\t"
15765#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15766#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15767 "lsl r6, r9, #24\n\t"
15768 "lsr r6, r6, #24\n\t"
15769#else
15770 "uxtb r6, r9\n\t"
15771#endif
15772#else
15773 "ubfx r6, r9, #0, #8\n\t"
15774#endif
15775 "eor r5, r5, r7, lsl #8\n\t"
15776#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15777#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15778 "lsl r7, r8, #16\n\t"
15779 "lsr r7, r7, #24\n\t"
15780#else
15781 "uxtb r7, r8, ror #8\n\t"
15782#endif
15783#else
15784 "ubfx r7, r8, #8, #8\n\t"
15785#endif
15786 "eor r5, r5, lr, lsl #16\n\t"
15787#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15788#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15789 "lsl lr, r11, #8\n\t"
15790 "lsr lr, lr, #24\n\t"
15791#else
15792 "uxtb lr, r11, ror #16\n\t"
15793#endif
15794#else
15795 "ubfx lr, r11, #16, #8\n\t"
15796#endif
15797 "eor r5, r5, r2, lsl #24\n\t"
15798 "lsr r2, r10, #24\n\t"
15799 "ldrb r6, [r0, r6, lsl #2]\n\t"
15800 "ldrb r7, [r0, r7, lsl #2]\n\t"
15801 "ldrb lr, [r0, lr, lsl #2]\n\t"
15802 "ldrb r2, [r0, r2, lsl #2]\n\t"
15803 "lsr r11, r11, #24\n\t"
15804 "eor r6, r6, r7, lsl #8\n\t"
15805#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15806#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15807 "lsl r7, r10, #24\n\t"
15808 "lsr r7, r7, #24\n\t"
15809#else
15810 "uxtb r7, r10\n\t"
15811#endif
15812#else
15813 "ubfx r7, r10, #0, #8\n\t"
15814#endif
15815 "eor r6, r6, lr, lsl #16\n\t"
15816#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15817#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15818 "lsl lr, r9, #16\n\t"
15819 "lsr lr, lr, #24\n\t"
15820#else
15821 "uxtb lr, r9, ror #8\n\t"
15822#endif
15823#else
15824 "ubfx lr, r9, #8, #8\n\t"
15825#endif
15826 "eor r6, r6, r2, lsl #24\n\t"
15827#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15828#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15829 "lsl r2, r8, #8\n\t"
15830 "lsr r2, r2, #24\n\t"
15831#else
15832 "uxtb r2, r8, ror #16\n\t"
15833#endif
15834#else
15835 "ubfx r2, r8, #16, #8\n\t"
15836#endif
15837 "ldrb r11, [r0, r11, lsl #2]\n\t"
15838 "ldrb r7, [r0, r7, lsl #2]\n\t"
15839 "ldrb lr, [r0, lr, lsl #2]\n\t"
15840 "ldrb r2, [r0, r2, lsl #2]\n\t"
15841 "eor lr, lr, r11, lsl #16\n\t"
15842 "ldm %[ks], {r8, r9, r10, r11}\n\t"
15843 "eor r7, r7, lr, lsl #8\n\t"
15844 "eor r7, r7, r2, lsl #16\n\t"
15845 /* XOR in Key Schedule */
15846 "eor r4, r4, r8\n\t"
15847 "eor r5, r5, r9\n\t"
15848 "eor r6, r6, r10\n\t"
15849 "eor r7, r7, r11\n\t"
15850#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
15851 "pop {r1, %[len], lr}\n\t"
15852 "ldr %[ks], [sp]\n\t"
15853#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15854 "eor r8, r4, r4, ror #16\n\t"
15855 "eor r9, r5, r5, ror #16\n\t"
15856 "eor r10, r6, r6, ror #16\n\t"
15857 "eor r11, r7, r7, ror #16\n\t"
15858 "bic r8, r8, #0xff0000\n\t"
15859 "bic r9, r9, #0xff0000\n\t"
15860 "bic r10, r10, #0xff0000\n\t"
15861 "bic r11, r11, #0xff0000\n\t"
15862 "ror r4, r4, #8\n\t"
15863 "ror r5, r5, #8\n\t"
15864 "ror r6, r6, #8\n\t"
15865 "ror r7, r7, #8\n\t"
15866 "eor r4, r4, r8, lsr #8\n\t"
15867 "eor r5, r5, r9, lsr #8\n\t"
15868 "eor r6, r6, r10, lsr #8\n\t"
15869 "eor r7, r7, r11, lsr #8\n\t"
15870#else
15871 "rev r4, r4\n\t"
15872 "rev r5, r5\n\t"
15873 "rev r6, r6\n\t"
15874 "rev r7, r7\n\t"
15875#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
15876 "ldr r8, [lr]\n\t"
15877 "ldr r9, [lr, #4]\n\t"
15878 "ldr r10, [lr, #8]\n\t"
15879 "ldr r11, [lr, #12]\n\t"
15880 "eor r4, r4, r8\n\t"
15881 "eor r5, r5, r9\n\t"
15882 "eor r6, r6, r10\n\t"
15883 "eor r7, r7, r11\n\t"
15884 "ldr r8, [sp, #4]\n\t"
15885 "str r4, [%[out]]\n\t"
15886 "str r5, [%[out], #4]\n\t"
15887 "str r6, [%[out], #8]\n\t"
15888 "str r7, [%[out], #12]\n\t"
15889 "ldm r8, {r4, r5, r6, r7}\n\t"
15890 "subs %[len], %[len], #16\n\t"
15891 "add lr, lr, #16\n\t"
15892 "add %[out], %[out], #16\n\t"
15893 "bne L_AES_CTR_encrypt_loop_block_192_%=\n\t"
15894 "b L_AES_CTR_encrypt_end_%=\n\t"
15895 "\n"
15896 "L_AES_CTR_encrypt_start_block_128_%=:\n\t"
15897 "\n"
15898 "L_AES_CTR_encrypt_loop_block_128_%=:\n\t"
15899 "push {r1, %[len], lr}\n\t"
15900 "ldr lr, [sp, #16]\n\t"
15901 "adds r11, r7, #1\n\t"
15902 "adcs r10, r6, #0\n\t"
15903 "adcs r9, r5, #0\n\t"
15904 "adc r8, r4, #0\n\t"
15905 "stm lr, {r8, r9, r10, r11}\n\t"
15906 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
15907 /* Round: 0 - XOR in key schedule */
15908 "eor r4, r4, r8\n\t"
15909 "eor r5, r5, r9\n\t"
15910 "eor r6, r6, r10\n\t"
15911 "eor r7, r7, r11\n\t"
15912 "mov r1, #4\n\t"
15913#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
15914 "bl AES_encrypt_block\n\t"
15915#else
15916 "\n"
15917 "L_AES_CTR_encrypt_block_nr_128_%=:\n\t"
15918#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15919#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15920 "lsl r8, r5, #8\n\t"
15921 "lsr r8, r8, #24\n\t"
15922#else
15923 "uxtb r8, r5, ror #16\n\t"
15924#endif
15925#else
15926 "ubfx r8, r5, #16, #8\n\t"
15927#endif
15928 "lsr r11, r4, #24\n\t"
15929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15930#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15931 "lsl lr, r6, #16\n\t"
15932 "lsr lr, lr, #24\n\t"
15933#else
15934 "uxtb lr, r6, ror #8\n\t"
15935#endif
15936#else
15937 "ubfx lr, r6, #8, #8\n\t"
15938#endif
15939#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15940#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15941 "lsl r2, r7, #24\n\t"
15942 "lsr r2, r2, #24\n\t"
15943#else
15944 "uxtb r2, r7\n\t"
15945#endif
15946#else
15947 "ubfx r2, r7, #0, #8\n\t"
15948#endif
15949 "ldr r8, [r0, r8, lsl #2]\n\t"
15950 "ldr r11, [r0, r11, lsl #2]\n\t"
15951 "ldr lr, [r0, lr, lsl #2]\n\t"
15952 "ldr r2, [r0, r2, lsl #2]\n\t"
15953#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15954#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15955 "lsl r9, r6, #8\n\t"
15956 "lsr r9, r9, #24\n\t"
15957#else
15958 "uxtb r9, r6, ror #16\n\t"
15959#endif
15960#else
15961 "ubfx r9, r6, #16, #8\n\t"
15962#endif
15963 "eor r8, r8, r11, ror #24\n\t"
15964 "lsr r11, r5, #24\n\t"
15965 "eor r8, r8, lr, ror #8\n\t"
15966#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15967#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15968 "lsl lr, r7, #16\n\t"
15969 "lsr lr, lr, #24\n\t"
15970#else
15971 "uxtb lr, r7, ror #8\n\t"
15972#endif
15973#else
15974 "ubfx lr, r7, #8, #8\n\t"
15975#endif
15976 "eor r8, r8, r2, ror #16\n\t"
15977#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15978#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15979 "lsl r2, r4, #24\n\t"
15980 "lsr r2, r2, #24\n\t"
15981#else
15982 "uxtb r2, r4\n\t"
15983#endif
15984#else
15985 "ubfx r2, r4, #0, #8\n\t"
15986#endif
15987 "ldr r9, [r0, r9, lsl #2]\n\t"
15988 "ldr r11, [r0, r11, lsl #2]\n\t"
15989 "ldr lr, [r0, lr, lsl #2]\n\t"
15990 "ldr r2, [r0, r2, lsl #2]\n\t"
15991#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
15992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
15993 "lsl r10, r7, #8\n\t"
15994 "lsr r10, r10, #24\n\t"
15995#else
15996 "uxtb r10, r7, ror #16\n\t"
15997#endif
15998#else
15999 "ubfx r10, r7, #16, #8\n\t"
16000#endif
16001 "eor r9, r9, r11, ror #24\n\t"
16002 "lsr r11, r6, #24\n\t"
16003 "eor r9, r9, lr, ror #8\n\t"
16004#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16005#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16006 "lsl lr, r4, #16\n\t"
16007 "lsr lr, lr, #24\n\t"
16008#else
16009 "uxtb lr, r4, ror #8\n\t"
16010#endif
16011#else
16012 "ubfx lr, r4, #8, #8\n\t"
16013#endif
16014 "eor r9, r9, r2, ror #16\n\t"
16015#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16016#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16017 "lsl r2, r5, #24\n\t"
16018 "lsr r2, r2, #24\n\t"
16019#else
16020 "uxtb r2, r5\n\t"
16021#endif
16022#else
16023 "ubfx r2, r5, #0, #8\n\t"
16024#endif
16025 "ldr r10, [r0, r10, lsl #2]\n\t"
16026 "ldr r11, [r0, r11, lsl #2]\n\t"
16027 "ldr lr, [r0, lr, lsl #2]\n\t"
16028 "ldr r2, [r0, r2, lsl #2]\n\t"
16029#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16031 "lsl r6, r6, #24\n\t"
16032 "lsr r6, r6, #24\n\t"
16033#else
16034 "uxtb r6, r6\n\t"
16035#endif
16036#else
16037 "ubfx r6, r6, #0, #8\n\t"
16038#endif
16039 "eor r10, r10, r11, ror #24\n\t"
16040#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16041#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16042 "lsl r11, r4, #8\n\t"
16043 "lsr r11, r11, #24\n\t"
16044#else
16045 "uxtb r11, r4, ror #16\n\t"
16046#endif
16047#else
16048 "ubfx r11, r4, #16, #8\n\t"
16049#endif
16050 "eor r10, r10, lr, ror #8\n\t"
16051 "lsr lr, r7, #24\n\t"
16052 "eor r10, r10, r2, ror #16\n\t"
16053#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16054#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16055 "lsl r2, r5, #16\n\t"
16056 "lsr r2, r2, #24\n\t"
16057#else
16058 "uxtb r2, r5, ror #8\n\t"
16059#endif
16060#else
16061 "ubfx r2, r5, #8, #8\n\t"
16062#endif
16063 "ldr r6, [r0, r6, lsl #2]\n\t"
16064 "ldr lr, [r0, lr, lsl #2]\n\t"
16065 "ldr r11, [r0, r11, lsl #2]\n\t"
16066 "ldr r2, [r0, r2, lsl #2]\n\t"
16067 "eor lr, lr, r6, ror #24\n\t"
16068 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
16069 "eor r11, r11, lr, ror #24\n\t"
16070 "eor r11, r11, r2, ror #8\n\t"
16071 /* XOR in Key Schedule */
16072 "eor r8, r8, r4\n\t"
16073 "eor r9, r9, r5\n\t"
16074 "eor r10, r10, r6\n\t"
16075 "eor r11, r11, r7\n\t"
16076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16077#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16078 "lsl r4, r9, #8\n\t"
16079 "lsr r4, r4, #24\n\t"
16080#else
16081 "uxtb r4, r9, ror #16\n\t"
16082#endif
16083#else
16084 "ubfx r4, r9, #16, #8\n\t"
16085#endif
16086 "lsr r7, r8, #24\n\t"
16087#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16088#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16089 "lsl lr, r10, #16\n\t"
16090 "lsr lr, lr, #24\n\t"
16091#else
16092 "uxtb lr, r10, ror #8\n\t"
16093#endif
16094#else
16095 "ubfx lr, r10, #8, #8\n\t"
16096#endif
16097#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16098#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16099 "lsl r2, r11, #24\n\t"
16100 "lsr r2, r2, #24\n\t"
16101#else
16102 "uxtb r2, r11\n\t"
16103#endif
16104#else
16105 "ubfx r2, r11, #0, #8\n\t"
16106#endif
16107 "ldr r4, [r0, r4, lsl #2]\n\t"
16108 "ldr r7, [r0, r7, lsl #2]\n\t"
16109 "ldr lr, [r0, lr, lsl #2]\n\t"
16110 "ldr r2, [r0, r2, lsl #2]\n\t"
16111#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16112#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16113 "lsl r5, r10, #8\n\t"
16114 "lsr r5, r5, #24\n\t"
16115#else
16116 "uxtb r5, r10, ror #16\n\t"
16117#endif
16118#else
16119 "ubfx r5, r10, #16, #8\n\t"
16120#endif
16121 "eor r4, r4, r7, ror #24\n\t"
16122 "lsr r7, r9, #24\n\t"
16123 "eor r4, r4, lr, ror #8\n\t"
16124#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16125#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16126 "lsl lr, r11, #16\n\t"
16127 "lsr lr, lr, #24\n\t"
16128#else
16129 "uxtb lr, r11, ror #8\n\t"
16130#endif
16131#else
16132 "ubfx lr, r11, #8, #8\n\t"
16133#endif
16134 "eor r4, r4, r2, ror #16\n\t"
16135#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16136#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16137 "lsl r2, r8, #24\n\t"
16138 "lsr r2, r2, #24\n\t"
16139#else
16140 "uxtb r2, r8\n\t"
16141#endif
16142#else
16143 "ubfx r2, r8, #0, #8\n\t"
16144#endif
16145 "ldr r5, [r0, r5, lsl #2]\n\t"
16146 "ldr r7, [r0, r7, lsl #2]\n\t"
16147 "ldr lr, [r0, lr, lsl #2]\n\t"
16148 "ldr r2, [r0, r2, lsl #2]\n\t"
16149#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16150#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16151 "lsl r6, r11, #8\n\t"
16152 "lsr r6, r6, #24\n\t"
16153#else
16154 "uxtb r6, r11, ror #16\n\t"
16155#endif
16156#else
16157 "ubfx r6, r11, #16, #8\n\t"
16158#endif
16159 "eor r5, r5, r7, ror #24\n\t"
16160 "lsr r7, r10, #24\n\t"
16161 "eor r5, r5, lr, ror #8\n\t"
16162#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16164 "lsl lr, r8, #16\n\t"
16165 "lsr lr, lr, #24\n\t"
16166#else
16167 "uxtb lr, r8, ror #8\n\t"
16168#endif
16169#else
16170 "ubfx lr, r8, #8, #8\n\t"
16171#endif
16172 "eor r5, r5, r2, ror #16\n\t"
16173#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16174#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16175 "lsl r2, r9, #24\n\t"
16176 "lsr r2, r2, #24\n\t"
16177#else
16178 "uxtb r2, r9\n\t"
16179#endif
16180#else
16181 "ubfx r2, r9, #0, #8\n\t"
16182#endif
16183 "ldr r6, [r0, r6, lsl #2]\n\t"
16184 "ldr r7, [r0, r7, lsl #2]\n\t"
16185 "ldr lr, [r0, lr, lsl #2]\n\t"
16186 "ldr r2, [r0, r2, lsl #2]\n\t"
16187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16188#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16189 "lsl r10, r10, #24\n\t"
16190 "lsr r10, r10, #24\n\t"
16191#else
16192 "uxtb r10, r10\n\t"
16193#endif
16194#else
16195 "ubfx r10, r10, #0, #8\n\t"
16196#endif
16197 "eor r6, r6, r7, ror #24\n\t"
16198#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16200 "lsl r7, r8, #8\n\t"
16201 "lsr r7, r7, #24\n\t"
16202#else
16203 "uxtb r7, r8, ror #16\n\t"
16204#endif
16205#else
16206 "ubfx r7, r8, #16, #8\n\t"
16207#endif
16208 "eor r6, r6, lr, ror #8\n\t"
16209 "lsr lr, r11, #24\n\t"
16210 "eor r6, r6, r2, ror #16\n\t"
16211#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16213 "lsl r2, r9, #16\n\t"
16214 "lsr r2, r2, #24\n\t"
16215#else
16216 "uxtb r2, r9, ror #8\n\t"
16217#endif
16218#else
16219 "ubfx r2, r9, #8, #8\n\t"
16220#endif
16221 "ldr r10, [r0, r10, lsl #2]\n\t"
16222 "ldr lr, [r0, lr, lsl #2]\n\t"
16223 "ldr r7, [r0, r7, lsl #2]\n\t"
16224 "ldr r2, [r0, r2, lsl #2]\n\t"
16225 "eor lr, lr, r10, ror #24\n\t"
16226 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
16227 "eor r7, r7, lr, ror #24\n\t"
16228 "eor r7, r7, r2, ror #8\n\t"
16229 /* XOR in Key Schedule */
16230 "eor r4, r4, r8\n\t"
16231 "eor r5, r5, r9\n\t"
16232 "eor r6, r6, r10\n\t"
16233 "eor r7, r7, r11\n\t"
16234 "subs r1, r1, #1\n\t"
16235 "bne L_AES_CTR_encrypt_block_nr_128_%=\n\t"
16236#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16237#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16238 "lsl r8, r5, #8\n\t"
16239 "lsr r8, r8, #24\n\t"
16240#else
16241 "uxtb r8, r5, ror #16\n\t"
16242#endif
16243#else
16244 "ubfx r8, r5, #16, #8\n\t"
16245#endif
16246 "lsr r11, r4, #24\n\t"
16247#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16248#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16249 "lsl lr, r6, #16\n\t"
16250 "lsr lr, lr, #24\n\t"
16251#else
16252 "uxtb lr, r6, ror #8\n\t"
16253#endif
16254#else
16255 "ubfx lr, r6, #8, #8\n\t"
16256#endif
16257#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16258#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16259 "lsl r2, r7, #24\n\t"
16260 "lsr r2, r2, #24\n\t"
16261#else
16262 "uxtb r2, r7\n\t"
16263#endif
16264#else
16265 "ubfx r2, r7, #0, #8\n\t"
16266#endif
16267 "ldr r8, [r0, r8, lsl #2]\n\t"
16268 "ldr r11, [r0, r11, lsl #2]\n\t"
16269 "ldr lr, [r0, lr, lsl #2]\n\t"
16270 "ldr r2, [r0, r2, lsl #2]\n\t"
16271#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16272#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16273 "lsl r9, r6, #8\n\t"
16274 "lsr r9, r9, #24\n\t"
16275#else
16276 "uxtb r9, r6, ror #16\n\t"
16277#endif
16278#else
16279 "ubfx r9, r6, #16, #8\n\t"
16280#endif
16281 "eor r8, r8, r11, ror #24\n\t"
16282 "lsr r11, r5, #24\n\t"
16283 "eor r8, r8, lr, ror #8\n\t"
16284#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16285#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16286 "lsl lr, r7, #16\n\t"
16287 "lsr lr, lr, #24\n\t"
16288#else
16289 "uxtb lr, r7, ror #8\n\t"
16290#endif
16291#else
16292 "ubfx lr, r7, #8, #8\n\t"
16293#endif
16294 "eor r8, r8, r2, ror #16\n\t"
16295#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16296#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16297 "lsl r2, r4, #24\n\t"
16298 "lsr r2, r2, #24\n\t"
16299#else
16300 "uxtb r2, r4\n\t"
16301#endif
16302#else
16303 "ubfx r2, r4, #0, #8\n\t"
16304#endif
16305 "ldr r9, [r0, r9, lsl #2]\n\t"
16306 "ldr r11, [r0, r11, lsl #2]\n\t"
16307 "ldr lr, [r0, lr, lsl #2]\n\t"
16308 "ldr r2, [r0, r2, lsl #2]\n\t"
16309#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16310#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16311 "lsl r10, r7, #8\n\t"
16312 "lsr r10, r10, #24\n\t"
16313#else
16314 "uxtb r10, r7, ror #16\n\t"
16315#endif
16316#else
16317 "ubfx r10, r7, #16, #8\n\t"
16318#endif
16319 "eor r9, r9, r11, ror #24\n\t"
16320 "lsr r11, r6, #24\n\t"
16321 "eor r9, r9, lr, ror #8\n\t"
16322#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16323#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16324 "lsl lr, r4, #16\n\t"
16325 "lsr lr, lr, #24\n\t"
16326#else
16327 "uxtb lr, r4, ror #8\n\t"
16328#endif
16329#else
16330 "ubfx lr, r4, #8, #8\n\t"
16331#endif
16332 "eor r9, r9, r2, ror #16\n\t"
16333#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16334#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16335 "lsl r2, r5, #24\n\t"
16336 "lsr r2, r2, #24\n\t"
16337#else
16338 "uxtb r2, r5\n\t"
16339#endif
16340#else
16341 "ubfx r2, r5, #0, #8\n\t"
16342#endif
16343 "ldr r10, [r0, r10, lsl #2]\n\t"
16344 "ldr r11, [r0, r11, lsl #2]\n\t"
16345 "ldr lr, [r0, lr, lsl #2]\n\t"
16346 "ldr r2, [r0, r2, lsl #2]\n\t"
16347#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16348#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16349 "lsl r6, r6, #24\n\t"
16350 "lsr r6, r6, #24\n\t"
16351#else
16352 "uxtb r6, r6\n\t"
16353#endif
16354#else
16355 "ubfx r6, r6, #0, #8\n\t"
16356#endif
16357 "eor r10, r10, r11, ror #24\n\t"
16358#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16359#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16360 "lsl r11, r4, #8\n\t"
16361 "lsr r11, r11, #24\n\t"
16362#else
16363 "uxtb r11, r4, ror #16\n\t"
16364#endif
16365#else
16366 "ubfx r11, r4, #16, #8\n\t"
16367#endif
16368 "eor r10, r10, lr, ror #8\n\t"
16369 "lsr lr, r7, #24\n\t"
16370 "eor r10, r10, r2, ror #16\n\t"
16371#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16372#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16373 "lsl r2, r5, #16\n\t"
16374 "lsr r2, r2, #24\n\t"
16375#else
16376 "uxtb r2, r5, ror #8\n\t"
16377#endif
16378#else
16379 "ubfx r2, r5, #8, #8\n\t"
16380#endif
16381 "ldr r6, [r0, r6, lsl #2]\n\t"
16382 "ldr lr, [r0, lr, lsl #2]\n\t"
16383 "ldr r11, [r0, r11, lsl #2]\n\t"
16384 "ldr r2, [r0, r2, lsl #2]\n\t"
16385 "eor lr, lr, r6, ror #24\n\t"
16386 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
16387 "eor r11, r11, lr, ror #24\n\t"
16388 "eor r11, r11, r2, ror #8\n\t"
16389 /* XOR in Key Schedule */
16390 "eor r8, r8, r4\n\t"
16391 "eor r9, r9, r5\n\t"
16392 "eor r10, r10, r6\n\t"
16393 "eor r11, r11, r7\n\t"
16394#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16395#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16396 "lsl r4, r11, #24\n\t"
16397 "lsr r4, r4, #24\n\t"
16398#else
16399 "uxtb r4, r11\n\t"
16400#endif
16401#else
16402 "ubfx r4, r11, #0, #8\n\t"
16403#endif
16404#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16405#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16406 "lsl r7, r10, #16\n\t"
16407 "lsr r7, r7, #24\n\t"
16408#else
16409 "uxtb r7, r10, ror #8\n\t"
16410#endif
16411#else
16412 "ubfx r7, r10, #8, #8\n\t"
16413#endif
16414#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16415#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16416 "lsl lr, r9, #8\n\t"
16417 "lsr lr, lr, #24\n\t"
16418#else
16419 "uxtb lr, r9, ror #16\n\t"
16420#endif
16421#else
16422 "ubfx lr, r9, #16, #8\n\t"
16423#endif
16424 "lsr r2, r8, #24\n\t"
16425 "ldrb r4, [r0, r4, lsl #2]\n\t"
16426 "ldrb r7, [r0, r7, lsl #2]\n\t"
16427 "ldrb lr, [r0, lr, lsl #2]\n\t"
16428 "ldrb r2, [r0, r2, lsl #2]\n\t"
16429#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16430#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16431 "lsl r5, r8, #24\n\t"
16432 "lsr r5, r5, #24\n\t"
16433#else
16434 "uxtb r5, r8\n\t"
16435#endif
16436#else
16437 "ubfx r5, r8, #0, #8\n\t"
16438#endif
16439 "eor r4, r4, r7, lsl #8\n\t"
16440#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16441#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16442 "lsl r7, r11, #16\n\t"
16443 "lsr r7, r7, #24\n\t"
16444#else
16445 "uxtb r7, r11, ror #8\n\t"
16446#endif
16447#else
16448 "ubfx r7, r11, #8, #8\n\t"
16449#endif
16450 "eor r4, r4, lr, lsl #16\n\t"
16451#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16452#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16453 "lsl lr, r10, #8\n\t"
16454 "lsr lr, lr, #24\n\t"
16455#else
16456 "uxtb lr, r10, ror #16\n\t"
16457#endif
16458#else
16459 "ubfx lr, r10, #16, #8\n\t"
16460#endif
16461 "eor r4, r4, r2, lsl #24\n\t"
16462 "lsr r2, r9, #24\n\t"
16463 "ldrb r5, [r0, r5, lsl #2]\n\t"
16464 "ldrb r7, [r0, r7, lsl #2]\n\t"
16465 "ldrb lr, [r0, lr, lsl #2]\n\t"
16466 "ldrb r2, [r0, r2, lsl #2]\n\t"
16467#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16468#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16469 "lsl r6, r9, #24\n\t"
16470 "lsr r6, r6, #24\n\t"
16471#else
16472 "uxtb r6, r9\n\t"
16473#endif
16474#else
16475 "ubfx r6, r9, #0, #8\n\t"
16476#endif
16477 "eor r5, r5, r7, lsl #8\n\t"
16478#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16479#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16480 "lsl r7, r8, #16\n\t"
16481 "lsr r7, r7, #24\n\t"
16482#else
16483 "uxtb r7, r8, ror #8\n\t"
16484#endif
16485#else
16486 "ubfx r7, r8, #8, #8\n\t"
16487#endif
16488 "eor r5, r5, lr, lsl #16\n\t"
16489#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16490#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16491 "lsl lr, r11, #8\n\t"
16492 "lsr lr, lr, #24\n\t"
16493#else
16494 "uxtb lr, r11, ror #16\n\t"
16495#endif
16496#else
16497 "ubfx lr, r11, #16, #8\n\t"
16498#endif
16499 "eor r5, r5, r2, lsl #24\n\t"
16500 "lsr r2, r10, #24\n\t"
16501 "ldrb r6, [r0, r6, lsl #2]\n\t"
16502 "ldrb r7, [r0, r7, lsl #2]\n\t"
16503 "ldrb lr, [r0, lr, lsl #2]\n\t"
16504 "ldrb r2, [r0, r2, lsl #2]\n\t"
16505 "lsr r11, r11, #24\n\t"
16506 "eor r6, r6, r7, lsl #8\n\t"
16507#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16508#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16509 "lsl r7, r10, #24\n\t"
16510 "lsr r7, r7, #24\n\t"
16511#else
16512 "uxtb r7, r10\n\t"
16513#endif
16514#else
16515 "ubfx r7, r10, #0, #8\n\t"
16516#endif
16517 "eor r6, r6, lr, lsl #16\n\t"
16518#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16519#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16520 "lsl lr, r9, #16\n\t"
16521 "lsr lr, lr, #24\n\t"
16522#else
16523 "uxtb lr, r9, ror #8\n\t"
16524#endif
16525#else
16526 "ubfx lr, r9, #8, #8\n\t"
16527#endif
16528 "eor r6, r6, r2, lsl #24\n\t"
16529#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16530#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16531 "lsl r2, r8, #8\n\t"
16532 "lsr r2, r2, #24\n\t"
16533#else
16534 "uxtb r2, r8, ror #16\n\t"
16535#endif
16536#else
16537 "ubfx r2, r8, #16, #8\n\t"
16538#endif
16539 "ldrb r11, [r0, r11, lsl #2]\n\t"
16540 "ldrb r7, [r0, r7, lsl #2]\n\t"
16541 "ldrb lr, [r0, lr, lsl #2]\n\t"
16542 "ldrb r2, [r0, r2, lsl #2]\n\t"
16543 "eor lr, lr, r11, lsl #16\n\t"
16544 "ldm %[ks], {r8, r9, r10, r11}\n\t"
16545 "eor r7, r7, lr, lsl #8\n\t"
16546 "eor r7, r7, r2, lsl #16\n\t"
16547 /* XOR in Key Schedule */
16548 "eor r4, r4, r8\n\t"
16549 "eor r5, r5, r9\n\t"
16550 "eor r6, r6, r10\n\t"
16551 "eor r7, r7, r11\n\t"
16552#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
16553 "pop {r1, %[len], lr}\n\t"
16554 "ldr %[ks], [sp]\n\t"
16555#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16556 "eor r8, r4, r4, ror #16\n\t"
16557 "eor r9, r5, r5, ror #16\n\t"
16558 "eor r10, r6, r6, ror #16\n\t"
16559 "eor r11, r7, r7, ror #16\n\t"
16560 "bic r8, r8, #0xff0000\n\t"
16561 "bic r9, r9, #0xff0000\n\t"
16562 "bic r10, r10, #0xff0000\n\t"
16563 "bic r11, r11, #0xff0000\n\t"
16564 "ror r4, r4, #8\n\t"
16565 "ror r5, r5, #8\n\t"
16566 "ror r6, r6, #8\n\t"
16567 "ror r7, r7, #8\n\t"
16568 "eor r4, r4, r8, lsr #8\n\t"
16569 "eor r5, r5, r9, lsr #8\n\t"
16570 "eor r6, r6, r10, lsr #8\n\t"
16571 "eor r7, r7, r11, lsr #8\n\t"
16572#else
16573 "rev r4, r4\n\t"
16574 "rev r5, r5\n\t"
16575 "rev r6, r6\n\t"
16576 "rev r7, r7\n\t"
16577#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
16578 "ldr r8, [lr]\n\t"
16579 "ldr r9, [lr, #4]\n\t"
16580 "ldr r10, [lr, #8]\n\t"
16581 "ldr r11, [lr, #12]\n\t"
16582 "eor r4, r4, r8\n\t"
16583 "eor r5, r5, r9\n\t"
16584 "eor r6, r6, r10\n\t"
16585 "eor r7, r7, r11\n\t"
16586 "ldr r8, [sp, #4]\n\t"
16587 "str r4, [%[out]]\n\t"
16588 "str r5, [%[out], #4]\n\t"
16589 "str r6, [%[out], #8]\n\t"
16590 "str r7, [%[out], #12]\n\t"
16591 "ldm r8, {r4, r5, r6, r7}\n\t"
16592 "subs %[len], %[len], #16\n\t"
16593 "add lr, lr, #16\n\t"
16594 "add %[out], %[out], #16\n\t"
16595 "bne L_AES_CTR_encrypt_loop_block_128_%=\n\t"
16596 "\n"
16597 "L_AES_CTR_encrypt_end_%=:\n\t"
16598 "pop {%[ks], r8}\n\t"
16599#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16600 "eor r10, r4, r4, ror #16\n\t"
16601 "eor r11, r5, r5, ror #16\n\t"
16602 "bic r10, r10, #0xff0000\n\t"
16603 "bic r11, r11, #0xff0000\n\t"
16604 "ror r4, r4, #8\n\t"
16605 "ror r5, r5, #8\n\t"
16606 "eor r4, r4, r10, lsr #8\n\t"
16607 "eor r5, r5, r11, lsr #8\n\t"
16608 "eor r10, r6, r6, ror #16\n\t"
16609 "eor r11, r7, r7, ror #16\n\t"
16610 "bic r10, r10, #0xff0000\n\t"
16611 "bic r11, r11, #0xff0000\n\t"
16612 "ror r6, r6, #8\n\t"
16613 "ror r7, r7, #8\n\t"
16614 "eor r6, r6, r10, lsr #8\n\t"
16615 "eor r7, r7, r11, lsr #8\n\t"
16616#else
16617 "rev r4, r4\n\t"
16618 "rev r5, r5\n\t"
16619 "rev r6, r6\n\t"
16620 "rev r7, r7\n\t"
16621#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
16622 "stm r8, {r4, r5, r6, r7}\n\t"
16623 "pop {%[nr], %[ctr]}\n\t"
16624 "pop {%[L_AES_ARM32_te_ctr]}\n\t"
16625#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
16626 : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
16627 [nr] "+r" (nr), [ctr] "+r" (ctr),
16628 [L_AES_ARM32_te_ctr] "+r" (L_AES_ARM32_te_ctr_c)
16629 :
16630#else
16631 :
16632 : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
16633 [nr] "r" (nr), [ctr] "r" (ctr),
16634 [L_AES_ARM32_te_ctr] "r" (L_AES_ARM32_te_ctr_c)
16635#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
16636 : "memory", "cc", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
16637 );
16638}
16639
16640#endif /* WOLFSSL_AES_COUNTER */
16641#ifdef HAVE_AES_DECRYPT
16642#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
16643 defined(HAVE_AES_CBC) || defined(HAVE_AES_ECB)
16644#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
16645void AES_decrypt_block(const word32* td_p, int nr_p, const byte* td4_p);
16646#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
16647WC_OMIT_FRAME_POINTER void AES_decrypt_block(const word32* td_p, int nr_p,
16648 const byte* td4_p)
16649#else
16650WC_OMIT_FRAME_POINTER void AES_decrypt_block(const word32* td, int nr,
16651 const byte* td4)
16652#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
16653{
16654#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
16655 register const word32* td __asm__ ("r0") = (const word32*)td_p;
16656 register int nr __asm__ ("r1") = (int)nr_p;
16657 register const byte* td4 __asm__ ("r2") = (const byte*)td4_p;
16658#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
16659
16660 __asm__ __volatile__ (
16661 "\n"
16662 "L_AES_decrypt_block_nr_%=:\n\t"
16663#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16664#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16665 "lsl r8, r7, #8\n\t"
16666 "lsr r8, r8, #24\n\t"
16667#else
16668 "uxtb r8, r7, ror #16\n\t"
16669#endif
16670#else
16671 "ubfx r8, r7, #16, #8\n\t"
16672#endif
16673 "lsr r11, r4, #24\n\t"
16674#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16675#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16676 "lsl r12, r6, #16\n\t"
16677 "lsr r12, r12, #24\n\t"
16678#else
16679 "uxtb r12, r6, ror #8\n\t"
16680#endif
16681#else
16682 "ubfx r12, r6, #8, #8\n\t"
16683#endif
16684#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16685#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16686 "lsl lr, r5, #24\n\t"
16687 "lsr lr, lr, #24\n\t"
16688#else
16689 "uxtb lr, r5\n\t"
16690#endif
16691#else
16692 "ubfx lr, r5, #0, #8\n\t"
16693#endif
16694 "ldr r8, [%[td], r8, lsl #2]\n\t"
16695 "ldr r11, [%[td], r11, lsl #2]\n\t"
16696 "ldr r12, [%[td], r12, lsl #2]\n\t"
16697 "ldr lr, [%[td], lr, lsl #2]\n\t"
16698#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16699#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16700 "lsl r9, r4, #8\n\t"
16701 "lsr r9, r9, #24\n\t"
16702#else
16703 "uxtb r9, r4, ror #16\n\t"
16704#endif
16705#else
16706 "ubfx r9, r4, #16, #8\n\t"
16707#endif
16708 "eor r8, r8, r11, ror #24\n\t"
16709 "lsr r11, r5, #24\n\t"
16710 "eor r8, r8, r12, ror #8\n\t"
16711#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16713 "lsl r12, r7, #16\n\t"
16714 "lsr r12, r12, #24\n\t"
16715#else
16716 "uxtb r12, r7, ror #8\n\t"
16717#endif
16718#else
16719 "ubfx r12, r7, #8, #8\n\t"
16720#endif
16721 "eor r8, r8, lr, ror #16\n\t"
16722#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16723#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16724 "lsl lr, r6, #24\n\t"
16725 "lsr lr, lr, #24\n\t"
16726#else
16727 "uxtb lr, r6\n\t"
16728#endif
16729#else
16730 "ubfx lr, r6, #0, #8\n\t"
16731#endif
16732 "ldr r9, [%[td], r9, lsl #2]\n\t"
16733 "ldr r11, [%[td], r11, lsl #2]\n\t"
16734 "ldr r12, [%[td], r12, lsl #2]\n\t"
16735 "ldr lr, [%[td], lr, lsl #2]\n\t"
16736#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16737#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16738 "lsl r10, r5, #8\n\t"
16739 "lsr r10, r10, #24\n\t"
16740#else
16741 "uxtb r10, r5, ror #16\n\t"
16742#endif
16743#else
16744 "ubfx r10, r5, #16, #8\n\t"
16745#endif
16746 "eor r9, r9, r11, ror #24\n\t"
16747 "lsr r11, r6, #24\n\t"
16748 "eor r9, r9, r12, ror #8\n\t"
16749#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16750#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16751 "lsl r12, r4, #16\n\t"
16752 "lsr r12, r12, #24\n\t"
16753#else
16754 "uxtb r12, r4, ror #8\n\t"
16755#endif
16756#else
16757 "ubfx r12, r4, #8, #8\n\t"
16758#endif
16759 "eor r9, r9, lr, ror #16\n\t"
16760#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16761#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16762 "lsl lr, r7, #24\n\t"
16763 "lsr lr, lr, #24\n\t"
16764#else
16765 "uxtb lr, r7\n\t"
16766#endif
16767#else
16768 "ubfx lr, r7, #0, #8\n\t"
16769#endif
16770 "ldr r10, [%[td], r10, lsl #2]\n\t"
16771 "ldr r11, [%[td], r11, lsl #2]\n\t"
16772 "ldr r12, [%[td], r12, lsl #2]\n\t"
16773 "ldr lr, [%[td], lr, lsl #2]\n\t"
16774#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16775#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16776 "lsl r4, r4, #24\n\t"
16777 "lsr r4, r4, #24\n\t"
16778#else
16779 "uxtb r4, r4\n\t"
16780#endif
16781#else
16782 "ubfx r4, r4, #0, #8\n\t"
16783#endif
16784 "eor r10, r10, r11, ror #24\n\t"
16785#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16786#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16787 "lsl r11, r6, #8\n\t"
16788 "lsr r11, r11, #24\n\t"
16789#else
16790 "uxtb r11, r6, ror #16\n\t"
16791#endif
16792#else
16793 "ubfx r11, r6, #16, #8\n\t"
16794#endif
16795 "eor r10, r10, r12, ror #8\n\t"
16796 "lsr r12, r7, #24\n\t"
16797 "eor r10, r10, lr, ror #16\n\t"
16798#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16799#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16800 "lsl lr, r5, #16\n\t"
16801 "lsr lr, lr, #24\n\t"
16802#else
16803 "uxtb lr, r5, ror #8\n\t"
16804#endif
16805#else
16806 "ubfx lr, r5, #8, #8\n\t"
16807#endif
16808 "ldr r4, [%[td], r4, lsl #2]\n\t"
16809 "ldr r12, [%[td], r12, lsl #2]\n\t"
16810 "ldr r11, [%[td], r11, lsl #2]\n\t"
16811 "ldr lr, [%[td], lr, lsl #2]\n\t"
16812 "eor r12, r12, r4, ror #24\n\t"
16813 "ldm r3!, {r4, r5, r6, r7}\n\t"
16814 "eor r11, r11, lr, ror #8\n\t"
16815 "eor r11, r11, r12, ror #24\n\t"
16816 /* XOR in Key Schedule */
16817 "eor r8, r8, r4\n\t"
16818 "eor r9, r9, r5\n\t"
16819 "eor r10, r10, r6\n\t"
16820 "eor r11, r11, r7\n\t"
16821#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16822#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16823 "lsl r4, r11, #8\n\t"
16824 "lsr r4, r4, #24\n\t"
16825#else
16826 "uxtb r4, r11, ror #16\n\t"
16827#endif
16828#else
16829 "ubfx r4, r11, #16, #8\n\t"
16830#endif
16831 "lsr r7, r8, #24\n\t"
16832#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16833#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16834 "lsl r12, r10, #16\n\t"
16835 "lsr r12, r12, #24\n\t"
16836#else
16837 "uxtb r12, r10, ror #8\n\t"
16838#endif
16839#else
16840 "ubfx r12, r10, #8, #8\n\t"
16841#endif
16842#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16843#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16844 "lsl lr, r9, #24\n\t"
16845 "lsr lr, lr, #24\n\t"
16846#else
16847 "uxtb lr, r9\n\t"
16848#endif
16849#else
16850 "ubfx lr, r9, #0, #8\n\t"
16851#endif
16852 "ldr r4, [%[td], r4, lsl #2]\n\t"
16853 "ldr r7, [%[td], r7, lsl #2]\n\t"
16854 "ldr r12, [%[td], r12, lsl #2]\n\t"
16855 "ldr lr, [%[td], lr, lsl #2]\n\t"
16856#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16857#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16858 "lsl r5, r8, #8\n\t"
16859 "lsr r5, r5, #24\n\t"
16860#else
16861 "uxtb r5, r8, ror #16\n\t"
16862#endif
16863#else
16864 "ubfx r5, r8, #16, #8\n\t"
16865#endif
16866 "eor r4, r4, r7, ror #24\n\t"
16867 "lsr r7, r9, #24\n\t"
16868 "eor r4, r4, r12, ror #8\n\t"
16869#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16871 "lsl r12, r11, #16\n\t"
16872 "lsr r12, r12, #24\n\t"
16873#else
16874 "uxtb r12, r11, ror #8\n\t"
16875#endif
16876#else
16877 "ubfx r12, r11, #8, #8\n\t"
16878#endif
16879 "eor r4, r4, lr, ror #16\n\t"
16880#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16881#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16882 "lsl lr, r10, #24\n\t"
16883 "lsr lr, lr, #24\n\t"
16884#else
16885 "uxtb lr, r10\n\t"
16886#endif
16887#else
16888 "ubfx lr, r10, #0, #8\n\t"
16889#endif
16890 "ldr r5, [%[td], r5, lsl #2]\n\t"
16891 "ldr r7, [%[td], r7, lsl #2]\n\t"
16892 "ldr r12, [%[td], r12, lsl #2]\n\t"
16893 "ldr lr, [%[td], lr, lsl #2]\n\t"
16894#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16895#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16896 "lsl r6, r9, #8\n\t"
16897 "lsr r6, r6, #24\n\t"
16898#else
16899 "uxtb r6, r9, ror #16\n\t"
16900#endif
16901#else
16902 "ubfx r6, r9, #16, #8\n\t"
16903#endif
16904 "eor r5, r5, r7, ror #24\n\t"
16905 "lsr r7, r10, #24\n\t"
16906 "eor r5, r5, r12, ror #8\n\t"
16907#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16908#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16909 "lsl r12, r8, #16\n\t"
16910 "lsr r12, r12, #24\n\t"
16911#else
16912 "uxtb r12, r8, ror #8\n\t"
16913#endif
16914#else
16915 "ubfx r12, r8, #8, #8\n\t"
16916#endif
16917 "eor r5, r5, lr, ror #16\n\t"
16918#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16919#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16920 "lsl lr, r11, #24\n\t"
16921 "lsr lr, lr, #24\n\t"
16922#else
16923 "uxtb lr, r11\n\t"
16924#endif
16925#else
16926 "ubfx lr, r11, #0, #8\n\t"
16927#endif
16928 "ldr r6, [%[td], r6, lsl #2]\n\t"
16929 "ldr r7, [%[td], r7, lsl #2]\n\t"
16930 "ldr r12, [%[td], r12, lsl #2]\n\t"
16931 "ldr lr, [%[td], lr, lsl #2]\n\t"
16932#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16933#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16934 "lsl r8, r8, #24\n\t"
16935 "lsr r8, r8, #24\n\t"
16936#else
16937 "uxtb r8, r8\n\t"
16938#endif
16939#else
16940 "ubfx r8, r8, #0, #8\n\t"
16941#endif
16942 "eor r6, r6, r7, ror #24\n\t"
16943#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16944#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16945 "lsl r7, r10, #8\n\t"
16946 "lsr r7, r7, #24\n\t"
16947#else
16948 "uxtb r7, r10, ror #16\n\t"
16949#endif
16950#else
16951 "ubfx r7, r10, #16, #8\n\t"
16952#endif
16953 "eor r6, r6, r12, ror #8\n\t"
16954 "lsr r12, r11, #24\n\t"
16955 "eor r6, r6, lr, ror #16\n\t"
16956#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16957#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16958 "lsl lr, r9, #16\n\t"
16959 "lsr lr, lr, #24\n\t"
16960#else
16961 "uxtb lr, r9, ror #8\n\t"
16962#endif
16963#else
16964 "ubfx lr, r9, #8, #8\n\t"
16965#endif
16966 "ldr r8, [%[td], r8, lsl #2]\n\t"
16967 "ldr r12, [%[td], r12, lsl #2]\n\t"
16968 "ldr r7, [%[td], r7, lsl #2]\n\t"
16969 "ldr lr, [%[td], lr, lsl #2]\n\t"
16970 "eor r12, r12, r8, ror #24\n\t"
16971 "ldm r3!, {r8, r9, r10, r11}\n\t"
16972 "eor r7, r7, lr, ror #8\n\t"
16973 "eor r7, r7, r12, ror #24\n\t"
16974 /* XOR in Key Schedule */
16975 "eor r4, r4, r8\n\t"
16976 "eor r5, r5, r9\n\t"
16977 "eor r6, r6, r10\n\t"
16978 "eor r7, r7, r11\n\t"
16979 "subs %[nr], %[nr], #1\n\t"
16980 "bne L_AES_decrypt_block_nr_%=\n\t"
16981#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16982#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16983 "lsl r8, r7, #8\n\t"
16984 "lsr r8, r8, #24\n\t"
16985#else
16986 "uxtb r8, r7, ror #16\n\t"
16987#endif
16988#else
16989 "ubfx r8, r7, #16, #8\n\t"
16990#endif
16991 "lsr r11, r4, #24\n\t"
16992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
16993#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
16994 "lsl r12, r6, #16\n\t"
16995 "lsr r12, r12, #24\n\t"
16996#else
16997 "uxtb r12, r6, ror #8\n\t"
16998#endif
16999#else
17000 "ubfx r12, r6, #8, #8\n\t"
17001#endif
17002#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17003#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17004 "lsl lr, r5, #24\n\t"
17005 "lsr lr, lr, #24\n\t"
17006#else
17007 "uxtb lr, r5\n\t"
17008#endif
17009#else
17010 "ubfx lr, r5, #0, #8\n\t"
17011#endif
17012 "ldr r8, [%[td], r8, lsl #2]\n\t"
17013 "ldr r11, [%[td], r11, lsl #2]\n\t"
17014 "ldr r12, [%[td], r12, lsl #2]\n\t"
17015 "ldr lr, [%[td], lr, lsl #2]\n\t"
17016#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17017#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17018 "lsl r9, r4, #8\n\t"
17019 "lsr r9, r9, #24\n\t"
17020#else
17021 "uxtb r9, r4, ror #16\n\t"
17022#endif
17023#else
17024 "ubfx r9, r4, #16, #8\n\t"
17025#endif
17026 "eor r8, r8, r11, ror #24\n\t"
17027 "lsr r11, r5, #24\n\t"
17028 "eor r8, r8, r12, ror #8\n\t"
17029#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17031 "lsl r12, r7, #16\n\t"
17032 "lsr r12, r12, #24\n\t"
17033#else
17034 "uxtb r12, r7, ror #8\n\t"
17035#endif
17036#else
17037 "ubfx r12, r7, #8, #8\n\t"
17038#endif
17039 "eor r8, r8, lr, ror #16\n\t"
17040#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17041#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17042 "lsl lr, r6, #24\n\t"
17043 "lsr lr, lr, #24\n\t"
17044#else
17045 "uxtb lr, r6\n\t"
17046#endif
17047#else
17048 "ubfx lr, r6, #0, #8\n\t"
17049#endif
17050 "ldr r9, [%[td], r9, lsl #2]\n\t"
17051 "ldr r11, [%[td], r11, lsl #2]\n\t"
17052 "ldr r12, [%[td], r12, lsl #2]\n\t"
17053 "ldr lr, [%[td], lr, lsl #2]\n\t"
17054#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17055#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17056 "lsl r10, r5, #8\n\t"
17057 "lsr r10, r10, #24\n\t"
17058#else
17059 "uxtb r10, r5, ror #16\n\t"
17060#endif
17061#else
17062 "ubfx r10, r5, #16, #8\n\t"
17063#endif
17064 "eor r9, r9, r11, ror #24\n\t"
17065 "lsr r11, r6, #24\n\t"
17066 "eor r9, r9, r12, ror #8\n\t"
17067#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17068#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17069 "lsl r12, r4, #16\n\t"
17070 "lsr r12, r12, #24\n\t"
17071#else
17072 "uxtb r12, r4, ror #8\n\t"
17073#endif
17074#else
17075 "ubfx r12, r4, #8, #8\n\t"
17076#endif
17077 "eor r9, r9, lr, ror #16\n\t"
17078#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17079#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17080 "lsl lr, r7, #24\n\t"
17081 "lsr lr, lr, #24\n\t"
17082#else
17083 "uxtb lr, r7\n\t"
17084#endif
17085#else
17086 "ubfx lr, r7, #0, #8\n\t"
17087#endif
17088 "ldr r10, [%[td], r10, lsl #2]\n\t"
17089 "ldr r11, [%[td], r11, lsl #2]\n\t"
17090 "ldr r12, [%[td], r12, lsl #2]\n\t"
17091 "ldr lr, [%[td], lr, lsl #2]\n\t"
17092#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17093#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17094 "lsl r4, r4, #24\n\t"
17095 "lsr r4, r4, #24\n\t"
17096#else
17097 "uxtb r4, r4\n\t"
17098#endif
17099#else
17100 "ubfx r4, r4, #0, #8\n\t"
17101#endif
17102 "eor r10, r10, r11, ror #24\n\t"
17103#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17104#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17105 "lsl r11, r6, #8\n\t"
17106 "lsr r11, r11, #24\n\t"
17107#else
17108 "uxtb r11, r6, ror #16\n\t"
17109#endif
17110#else
17111 "ubfx r11, r6, #16, #8\n\t"
17112#endif
17113 "eor r10, r10, r12, ror #8\n\t"
17114 "lsr r12, r7, #24\n\t"
17115 "eor r10, r10, lr, ror #16\n\t"
17116#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17117#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17118 "lsl lr, r5, #16\n\t"
17119 "lsr lr, lr, #24\n\t"
17120#else
17121 "uxtb lr, r5, ror #8\n\t"
17122#endif
17123#else
17124 "ubfx lr, r5, #8, #8\n\t"
17125#endif
17126 "ldr r4, [%[td], r4, lsl #2]\n\t"
17127 "ldr r12, [%[td], r12, lsl #2]\n\t"
17128 "ldr r11, [%[td], r11, lsl #2]\n\t"
17129 "ldr lr, [%[td], lr, lsl #2]\n\t"
17130 "eor r12, r12, r4, ror #24\n\t"
17131 "ldm r3!, {r4, r5, r6, r7}\n\t"
17132 "eor r11, r11, lr, ror #8\n\t"
17133 "eor r11, r11, r12, ror #24\n\t"
17134 /* XOR in Key Schedule */
17135 "eor r8, r8, r4\n\t"
17136 "eor r9, r9, r5\n\t"
17137 "eor r10, r10, r6\n\t"
17138 "eor r11, r11, r7\n\t"
17139#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17140#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17141 "lsl r4, r9, #24\n\t"
17142 "lsr r4, r4, #24\n\t"
17143#else
17144 "uxtb r4, r9\n\t"
17145#endif
17146#else
17147 "ubfx r4, r9, #0, #8\n\t"
17148#endif
17149#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17150#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17151 "lsl r7, r10, #16\n\t"
17152 "lsr r7, r7, #24\n\t"
17153#else
17154 "uxtb r7, r10, ror #8\n\t"
17155#endif
17156#else
17157 "ubfx r7, r10, #8, #8\n\t"
17158#endif
17159#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17160#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17161 "lsl r12, r11, #8\n\t"
17162 "lsr r12, r12, #24\n\t"
17163#else
17164 "uxtb r12, r11, ror #16\n\t"
17165#endif
17166#else
17167 "ubfx r12, r11, #16, #8\n\t"
17168#endif
17169 "lsr lr, r8, #24\n\t"
17170 "ldrb r4, [%[td4], r4]\n\t"
17171 "ldrb r7, [%[td4], r7]\n\t"
17172 "ldrb r12, [%[td4], r12]\n\t"
17173 "ldrb lr, [%[td4], lr]\n\t"
17174#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17175#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17176 "lsl r5, r10, #24\n\t"
17177 "lsr r5, r5, #24\n\t"
17178#else
17179 "uxtb r5, r10\n\t"
17180#endif
17181#else
17182 "ubfx r5, r10, #0, #8\n\t"
17183#endif
17184 "eor r4, r4, r7, lsl #8\n\t"
17185#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17186#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17187 "lsl r7, r11, #16\n\t"
17188 "lsr r7, r7, #24\n\t"
17189#else
17190 "uxtb r7, r11, ror #8\n\t"
17191#endif
17192#else
17193 "ubfx r7, r11, #8, #8\n\t"
17194#endif
17195 "eor r4, r4, r12, lsl #16\n\t"
17196#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17197#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17198 "lsl r12, r8, #8\n\t"
17199 "lsr r12, r12, #24\n\t"
17200#else
17201 "uxtb r12, r8, ror #16\n\t"
17202#endif
17203#else
17204 "ubfx r12, r8, #16, #8\n\t"
17205#endif
17206 "eor r4, r4, lr, lsl #24\n\t"
17207 "lsr lr, r9, #24\n\t"
17208 "ldrb r7, [%[td4], r7]\n\t"
17209 "ldrb lr, [%[td4], lr]\n\t"
17210 "ldrb r5, [%[td4], r5]\n\t"
17211 "ldrb r12, [%[td4], r12]\n\t"
17212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17213#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17214 "lsl r6, r11, #24\n\t"
17215 "lsr r6, r6, #24\n\t"
17216#else
17217 "uxtb r6, r11\n\t"
17218#endif
17219#else
17220 "ubfx r6, r11, #0, #8\n\t"
17221#endif
17222 "eor r5, r5, r7, lsl #8\n\t"
17223#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17224#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17225 "lsl r7, r8, #16\n\t"
17226 "lsr r7, r7, #24\n\t"
17227#else
17228 "uxtb r7, r8, ror #8\n\t"
17229#endif
17230#else
17231 "ubfx r7, r8, #8, #8\n\t"
17232#endif
17233 "eor r5, r5, r12, lsl #16\n\t"
17234#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17235#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17236 "lsl r12, r9, #8\n\t"
17237 "lsr r12, r12, #24\n\t"
17238#else
17239 "uxtb r12, r9, ror #16\n\t"
17240#endif
17241#else
17242 "ubfx r12, r9, #16, #8\n\t"
17243#endif
17244 "eor r5, r5, lr, lsl #24\n\t"
17245 "lsr lr, r10, #24\n\t"
17246 "ldrb r7, [%[td4], r7]\n\t"
17247 "ldrb lr, [%[td4], lr]\n\t"
17248 "ldrb r6, [%[td4], r6]\n\t"
17249 "ldrb r12, [%[td4], r12]\n\t"
17250 "lsr r11, r11, #24\n\t"
17251 "eor r6, r6, r7, lsl #8\n\t"
17252#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17253#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17254 "lsl r7, r8, #24\n\t"
17255 "lsr r7, r7, #24\n\t"
17256#else
17257 "uxtb r7, r8\n\t"
17258#endif
17259#else
17260 "ubfx r7, r8, #0, #8\n\t"
17261#endif
17262 "eor r6, r6, r12, lsl #16\n\t"
17263#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17264#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17265 "lsl r12, r9, #16\n\t"
17266 "lsr r12, r12, #24\n\t"
17267#else
17268 "uxtb r12, r9, ror #8\n\t"
17269#endif
17270#else
17271 "ubfx r12, r9, #8, #8\n\t"
17272#endif
17273 "eor r6, r6, lr, lsl #24\n\t"
17274#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17275#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17276 "lsl lr, r10, #8\n\t"
17277 "lsr lr, lr, #24\n\t"
17278#else
17279 "uxtb lr, r10, ror #16\n\t"
17280#endif
17281#else
17282 "ubfx lr, r10, #16, #8\n\t"
17283#endif
17284 "ldrb r11, [%[td4], r11]\n\t"
17285 "ldrb r12, [%[td4], r12]\n\t"
17286 "ldrb r7, [%[td4], r7]\n\t"
17287 "ldrb lr, [%[td4], lr]\n\t"
17288 "eor r12, r12, r11, lsl #16\n\t"
17289 "ldm r3, {r8, r9, r10, r11}\n\t"
17290 "eor r7, r7, r12, lsl #8\n\t"
17291 "eor r7, r7, lr, lsl #16\n\t"
17292 /* XOR in Key Schedule */
17293 "eor r4, r4, r8\n\t"
17294 "eor r5, r5, r9\n\t"
17295 "eor r6, r6, r10\n\t"
17296 "eor r7, r7, r11\n\t"
17297#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
17298 : [td] "+r" (td), [nr] "+r" (nr), [td4] "+r" (td4)
17299 :
17300#else
17301 :
17302 : [td] "r" (td), [nr] "r" (nr), [td4] "r" (td4)
17303#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
17304 : "memory", "cc", "lr"
17305 );
17306}
17307
17308#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
17309static const word32* L_AES_ARM32_td_ecb = L_AES_ARM32_td_data;
17310#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
17311 defined(HAVE_AES_ECB)
17312XALIGNED(4) static const word8 L_AES_ARM32_ecb_td4[] = {
17313 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38,
17314 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
17315 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
17316 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
17317 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d,
17318 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
17319 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2,
17320 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
17321 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
17322 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
17323 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda,
17324 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
17325 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a,
17326 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
17327 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
17328 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
17329 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea,
17330 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
17331 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85,
17332 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
17333 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
17334 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
17335 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20,
17336 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
17337 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31,
17338 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
17339 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
17340 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
17341 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0,
17342 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
17343 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26,
17344 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d,
17345};
17346
17347void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
17348 unsigned long len_p, const unsigned char* ks_p, int nr_p);
17349#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
17350WC_OMIT_FRAME_POINTER void AES_ECB_decrypt(const unsigned char* in_p,
17351 unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
17352 int nr_p)
17353#else
17354WC_OMIT_FRAME_POINTER void AES_ECB_decrypt(const unsigned char* in,
17355 unsigned char* out, unsigned long len, const unsigned char* ks, int nr)
17356#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
17357{
17358#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
17359 register const unsigned char* in __asm__ ("r0") =
17360 (const unsigned char*)in_p;
17361 register unsigned char* out __asm__ ("r1") = (unsigned char*)out_p;
17362 register unsigned long len __asm__ ("r2") = (unsigned long)len_p;
17363 register const unsigned char* ks __asm__ ("r3") =
17364 (const unsigned char*)ks_p;
17365 register int nr __asm__ ("r12") = (int)nr_p;
17366 register word32* L_AES_ARM32_td_ecb_c __asm__ ("lr") =
17367 (word32*)L_AES_ARM32_td_ecb;
17368 register word8* L_AES_ARM32_ecb_td4_c __asm__ ("r4") =
17369 (word8*)&L_AES_ARM32_ecb_td4;
17370#else
17371 register word32* L_AES_ARM32_td_ecb_c = (word32*)L_AES_ARM32_td_ecb;
17372 register word8* L_AES_ARM32_ecb_td4_c = (word8*)&L_AES_ARM32_ecb_td4;
17373#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
17374
17375 __asm__ __volatile__ (
17376 "push {%[L_AES_ARM32_ecb_td4]}\n\t"
17377 "push {%[nr], %[L_AES_ARM32_td_ecb]}\n\t"
17378 "ldr r8, [sp]\n\t"
17379 "mov lr, %[in]\n\t"
17380 "ldr r0, [sp, #4]\n\t"
17381 "mov r12, %[len]\n\t"
17382 "mov r2, %[L_AES_ARM32_ecb_td4]\n\t"
17383 "cmp r8, #10\n\t"
17384 "beq L_AES_ECB_decrypt_start_block_128_%=\n\t"
17385 "cmp r8, #12\n\t"
17386 "beq L_AES_ECB_decrypt_start_block_192_%=\n\t"
17387 "\n"
17388 "L_AES_ECB_decrypt_loop_block_256_%=:\n\t"
17389 "ldr r4, [lr]\n\t"
17390 "ldr r5, [lr, #4]\n\t"
17391 "ldr r6, [lr, #8]\n\t"
17392 "ldr r7, [lr, #12]\n\t"
17393#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17394 "eor r8, r4, r4, ror #16\n\t"
17395 "eor r9, r5, r5, ror #16\n\t"
17396 "eor r10, r6, r6, ror #16\n\t"
17397 "eor r11, r7, r7, ror #16\n\t"
17398 "bic r8, r8, #0xff0000\n\t"
17399 "bic r9, r9, #0xff0000\n\t"
17400 "bic r10, r10, #0xff0000\n\t"
17401 "bic r11, r11, #0xff0000\n\t"
17402 "ror r4, r4, #8\n\t"
17403 "ror r5, r5, #8\n\t"
17404 "ror r6, r6, #8\n\t"
17405 "ror r7, r7, #8\n\t"
17406 "eor r4, r4, r8, lsr #8\n\t"
17407 "eor r5, r5, r9, lsr #8\n\t"
17408 "eor r6, r6, r10, lsr #8\n\t"
17409 "eor r7, r7, r11, lsr #8\n\t"
17410#else
17411 "rev r4, r4\n\t"
17412 "rev r5, r5\n\t"
17413 "rev r6, r6\n\t"
17414 "rev r7, r7\n\t"
17415#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
17416 "push {r1, %[ks], r12, lr}\n\t"
17417 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
17418 /* Round: 0 - XOR in key schedule */
17419 "eor r4, r4, r8\n\t"
17420 "eor r5, r5, r9\n\t"
17421 "eor r6, r6, r10\n\t"
17422 "eor r7, r7, r11\n\t"
17423 "mov r1, #6\n\t"
17424#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
17425 "bl AES_decrypt_block\n\t"
17426#else
17427 "\n"
17428 "L_AES_ECB_decrypt_block_nr_256_%=:\n\t"
17429#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17430#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17431 "lsl r8, r7, #8\n\t"
17432 "lsr r8, r8, #24\n\t"
17433#else
17434 "uxtb r8, r7, ror #16\n\t"
17435#endif
17436#else
17437 "ubfx r8, r7, #16, #8\n\t"
17438#endif
17439 "lsr r11, r4, #24\n\t"
17440#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17441#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17442 "lsl r12, r6, #16\n\t"
17443 "lsr r12, r12, #24\n\t"
17444#else
17445 "uxtb r12, r6, ror #8\n\t"
17446#endif
17447#else
17448 "ubfx r12, r6, #8, #8\n\t"
17449#endif
17450#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17451#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17452 "lsl lr, r5, #24\n\t"
17453 "lsr lr, lr, #24\n\t"
17454#else
17455 "uxtb lr, r5\n\t"
17456#endif
17457#else
17458 "ubfx lr, r5, #0, #8\n\t"
17459#endif
17460 "ldr r8, [r0, r8, lsl #2]\n\t"
17461 "ldr r11, [r0, r11, lsl #2]\n\t"
17462 "ldr r12, [r0, r12, lsl #2]\n\t"
17463 "ldr lr, [r0, lr, lsl #2]\n\t"
17464#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17465#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17466 "lsl r9, r4, #8\n\t"
17467 "lsr r9, r9, #24\n\t"
17468#else
17469 "uxtb r9, r4, ror #16\n\t"
17470#endif
17471#else
17472 "ubfx r9, r4, #16, #8\n\t"
17473#endif
17474 "eor r8, r8, r11, ror #24\n\t"
17475 "lsr r11, r5, #24\n\t"
17476 "eor r8, r8, r12, ror #8\n\t"
17477#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17478#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17479 "lsl r12, r7, #16\n\t"
17480 "lsr r12, r12, #24\n\t"
17481#else
17482 "uxtb r12, r7, ror #8\n\t"
17483#endif
17484#else
17485 "ubfx r12, r7, #8, #8\n\t"
17486#endif
17487 "eor r8, r8, lr, ror #16\n\t"
17488#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17489#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17490 "lsl lr, r6, #24\n\t"
17491 "lsr lr, lr, #24\n\t"
17492#else
17493 "uxtb lr, r6\n\t"
17494#endif
17495#else
17496 "ubfx lr, r6, #0, #8\n\t"
17497#endif
17498 "ldr r9, [r0, r9, lsl #2]\n\t"
17499 "ldr r11, [r0, r11, lsl #2]\n\t"
17500 "ldr r12, [r0, r12, lsl #2]\n\t"
17501 "ldr lr, [r0, lr, lsl #2]\n\t"
17502#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17503#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17504 "lsl r10, r5, #8\n\t"
17505 "lsr r10, r10, #24\n\t"
17506#else
17507 "uxtb r10, r5, ror #16\n\t"
17508#endif
17509#else
17510 "ubfx r10, r5, #16, #8\n\t"
17511#endif
17512 "eor r9, r9, r11, ror #24\n\t"
17513 "lsr r11, r6, #24\n\t"
17514 "eor r9, r9, r12, ror #8\n\t"
17515#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17516#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17517 "lsl r12, r4, #16\n\t"
17518 "lsr r12, r12, #24\n\t"
17519#else
17520 "uxtb r12, r4, ror #8\n\t"
17521#endif
17522#else
17523 "ubfx r12, r4, #8, #8\n\t"
17524#endif
17525 "eor r9, r9, lr, ror #16\n\t"
17526#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17527#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17528 "lsl lr, r7, #24\n\t"
17529 "lsr lr, lr, #24\n\t"
17530#else
17531 "uxtb lr, r7\n\t"
17532#endif
17533#else
17534 "ubfx lr, r7, #0, #8\n\t"
17535#endif
17536 "ldr r10, [r0, r10, lsl #2]\n\t"
17537 "ldr r11, [r0, r11, lsl #2]\n\t"
17538 "ldr r12, [r0, r12, lsl #2]\n\t"
17539 "ldr lr, [r0, lr, lsl #2]\n\t"
17540#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17541#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17542 "lsl r4, r4, #24\n\t"
17543 "lsr r4, r4, #24\n\t"
17544#else
17545 "uxtb r4, r4\n\t"
17546#endif
17547#else
17548 "ubfx r4, r4, #0, #8\n\t"
17549#endif
17550 "eor r10, r10, r11, ror #24\n\t"
17551#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17552#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17553 "lsl r11, r6, #8\n\t"
17554 "lsr r11, r11, #24\n\t"
17555#else
17556 "uxtb r11, r6, ror #16\n\t"
17557#endif
17558#else
17559 "ubfx r11, r6, #16, #8\n\t"
17560#endif
17561 "eor r10, r10, r12, ror #8\n\t"
17562 "lsr r12, r7, #24\n\t"
17563 "eor r10, r10, lr, ror #16\n\t"
17564#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17565#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17566 "lsl lr, r5, #16\n\t"
17567 "lsr lr, lr, #24\n\t"
17568#else
17569 "uxtb lr, r5, ror #8\n\t"
17570#endif
17571#else
17572 "ubfx lr, r5, #8, #8\n\t"
17573#endif
17574 "ldr r4, [r0, r4, lsl #2]\n\t"
17575 "ldr r12, [r0, r12, lsl #2]\n\t"
17576 "ldr r11, [r0, r11, lsl #2]\n\t"
17577 "ldr lr, [r0, lr, lsl #2]\n\t"
17578 "eor r12, r12, r4, ror #24\n\t"
17579 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
17580 "eor r11, r11, lr, ror #8\n\t"
17581 "eor r11, r11, r12, ror #24\n\t"
17582 /* XOR in Key Schedule */
17583 "eor r8, r8, r4\n\t"
17584 "eor r9, r9, r5\n\t"
17585 "eor r10, r10, r6\n\t"
17586 "eor r11, r11, r7\n\t"
17587#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17588#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17589 "lsl r4, r11, #8\n\t"
17590 "lsr r4, r4, #24\n\t"
17591#else
17592 "uxtb r4, r11, ror #16\n\t"
17593#endif
17594#else
17595 "ubfx r4, r11, #16, #8\n\t"
17596#endif
17597 "lsr r7, r8, #24\n\t"
17598#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17599#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17600 "lsl r12, r10, #16\n\t"
17601 "lsr r12, r12, #24\n\t"
17602#else
17603 "uxtb r12, r10, ror #8\n\t"
17604#endif
17605#else
17606 "ubfx r12, r10, #8, #8\n\t"
17607#endif
17608#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17609#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17610 "lsl lr, r9, #24\n\t"
17611 "lsr lr, lr, #24\n\t"
17612#else
17613 "uxtb lr, r9\n\t"
17614#endif
17615#else
17616 "ubfx lr, r9, #0, #8\n\t"
17617#endif
17618 "ldr r4, [r0, r4, lsl #2]\n\t"
17619 "ldr r7, [r0, r7, lsl #2]\n\t"
17620 "ldr r12, [r0, r12, lsl #2]\n\t"
17621 "ldr lr, [r0, lr, lsl #2]\n\t"
17622#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17623#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17624 "lsl r5, r8, #8\n\t"
17625 "lsr r5, r5, #24\n\t"
17626#else
17627 "uxtb r5, r8, ror #16\n\t"
17628#endif
17629#else
17630 "ubfx r5, r8, #16, #8\n\t"
17631#endif
17632 "eor r4, r4, r7, ror #24\n\t"
17633 "lsr r7, r9, #24\n\t"
17634 "eor r4, r4, r12, ror #8\n\t"
17635#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17636#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17637 "lsl r12, r11, #16\n\t"
17638 "lsr r12, r12, #24\n\t"
17639#else
17640 "uxtb r12, r11, ror #8\n\t"
17641#endif
17642#else
17643 "ubfx r12, r11, #8, #8\n\t"
17644#endif
17645 "eor r4, r4, lr, ror #16\n\t"
17646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17647#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17648 "lsl lr, r10, #24\n\t"
17649 "lsr lr, lr, #24\n\t"
17650#else
17651 "uxtb lr, r10\n\t"
17652#endif
17653#else
17654 "ubfx lr, r10, #0, #8\n\t"
17655#endif
17656 "ldr r5, [r0, r5, lsl #2]\n\t"
17657 "ldr r7, [r0, r7, lsl #2]\n\t"
17658 "ldr r12, [r0, r12, lsl #2]\n\t"
17659 "ldr lr, [r0, lr, lsl #2]\n\t"
17660#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17661#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17662 "lsl r6, r9, #8\n\t"
17663 "lsr r6, r6, #24\n\t"
17664#else
17665 "uxtb r6, r9, ror #16\n\t"
17666#endif
17667#else
17668 "ubfx r6, r9, #16, #8\n\t"
17669#endif
17670 "eor r5, r5, r7, ror #24\n\t"
17671 "lsr r7, r10, #24\n\t"
17672 "eor r5, r5, r12, ror #8\n\t"
17673#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17674#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17675 "lsl r12, r8, #16\n\t"
17676 "lsr r12, r12, #24\n\t"
17677#else
17678 "uxtb r12, r8, ror #8\n\t"
17679#endif
17680#else
17681 "ubfx r12, r8, #8, #8\n\t"
17682#endif
17683 "eor r5, r5, lr, ror #16\n\t"
17684#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17685#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17686 "lsl lr, r11, #24\n\t"
17687 "lsr lr, lr, #24\n\t"
17688#else
17689 "uxtb lr, r11\n\t"
17690#endif
17691#else
17692 "ubfx lr, r11, #0, #8\n\t"
17693#endif
17694 "ldr r6, [r0, r6, lsl #2]\n\t"
17695 "ldr r7, [r0, r7, lsl #2]\n\t"
17696 "ldr r12, [r0, r12, lsl #2]\n\t"
17697 "ldr lr, [r0, lr, lsl #2]\n\t"
17698#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17699#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17700 "lsl r8, r8, #24\n\t"
17701 "lsr r8, r8, #24\n\t"
17702#else
17703 "uxtb r8, r8\n\t"
17704#endif
17705#else
17706 "ubfx r8, r8, #0, #8\n\t"
17707#endif
17708 "eor r6, r6, r7, ror #24\n\t"
17709#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17710#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17711 "lsl r7, r10, #8\n\t"
17712 "lsr r7, r7, #24\n\t"
17713#else
17714 "uxtb r7, r10, ror #16\n\t"
17715#endif
17716#else
17717 "ubfx r7, r10, #16, #8\n\t"
17718#endif
17719 "eor r6, r6, r12, ror #8\n\t"
17720 "lsr r12, r11, #24\n\t"
17721 "eor r6, r6, lr, ror #16\n\t"
17722#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17723#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17724 "lsl lr, r9, #16\n\t"
17725 "lsr lr, lr, #24\n\t"
17726#else
17727 "uxtb lr, r9, ror #8\n\t"
17728#endif
17729#else
17730 "ubfx lr, r9, #8, #8\n\t"
17731#endif
17732 "ldr r8, [r0, r8, lsl #2]\n\t"
17733 "ldr r12, [r0, r12, lsl #2]\n\t"
17734 "ldr r7, [r0, r7, lsl #2]\n\t"
17735 "ldr lr, [r0, lr, lsl #2]\n\t"
17736 "eor r12, r12, r8, ror #24\n\t"
17737 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
17738 "eor r7, r7, lr, ror #8\n\t"
17739 "eor r7, r7, r12, ror #24\n\t"
17740 /* XOR in Key Schedule */
17741 "eor r4, r4, r8\n\t"
17742 "eor r5, r5, r9\n\t"
17743 "eor r6, r6, r10\n\t"
17744 "eor r7, r7, r11\n\t"
17745 "subs r1, r1, #1\n\t"
17746 "bne L_AES_ECB_decrypt_block_nr_256_%=\n\t"
17747#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17748#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17749 "lsl r8, r7, #8\n\t"
17750 "lsr r8, r8, #24\n\t"
17751#else
17752 "uxtb r8, r7, ror #16\n\t"
17753#endif
17754#else
17755 "ubfx r8, r7, #16, #8\n\t"
17756#endif
17757 "lsr r11, r4, #24\n\t"
17758#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17759#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17760 "lsl r12, r6, #16\n\t"
17761 "lsr r12, r12, #24\n\t"
17762#else
17763 "uxtb r12, r6, ror #8\n\t"
17764#endif
17765#else
17766 "ubfx r12, r6, #8, #8\n\t"
17767#endif
17768#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17769#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17770 "lsl lr, r5, #24\n\t"
17771 "lsr lr, lr, #24\n\t"
17772#else
17773 "uxtb lr, r5\n\t"
17774#endif
17775#else
17776 "ubfx lr, r5, #0, #8\n\t"
17777#endif
17778 "ldr r8, [r0, r8, lsl #2]\n\t"
17779 "ldr r11, [r0, r11, lsl #2]\n\t"
17780 "ldr r12, [r0, r12, lsl #2]\n\t"
17781 "ldr lr, [r0, lr, lsl #2]\n\t"
17782#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17783#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17784 "lsl r9, r4, #8\n\t"
17785 "lsr r9, r9, #24\n\t"
17786#else
17787 "uxtb r9, r4, ror #16\n\t"
17788#endif
17789#else
17790 "ubfx r9, r4, #16, #8\n\t"
17791#endif
17792 "eor r8, r8, r11, ror #24\n\t"
17793 "lsr r11, r5, #24\n\t"
17794 "eor r8, r8, r12, ror #8\n\t"
17795#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17796#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17797 "lsl r12, r7, #16\n\t"
17798 "lsr r12, r12, #24\n\t"
17799#else
17800 "uxtb r12, r7, ror #8\n\t"
17801#endif
17802#else
17803 "ubfx r12, r7, #8, #8\n\t"
17804#endif
17805 "eor r8, r8, lr, ror #16\n\t"
17806#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17807#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17808 "lsl lr, r6, #24\n\t"
17809 "lsr lr, lr, #24\n\t"
17810#else
17811 "uxtb lr, r6\n\t"
17812#endif
17813#else
17814 "ubfx lr, r6, #0, #8\n\t"
17815#endif
17816 "ldr r9, [r0, r9, lsl #2]\n\t"
17817 "ldr r11, [r0, r11, lsl #2]\n\t"
17818 "ldr r12, [r0, r12, lsl #2]\n\t"
17819 "ldr lr, [r0, lr, lsl #2]\n\t"
17820#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17821#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17822 "lsl r10, r5, #8\n\t"
17823 "lsr r10, r10, #24\n\t"
17824#else
17825 "uxtb r10, r5, ror #16\n\t"
17826#endif
17827#else
17828 "ubfx r10, r5, #16, #8\n\t"
17829#endif
17830 "eor r9, r9, r11, ror #24\n\t"
17831 "lsr r11, r6, #24\n\t"
17832 "eor r9, r9, r12, ror #8\n\t"
17833#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17834#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17835 "lsl r12, r4, #16\n\t"
17836 "lsr r12, r12, #24\n\t"
17837#else
17838 "uxtb r12, r4, ror #8\n\t"
17839#endif
17840#else
17841 "ubfx r12, r4, #8, #8\n\t"
17842#endif
17843 "eor r9, r9, lr, ror #16\n\t"
17844#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17845#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17846 "lsl lr, r7, #24\n\t"
17847 "lsr lr, lr, #24\n\t"
17848#else
17849 "uxtb lr, r7\n\t"
17850#endif
17851#else
17852 "ubfx lr, r7, #0, #8\n\t"
17853#endif
17854 "ldr r10, [r0, r10, lsl #2]\n\t"
17855 "ldr r11, [r0, r11, lsl #2]\n\t"
17856 "ldr r12, [r0, r12, lsl #2]\n\t"
17857 "ldr lr, [r0, lr, lsl #2]\n\t"
17858#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17859#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17860 "lsl r4, r4, #24\n\t"
17861 "lsr r4, r4, #24\n\t"
17862#else
17863 "uxtb r4, r4\n\t"
17864#endif
17865#else
17866 "ubfx r4, r4, #0, #8\n\t"
17867#endif
17868 "eor r10, r10, r11, ror #24\n\t"
17869#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17871 "lsl r11, r6, #8\n\t"
17872 "lsr r11, r11, #24\n\t"
17873#else
17874 "uxtb r11, r6, ror #16\n\t"
17875#endif
17876#else
17877 "ubfx r11, r6, #16, #8\n\t"
17878#endif
17879 "eor r10, r10, r12, ror #8\n\t"
17880 "lsr r12, r7, #24\n\t"
17881 "eor r10, r10, lr, ror #16\n\t"
17882#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17883#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17884 "lsl lr, r5, #16\n\t"
17885 "lsr lr, lr, #24\n\t"
17886#else
17887 "uxtb lr, r5, ror #8\n\t"
17888#endif
17889#else
17890 "ubfx lr, r5, #8, #8\n\t"
17891#endif
17892 "ldr r4, [r0, r4, lsl #2]\n\t"
17893 "ldr r12, [r0, r12, lsl #2]\n\t"
17894 "ldr r11, [r0, r11, lsl #2]\n\t"
17895 "ldr lr, [r0, lr, lsl #2]\n\t"
17896 "eor r12, r12, r4, ror #24\n\t"
17897 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
17898 "eor r11, r11, lr, ror #8\n\t"
17899 "eor r11, r11, r12, ror #24\n\t"
17900 /* XOR in Key Schedule */
17901 "eor r8, r8, r4\n\t"
17902 "eor r9, r9, r5\n\t"
17903 "eor r10, r10, r6\n\t"
17904 "eor r11, r11, r7\n\t"
17905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17906#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17907 "lsl r4, r9, #24\n\t"
17908 "lsr r4, r4, #24\n\t"
17909#else
17910 "uxtb r4, r9\n\t"
17911#endif
17912#else
17913 "ubfx r4, r9, #0, #8\n\t"
17914#endif
17915#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17916#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17917 "lsl r7, r10, #16\n\t"
17918 "lsr r7, r7, #24\n\t"
17919#else
17920 "uxtb r7, r10, ror #8\n\t"
17921#endif
17922#else
17923 "ubfx r7, r10, #8, #8\n\t"
17924#endif
17925#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17926#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17927 "lsl r12, r11, #8\n\t"
17928 "lsr r12, r12, #24\n\t"
17929#else
17930 "uxtb r12, r11, ror #16\n\t"
17931#endif
17932#else
17933 "ubfx r12, r11, #16, #8\n\t"
17934#endif
17935 "lsr lr, r8, #24\n\t"
17936 "ldrb r4, [r2, r4]\n\t"
17937 "ldrb r7, [r2, r7]\n\t"
17938 "ldrb r12, [r2, r12]\n\t"
17939 "ldrb lr, [r2, lr]\n\t"
17940#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17941#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17942 "lsl r5, r10, #24\n\t"
17943 "lsr r5, r5, #24\n\t"
17944#else
17945 "uxtb r5, r10\n\t"
17946#endif
17947#else
17948 "ubfx r5, r10, #0, #8\n\t"
17949#endif
17950 "eor r4, r4, r7, lsl #8\n\t"
17951#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17952#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17953 "lsl r7, r11, #16\n\t"
17954 "lsr r7, r7, #24\n\t"
17955#else
17956 "uxtb r7, r11, ror #8\n\t"
17957#endif
17958#else
17959 "ubfx r7, r11, #8, #8\n\t"
17960#endif
17961 "eor r4, r4, r12, lsl #16\n\t"
17962#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17964 "lsl r12, r8, #8\n\t"
17965 "lsr r12, r12, #24\n\t"
17966#else
17967 "uxtb r12, r8, ror #16\n\t"
17968#endif
17969#else
17970 "ubfx r12, r8, #16, #8\n\t"
17971#endif
17972 "eor r4, r4, lr, lsl #24\n\t"
17973 "lsr lr, r9, #24\n\t"
17974 "ldrb r7, [r2, r7]\n\t"
17975 "ldrb lr, [r2, lr]\n\t"
17976 "ldrb r5, [r2, r5]\n\t"
17977 "ldrb r12, [r2, r12]\n\t"
17978#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17979#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17980 "lsl r6, r11, #24\n\t"
17981 "lsr r6, r6, #24\n\t"
17982#else
17983 "uxtb r6, r11\n\t"
17984#endif
17985#else
17986 "ubfx r6, r11, #0, #8\n\t"
17987#endif
17988 "eor r5, r5, r7, lsl #8\n\t"
17989#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
17990#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
17991 "lsl r7, r8, #16\n\t"
17992 "lsr r7, r7, #24\n\t"
17993#else
17994 "uxtb r7, r8, ror #8\n\t"
17995#endif
17996#else
17997 "ubfx r7, r8, #8, #8\n\t"
17998#endif
17999 "eor r5, r5, r12, lsl #16\n\t"
18000#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18001#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18002 "lsl r12, r9, #8\n\t"
18003 "lsr r12, r12, #24\n\t"
18004#else
18005 "uxtb r12, r9, ror #16\n\t"
18006#endif
18007#else
18008 "ubfx r12, r9, #16, #8\n\t"
18009#endif
18010 "eor r5, r5, lr, lsl #24\n\t"
18011 "lsr lr, r10, #24\n\t"
18012 "ldrb r7, [r2, r7]\n\t"
18013 "ldrb lr, [r2, lr]\n\t"
18014 "ldrb r6, [r2, r6]\n\t"
18015 "ldrb r12, [r2, r12]\n\t"
18016 "lsr r11, r11, #24\n\t"
18017 "eor r6, r6, r7, lsl #8\n\t"
18018#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18019#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18020 "lsl r7, r8, #24\n\t"
18021 "lsr r7, r7, #24\n\t"
18022#else
18023 "uxtb r7, r8\n\t"
18024#endif
18025#else
18026 "ubfx r7, r8, #0, #8\n\t"
18027#endif
18028 "eor r6, r6, r12, lsl #16\n\t"
18029#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18031 "lsl r12, r9, #16\n\t"
18032 "lsr r12, r12, #24\n\t"
18033#else
18034 "uxtb r12, r9, ror #8\n\t"
18035#endif
18036#else
18037 "ubfx r12, r9, #8, #8\n\t"
18038#endif
18039 "eor r6, r6, lr, lsl #24\n\t"
18040#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18041#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18042 "lsl lr, r10, #8\n\t"
18043 "lsr lr, lr, #24\n\t"
18044#else
18045 "uxtb lr, r10, ror #16\n\t"
18046#endif
18047#else
18048 "ubfx lr, r10, #16, #8\n\t"
18049#endif
18050 "ldrb r11, [r2, r11]\n\t"
18051 "ldrb r12, [r2, r12]\n\t"
18052 "ldrb r7, [r2, r7]\n\t"
18053 "ldrb lr, [r2, lr]\n\t"
18054 "eor r12, r12, r11, lsl #16\n\t"
18055 "ldm %[ks], {r8, r9, r10, r11}\n\t"
18056 "eor r7, r7, r12, lsl #8\n\t"
18057 "eor r7, r7, lr, lsl #16\n\t"
18058 /* XOR in Key Schedule */
18059 "eor r4, r4, r8\n\t"
18060 "eor r5, r5, r9\n\t"
18061 "eor r6, r6, r10\n\t"
18062 "eor r7, r7, r11\n\t"
18063#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
18064 "pop {r1, %[ks], r12, lr}\n\t"
18065#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18066 "eor r8, r4, r4, ror #16\n\t"
18067 "eor r9, r5, r5, ror #16\n\t"
18068 "eor r10, r6, r6, ror #16\n\t"
18069 "eor r11, r7, r7, ror #16\n\t"
18070 "bic r8, r8, #0xff0000\n\t"
18071 "bic r9, r9, #0xff0000\n\t"
18072 "bic r10, r10, #0xff0000\n\t"
18073 "bic r11, r11, #0xff0000\n\t"
18074 "ror r4, r4, #8\n\t"
18075 "ror r5, r5, #8\n\t"
18076 "ror r6, r6, #8\n\t"
18077 "ror r7, r7, #8\n\t"
18078 "eor r4, r4, r8, lsr #8\n\t"
18079 "eor r5, r5, r9, lsr #8\n\t"
18080 "eor r6, r6, r10, lsr #8\n\t"
18081 "eor r7, r7, r11, lsr #8\n\t"
18082#else
18083 "rev r4, r4\n\t"
18084 "rev r5, r5\n\t"
18085 "rev r6, r6\n\t"
18086 "rev r7, r7\n\t"
18087#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
18088 "str r4, [%[out]]\n\t"
18089 "str r5, [%[out], #4]\n\t"
18090 "str r6, [%[out], #8]\n\t"
18091 "str r7, [%[out], #12]\n\t"
18092 "subs r12, r12, #16\n\t"
18093 "add lr, lr, #16\n\t"
18094 "add %[out], %[out], #16\n\t"
18095 "bne L_AES_ECB_decrypt_loop_block_256_%=\n\t"
18096 "b L_AES_ECB_decrypt_end_%=\n\t"
18097 "\n"
18098 "L_AES_ECB_decrypt_start_block_192_%=:\n\t"
18099 "\n"
18100 "L_AES_ECB_decrypt_loop_block_192_%=:\n\t"
18101 "ldr r4, [lr]\n\t"
18102 "ldr r5, [lr, #4]\n\t"
18103 "ldr r6, [lr, #8]\n\t"
18104 "ldr r7, [lr, #12]\n\t"
18105#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18106 "eor r8, r4, r4, ror #16\n\t"
18107 "eor r9, r5, r5, ror #16\n\t"
18108 "eor r10, r6, r6, ror #16\n\t"
18109 "eor r11, r7, r7, ror #16\n\t"
18110 "bic r8, r8, #0xff0000\n\t"
18111 "bic r9, r9, #0xff0000\n\t"
18112 "bic r10, r10, #0xff0000\n\t"
18113 "bic r11, r11, #0xff0000\n\t"
18114 "ror r4, r4, #8\n\t"
18115 "ror r5, r5, #8\n\t"
18116 "ror r6, r6, #8\n\t"
18117 "ror r7, r7, #8\n\t"
18118 "eor r4, r4, r8, lsr #8\n\t"
18119 "eor r5, r5, r9, lsr #8\n\t"
18120 "eor r6, r6, r10, lsr #8\n\t"
18121 "eor r7, r7, r11, lsr #8\n\t"
18122#else
18123 "rev r4, r4\n\t"
18124 "rev r5, r5\n\t"
18125 "rev r6, r6\n\t"
18126 "rev r7, r7\n\t"
18127#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
18128 "push {r1, %[ks], r12, lr}\n\t"
18129 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
18130 /* Round: 0 - XOR in key schedule */
18131 "eor r4, r4, r8\n\t"
18132 "eor r5, r5, r9\n\t"
18133 "eor r6, r6, r10\n\t"
18134 "eor r7, r7, r11\n\t"
18135 "mov r1, #5\n\t"
18136#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
18137 "bl AES_decrypt_block\n\t"
18138#else
18139 "\n"
18140 "L_AES_ECB_decrypt_block_nr_192_%=:\n\t"
18141#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18142#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18143 "lsl r8, r7, #8\n\t"
18144 "lsr r8, r8, #24\n\t"
18145#else
18146 "uxtb r8, r7, ror #16\n\t"
18147#endif
18148#else
18149 "ubfx r8, r7, #16, #8\n\t"
18150#endif
18151 "lsr r11, r4, #24\n\t"
18152#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18153#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18154 "lsl r12, r6, #16\n\t"
18155 "lsr r12, r12, #24\n\t"
18156#else
18157 "uxtb r12, r6, ror #8\n\t"
18158#endif
18159#else
18160 "ubfx r12, r6, #8, #8\n\t"
18161#endif
18162#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18164 "lsl lr, r5, #24\n\t"
18165 "lsr lr, lr, #24\n\t"
18166#else
18167 "uxtb lr, r5\n\t"
18168#endif
18169#else
18170 "ubfx lr, r5, #0, #8\n\t"
18171#endif
18172 "ldr r8, [r0, r8, lsl #2]\n\t"
18173 "ldr r11, [r0, r11, lsl #2]\n\t"
18174 "ldr r12, [r0, r12, lsl #2]\n\t"
18175 "ldr lr, [r0, lr, lsl #2]\n\t"
18176#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18177#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18178 "lsl r9, r4, #8\n\t"
18179 "lsr r9, r9, #24\n\t"
18180#else
18181 "uxtb r9, r4, ror #16\n\t"
18182#endif
18183#else
18184 "ubfx r9, r4, #16, #8\n\t"
18185#endif
18186 "eor r8, r8, r11, ror #24\n\t"
18187 "lsr r11, r5, #24\n\t"
18188 "eor r8, r8, r12, ror #8\n\t"
18189#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18190#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18191 "lsl r12, r7, #16\n\t"
18192 "lsr r12, r12, #24\n\t"
18193#else
18194 "uxtb r12, r7, ror #8\n\t"
18195#endif
18196#else
18197 "ubfx r12, r7, #8, #8\n\t"
18198#endif
18199 "eor r8, r8, lr, ror #16\n\t"
18200#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18201#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18202 "lsl lr, r6, #24\n\t"
18203 "lsr lr, lr, #24\n\t"
18204#else
18205 "uxtb lr, r6\n\t"
18206#endif
18207#else
18208 "ubfx lr, r6, #0, #8\n\t"
18209#endif
18210 "ldr r9, [r0, r9, lsl #2]\n\t"
18211 "ldr r11, [r0, r11, lsl #2]\n\t"
18212 "ldr r12, [r0, r12, lsl #2]\n\t"
18213 "ldr lr, [r0, lr, lsl #2]\n\t"
18214#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18215#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18216 "lsl r10, r5, #8\n\t"
18217 "lsr r10, r10, #24\n\t"
18218#else
18219 "uxtb r10, r5, ror #16\n\t"
18220#endif
18221#else
18222 "ubfx r10, r5, #16, #8\n\t"
18223#endif
18224 "eor r9, r9, r11, ror #24\n\t"
18225 "lsr r11, r6, #24\n\t"
18226 "eor r9, r9, r12, ror #8\n\t"
18227#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18228#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18229 "lsl r12, r4, #16\n\t"
18230 "lsr r12, r12, #24\n\t"
18231#else
18232 "uxtb r12, r4, ror #8\n\t"
18233#endif
18234#else
18235 "ubfx r12, r4, #8, #8\n\t"
18236#endif
18237 "eor r9, r9, lr, ror #16\n\t"
18238#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18239#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18240 "lsl lr, r7, #24\n\t"
18241 "lsr lr, lr, #24\n\t"
18242#else
18243 "uxtb lr, r7\n\t"
18244#endif
18245#else
18246 "ubfx lr, r7, #0, #8\n\t"
18247#endif
18248 "ldr r10, [r0, r10, lsl #2]\n\t"
18249 "ldr r11, [r0, r11, lsl #2]\n\t"
18250 "ldr r12, [r0, r12, lsl #2]\n\t"
18251 "ldr lr, [r0, lr, lsl #2]\n\t"
18252#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18253#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18254 "lsl r4, r4, #24\n\t"
18255 "lsr r4, r4, #24\n\t"
18256#else
18257 "uxtb r4, r4\n\t"
18258#endif
18259#else
18260 "ubfx r4, r4, #0, #8\n\t"
18261#endif
18262 "eor r10, r10, r11, ror #24\n\t"
18263#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18264#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18265 "lsl r11, r6, #8\n\t"
18266 "lsr r11, r11, #24\n\t"
18267#else
18268 "uxtb r11, r6, ror #16\n\t"
18269#endif
18270#else
18271 "ubfx r11, r6, #16, #8\n\t"
18272#endif
18273 "eor r10, r10, r12, ror #8\n\t"
18274 "lsr r12, r7, #24\n\t"
18275 "eor r10, r10, lr, ror #16\n\t"
18276#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18277#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18278 "lsl lr, r5, #16\n\t"
18279 "lsr lr, lr, #24\n\t"
18280#else
18281 "uxtb lr, r5, ror #8\n\t"
18282#endif
18283#else
18284 "ubfx lr, r5, #8, #8\n\t"
18285#endif
18286 "ldr r4, [r0, r4, lsl #2]\n\t"
18287 "ldr r12, [r0, r12, lsl #2]\n\t"
18288 "ldr r11, [r0, r11, lsl #2]\n\t"
18289 "ldr lr, [r0, lr, lsl #2]\n\t"
18290 "eor r12, r12, r4, ror #24\n\t"
18291 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
18292 "eor r11, r11, lr, ror #8\n\t"
18293 "eor r11, r11, r12, ror #24\n\t"
18294 /* XOR in Key Schedule */
18295 "eor r8, r8, r4\n\t"
18296 "eor r9, r9, r5\n\t"
18297 "eor r10, r10, r6\n\t"
18298 "eor r11, r11, r7\n\t"
18299#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18300#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18301 "lsl r4, r11, #8\n\t"
18302 "lsr r4, r4, #24\n\t"
18303#else
18304 "uxtb r4, r11, ror #16\n\t"
18305#endif
18306#else
18307 "ubfx r4, r11, #16, #8\n\t"
18308#endif
18309 "lsr r7, r8, #24\n\t"
18310#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18311#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18312 "lsl r12, r10, #16\n\t"
18313 "lsr r12, r12, #24\n\t"
18314#else
18315 "uxtb r12, r10, ror #8\n\t"
18316#endif
18317#else
18318 "ubfx r12, r10, #8, #8\n\t"
18319#endif
18320#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18321#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18322 "lsl lr, r9, #24\n\t"
18323 "lsr lr, lr, #24\n\t"
18324#else
18325 "uxtb lr, r9\n\t"
18326#endif
18327#else
18328 "ubfx lr, r9, #0, #8\n\t"
18329#endif
18330 "ldr r4, [r0, r4, lsl #2]\n\t"
18331 "ldr r7, [r0, r7, lsl #2]\n\t"
18332 "ldr r12, [r0, r12, lsl #2]\n\t"
18333 "ldr lr, [r0, lr, lsl #2]\n\t"
18334#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18335#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18336 "lsl r5, r8, #8\n\t"
18337 "lsr r5, r5, #24\n\t"
18338#else
18339 "uxtb r5, r8, ror #16\n\t"
18340#endif
18341#else
18342 "ubfx r5, r8, #16, #8\n\t"
18343#endif
18344 "eor r4, r4, r7, ror #24\n\t"
18345 "lsr r7, r9, #24\n\t"
18346 "eor r4, r4, r12, ror #8\n\t"
18347#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18348#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18349 "lsl r12, r11, #16\n\t"
18350 "lsr r12, r12, #24\n\t"
18351#else
18352 "uxtb r12, r11, ror #8\n\t"
18353#endif
18354#else
18355 "ubfx r12, r11, #8, #8\n\t"
18356#endif
18357 "eor r4, r4, lr, ror #16\n\t"
18358#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18359#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18360 "lsl lr, r10, #24\n\t"
18361 "lsr lr, lr, #24\n\t"
18362#else
18363 "uxtb lr, r10\n\t"
18364#endif
18365#else
18366 "ubfx lr, r10, #0, #8\n\t"
18367#endif
18368 "ldr r5, [r0, r5, lsl #2]\n\t"
18369 "ldr r7, [r0, r7, lsl #2]\n\t"
18370 "ldr r12, [r0, r12, lsl #2]\n\t"
18371 "ldr lr, [r0, lr, lsl #2]\n\t"
18372#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18373#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18374 "lsl r6, r9, #8\n\t"
18375 "lsr r6, r6, #24\n\t"
18376#else
18377 "uxtb r6, r9, ror #16\n\t"
18378#endif
18379#else
18380 "ubfx r6, r9, #16, #8\n\t"
18381#endif
18382 "eor r5, r5, r7, ror #24\n\t"
18383 "lsr r7, r10, #24\n\t"
18384 "eor r5, r5, r12, ror #8\n\t"
18385#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18386#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18387 "lsl r12, r8, #16\n\t"
18388 "lsr r12, r12, #24\n\t"
18389#else
18390 "uxtb r12, r8, ror #8\n\t"
18391#endif
18392#else
18393 "ubfx r12, r8, #8, #8\n\t"
18394#endif
18395 "eor r5, r5, lr, ror #16\n\t"
18396#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18397#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18398 "lsl lr, r11, #24\n\t"
18399 "lsr lr, lr, #24\n\t"
18400#else
18401 "uxtb lr, r11\n\t"
18402#endif
18403#else
18404 "ubfx lr, r11, #0, #8\n\t"
18405#endif
18406 "ldr r6, [r0, r6, lsl #2]\n\t"
18407 "ldr r7, [r0, r7, lsl #2]\n\t"
18408 "ldr r12, [r0, r12, lsl #2]\n\t"
18409 "ldr lr, [r0, lr, lsl #2]\n\t"
18410#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18411#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18412 "lsl r8, r8, #24\n\t"
18413 "lsr r8, r8, #24\n\t"
18414#else
18415 "uxtb r8, r8\n\t"
18416#endif
18417#else
18418 "ubfx r8, r8, #0, #8\n\t"
18419#endif
18420 "eor r6, r6, r7, ror #24\n\t"
18421#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18422#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18423 "lsl r7, r10, #8\n\t"
18424 "lsr r7, r7, #24\n\t"
18425#else
18426 "uxtb r7, r10, ror #16\n\t"
18427#endif
18428#else
18429 "ubfx r7, r10, #16, #8\n\t"
18430#endif
18431 "eor r6, r6, r12, ror #8\n\t"
18432 "lsr r12, r11, #24\n\t"
18433 "eor r6, r6, lr, ror #16\n\t"
18434#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18435#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18436 "lsl lr, r9, #16\n\t"
18437 "lsr lr, lr, #24\n\t"
18438#else
18439 "uxtb lr, r9, ror #8\n\t"
18440#endif
18441#else
18442 "ubfx lr, r9, #8, #8\n\t"
18443#endif
18444 "ldr r8, [r0, r8, lsl #2]\n\t"
18445 "ldr r12, [r0, r12, lsl #2]\n\t"
18446 "ldr r7, [r0, r7, lsl #2]\n\t"
18447 "ldr lr, [r0, lr, lsl #2]\n\t"
18448 "eor r12, r12, r8, ror #24\n\t"
18449 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
18450 "eor r7, r7, lr, ror #8\n\t"
18451 "eor r7, r7, r12, ror #24\n\t"
18452 /* XOR in Key Schedule */
18453 "eor r4, r4, r8\n\t"
18454 "eor r5, r5, r9\n\t"
18455 "eor r6, r6, r10\n\t"
18456 "eor r7, r7, r11\n\t"
18457 "subs r1, r1, #1\n\t"
18458 "bne L_AES_ECB_decrypt_block_nr_192_%=\n\t"
18459#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18460#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18461 "lsl r8, r7, #8\n\t"
18462 "lsr r8, r8, #24\n\t"
18463#else
18464 "uxtb r8, r7, ror #16\n\t"
18465#endif
18466#else
18467 "ubfx r8, r7, #16, #8\n\t"
18468#endif
18469 "lsr r11, r4, #24\n\t"
18470#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18471#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18472 "lsl r12, r6, #16\n\t"
18473 "lsr r12, r12, #24\n\t"
18474#else
18475 "uxtb r12, r6, ror #8\n\t"
18476#endif
18477#else
18478 "ubfx r12, r6, #8, #8\n\t"
18479#endif
18480#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18481#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18482 "lsl lr, r5, #24\n\t"
18483 "lsr lr, lr, #24\n\t"
18484#else
18485 "uxtb lr, r5\n\t"
18486#endif
18487#else
18488 "ubfx lr, r5, #0, #8\n\t"
18489#endif
18490 "ldr r8, [r0, r8, lsl #2]\n\t"
18491 "ldr r11, [r0, r11, lsl #2]\n\t"
18492 "ldr r12, [r0, r12, lsl #2]\n\t"
18493 "ldr lr, [r0, lr, lsl #2]\n\t"
18494#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18496 "lsl r9, r4, #8\n\t"
18497 "lsr r9, r9, #24\n\t"
18498#else
18499 "uxtb r9, r4, ror #16\n\t"
18500#endif
18501#else
18502 "ubfx r9, r4, #16, #8\n\t"
18503#endif
18504 "eor r8, r8, r11, ror #24\n\t"
18505 "lsr r11, r5, #24\n\t"
18506 "eor r8, r8, r12, ror #8\n\t"
18507#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18508#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18509 "lsl r12, r7, #16\n\t"
18510 "lsr r12, r12, #24\n\t"
18511#else
18512 "uxtb r12, r7, ror #8\n\t"
18513#endif
18514#else
18515 "ubfx r12, r7, #8, #8\n\t"
18516#endif
18517 "eor r8, r8, lr, ror #16\n\t"
18518#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18519#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18520 "lsl lr, r6, #24\n\t"
18521 "lsr lr, lr, #24\n\t"
18522#else
18523 "uxtb lr, r6\n\t"
18524#endif
18525#else
18526 "ubfx lr, r6, #0, #8\n\t"
18527#endif
18528 "ldr r9, [r0, r9, lsl #2]\n\t"
18529 "ldr r11, [r0, r11, lsl #2]\n\t"
18530 "ldr r12, [r0, r12, lsl #2]\n\t"
18531 "ldr lr, [r0, lr, lsl #2]\n\t"
18532#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18533#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18534 "lsl r10, r5, #8\n\t"
18535 "lsr r10, r10, #24\n\t"
18536#else
18537 "uxtb r10, r5, ror #16\n\t"
18538#endif
18539#else
18540 "ubfx r10, r5, #16, #8\n\t"
18541#endif
18542 "eor r9, r9, r11, ror #24\n\t"
18543 "lsr r11, r6, #24\n\t"
18544 "eor r9, r9, r12, ror #8\n\t"
18545#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18546#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18547 "lsl r12, r4, #16\n\t"
18548 "lsr r12, r12, #24\n\t"
18549#else
18550 "uxtb r12, r4, ror #8\n\t"
18551#endif
18552#else
18553 "ubfx r12, r4, #8, #8\n\t"
18554#endif
18555 "eor r9, r9, lr, ror #16\n\t"
18556#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18557#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18558 "lsl lr, r7, #24\n\t"
18559 "lsr lr, lr, #24\n\t"
18560#else
18561 "uxtb lr, r7\n\t"
18562#endif
18563#else
18564 "ubfx lr, r7, #0, #8\n\t"
18565#endif
18566 "ldr r10, [r0, r10, lsl #2]\n\t"
18567 "ldr r11, [r0, r11, lsl #2]\n\t"
18568 "ldr r12, [r0, r12, lsl #2]\n\t"
18569 "ldr lr, [r0, lr, lsl #2]\n\t"
18570#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18571#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18572 "lsl r4, r4, #24\n\t"
18573 "lsr r4, r4, #24\n\t"
18574#else
18575 "uxtb r4, r4\n\t"
18576#endif
18577#else
18578 "ubfx r4, r4, #0, #8\n\t"
18579#endif
18580 "eor r10, r10, r11, ror #24\n\t"
18581#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18582#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18583 "lsl r11, r6, #8\n\t"
18584 "lsr r11, r11, #24\n\t"
18585#else
18586 "uxtb r11, r6, ror #16\n\t"
18587#endif
18588#else
18589 "ubfx r11, r6, #16, #8\n\t"
18590#endif
18591 "eor r10, r10, r12, ror #8\n\t"
18592 "lsr r12, r7, #24\n\t"
18593 "eor r10, r10, lr, ror #16\n\t"
18594#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18595#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18596 "lsl lr, r5, #16\n\t"
18597 "lsr lr, lr, #24\n\t"
18598#else
18599 "uxtb lr, r5, ror #8\n\t"
18600#endif
18601#else
18602 "ubfx lr, r5, #8, #8\n\t"
18603#endif
18604 "ldr r4, [r0, r4, lsl #2]\n\t"
18605 "ldr r12, [r0, r12, lsl #2]\n\t"
18606 "ldr r11, [r0, r11, lsl #2]\n\t"
18607 "ldr lr, [r0, lr, lsl #2]\n\t"
18608 "eor r12, r12, r4, ror #24\n\t"
18609 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
18610 "eor r11, r11, lr, ror #8\n\t"
18611 "eor r11, r11, r12, ror #24\n\t"
18612 /* XOR in Key Schedule */
18613 "eor r8, r8, r4\n\t"
18614 "eor r9, r9, r5\n\t"
18615 "eor r10, r10, r6\n\t"
18616 "eor r11, r11, r7\n\t"
18617#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18618#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18619 "lsl r4, r9, #24\n\t"
18620 "lsr r4, r4, #24\n\t"
18621#else
18622 "uxtb r4, r9\n\t"
18623#endif
18624#else
18625 "ubfx r4, r9, #0, #8\n\t"
18626#endif
18627#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18628#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18629 "lsl r7, r10, #16\n\t"
18630 "lsr r7, r7, #24\n\t"
18631#else
18632 "uxtb r7, r10, ror #8\n\t"
18633#endif
18634#else
18635 "ubfx r7, r10, #8, #8\n\t"
18636#endif
18637#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18638#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18639 "lsl r12, r11, #8\n\t"
18640 "lsr r12, r12, #24\n\t"
18641#else
18642 "uxtb r12, r11, ror #16\n\t"
18643#endif
18644#else
18645 "ubfx r12, r11, #16, #8\n\t"
18646#endif
18647 "lsr lr, r8, #24\n\t"
18648 "ldrb r4, [r2, r4]\n\t"
18649 "ldrb r7, [r2, r7]\n\t"
18650 "ldrb r12, [r2, r12]\n\t"
18651 "ldrb lr, [r2, lr]\n\t"
18652#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18653#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18654 "lsl r5, r10, #24\n\t"
18655 "lsr r5, r5, #24\n\t"
18656#else
18657 "uxtb r5, r10\n\t"
18658#endif
18659#else
18660 "ubfx r5, r10, #0, #8\n\t"
18661#endif
18662 "eor r4, r4, r7, lsl #8\n\t"
18663#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18664#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18665 "lsl r7, r11, #16\n\t"
18666 "lsr r7, r7, #24\n\t"
18667#else
18668 "uxtb r7, r11, ror #8\n\t"
18669#endif
18670#else
18671 "ubfx r7, r11, #8, #8\n\t"
18672#endif
18673 "eor r4, r4, r12, lsl #16\n\t"
18674#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18675#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18676 "lsl r12, r8, #8\n\t"
18677 "lsr r12, r12, #24\n\t"
18678#else
18679 "uxtb r12, r8, ror #16\n\t"
18680#endif
18681#else
18682 "ubfx r12, r8, #16, #8\n\t"
18683#endif
18684 "eor r4, r4, lr, lsl #24\n\t"
18685 "lsr lr, r9, #24\n\t"
18686 "ldrb r7, [r2, r7]\n\t"
18687 "ldrb lr, [r2, lr]\n\t"
18688 "ldrb r5, [r2, r5]\n\t"
18689 "ldrb r12, [r2, r12]\n\t"
18690#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18691#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18692 "lsl r6, r11, #24\n\t"
18693 "lsr r6, r6, #24\n\t"
18694#else
18695 "uxtb r6, r11\n\t"
18696#endif
18697#else
18698 "ubfx r6, r11, #0, #8\n\t"
18699#endif
18700 "eor r5, r5, r7, lsl #8\n\t"
18701#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18702#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18703 "lsl r7, r8, #16\n\t"
18704 "lsr r7, r7, #24\n\t"
18705#else
18706 "uxtb r7, r8, ror #8\n\t"
18707#endif
18708#else
18709 "ubfx r7, r8, #8, #8\n\t"
18710#endif
18711 "eor r5, r5, r12, lsl #16\n\t"
18712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18713#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18714 "lsl r12, r9, #8\n\t"
18715 "lsr r12, r12, #24\n\t"
18716#else
18717 "uxtb r12, r9, ror #16\n\t"
18718#endif
18719#else
18720 "ubfx r12, r9, #16, #8\n\t"
18721#endif
18722 "eor r5, r5, lr, lsl #24\n\t"
18723 "lsr lr, r10, #24\n\t"
18724 "ldrb r7, [r2, r7]\n\t"
18725 "ldrb lr, [r2, lr]\n\t"
18726 "ldrb r6, [r2, r6]\n\t"
18727 "ldrb r12, [r2, r12]\n\t"
18728 "lsr r11, r11, #24\n\t"
18729 "eor r6, r6, r7, lsl #8\n\t"
18730#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18732 "lsl r7, r8, #24\n\t"
18733 "lsr r7, r7, #24\n\t"
18734#else
18735 "uxtb r7, r8\n\t"
18736#endif
18737#else
18738 "ubfx r7, r8, #0, #8\n\t"
18739#endif
18740 "eor r6, r6, r12, lsl #16\n\t"
18741#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18742#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18743 "lsl r12, r9, #16\n\t"
18744 "lsr r12, r12, #24\n\t"
18745#else
18746 "uxtb r12, r9, ror #8\n\t"
18747#endif
18748#else
18749 "ubfx r12, r9, #8, #8\n\t"
18750#endif
18751 "eor r6, r6, lr, lsl #24\n\t"
18752#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18753#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18754 "lsl lr, r10, #8\n\t"
18755 "lsr lr, lr, #24\n\t"
18756#else
18757 "uxtb lr, r10, ror #16\n\t"
18758#endif
18759#else
18760 "ubfx lr, r10, #16, #8\n\t"
18761#endif
18762 "ldrb r11, [r2, r11]\n\t"
18763 "ldrb r12, [r2, r12]\n\t"
18764 "ldrb r7, [r2, r7]\n\t"
18765 "ldrb lr, [r2, lr]\n\t"
18766 "eor r12, r12, r11, lsl #16\n\t"
18767 "ldm %[ks], {r8, r9, r10, r11}\n\t"
18768 "eor r7, r7, r12, lsl #8\n\t"
18769 "eor r7, r7, lr, lsl #16\n\t"
18770 /* XOR in Key Schedule */
18771 "eor r4, r4, r8\n\t"
18772 "eor r5, r5, r9\n\t"
18773 "eor r6, r6, r10\n\t"
18774 "eor r7, r7, r11\n\t"
18775#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
18776 "pop {r1, %[ks], r12, lr}\n\t"
18777#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18778 "eor r8, r4, r4, ror #16\n\t"
18779 "eor r9, r5, r5, ror #16\n\t"
18780 "eor r10, r6, r6, ror #16\n\t"
18781 "eor r11, r7, r7, ror #16\n\t"
18782 "bic r8, r8, #0xff0000\n\t"
18783 "bic r9, r9, #0xff0000\n\t"
18784 "bic r10, r10, #0xff0000\n\t"
18785 "bic r11, r11, #0xff0000\n\t"
18786 "ror r4, r4, #8\n\t"
18787 "ror r5, r5, #8\n\t"
18788 "ror r6, r6, #8\n\t"
18789 "ror r7, r7, #8\n\t"
18790 "eor r4, r4, r8, lsr #8\n\t"
18791 "eor r5, r5, r9, lsr #8\n\t"
18792 "eor r6, r6, r10, lsr #8\n\t"
18793 "eor r7, r7, r11, lsr #8\n\t"
18794#else
18795 "rev r4, r4\n\t"
18796 "rev r5, r5\n\t"
18797 "rev r6, r6\n\t"
18798 "rev r7, r7\n\t"
18799#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
18800 "str r4, [%[out]]\n\t"
18801 "str r5, [%[out], #4]\n\t"
18802 "str r6, [%[out], #8]\n\t"
18803 "str r7, [%[out], #12]\n\t"
18804 "subs r12, r12, #16\n\t"
18805 "add lr, lr, #16\n\t"
18806 "add %[out], %[out], #16\n\t"
18807 "bne L_AES_ECB_decrypt_loop_block_192_%=\n\t"
18808 "b L_AES_ECB_decrypt_end_%=\n\t"
18809 "\n"
18810 "L_AES_ECB_decrypt_start_block_128_%=:\n\t"
18811 "\n"
18812 "L_AES_ECB_decrypt_loop_block_128_%=:\n\t"
18813 "ldr r4, [lr]\n\t"
18814 "ldr r5, [lr, #4]\n\t"
18815 "ldr r6, [lr, #8]\n\t"
18816 "ldr r7, [lr, #12]\n\t"
18817#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18818 "eor r8, r4, r4, ror #16\n\t"
18819 "eor r9, r5, r5, ror #16\n\t"
18820 "eor r10, r6, r6, ror #16\n\t"
18821 "eor r11, r7, r7, ror #16\n\t"
18822 "bic r8, r8, #0xff0000\n\t"
18823 "bic r9, r9, #0xff0000\n\t"
18824 "bic r10, r10, #0xff0000\n\t"
18825 "bic r11, r11, #0xff0000\n\t"
18826 "ror r4, r4, #8\n\t"
18827 "ror r5, r5, #8\n\t"
18828 "ror r6, r6, #8\n\t"
18829 "ror r7, r7, #8\n\t"
18830 "eor r4, r4, r8, lsr #8\n\t"
18831 "eor r5, r5, r9, lsr #8\n\t"
18832 "eor r6, r6, r10, lsr #8\n\t"
18833 "eor r7, r7, r11, lsr #8\n\t"
18834#else
18835 "rev r4, r4\n\t"
18836 "rev r5, r5\n\t"
18837 "rev r6, r6\n\t"
18838 "rev r7, r7\n\t"
18839#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
18840 "push {r1, %[ks], r12, lr}\n\t"
18841 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
18842 /* Round: 0 - XOR in key schedule */
18843 "eor r4, r4, r8\n\t"
18844 "eor r5, r5, r9\n\t"
18845 "eor r6, r6, r10\n\t"
18846 "eor r7, r7, r11\n\t"
18847 "mov r1, #4\n\t"
18848#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
18849 "bl AES_decrypt_block\n\t"
18850#else
18851 "\n"
18852 "L_AES_ECB_decrypt_block_nr_128_%=:\n\t"
18853#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18854#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18855 "lsl r8, r7, #8\n\t"
18856 "lsr r8, r8, #24\n\t"
18857#else
18858 "uxtb r8, r7, ror #16\n\t"
18859#endif
18860#else
18861 "ubfx r8, r7, #16, #8\n\t"
18862#endif
18863 "lsr r11, r4, #24\n\t"
18864#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18865#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18866 "lsl r12, r6, #16\n\t"
18867 "lsr r12, r12, #24\n\t"
18868#else
18869 "uxtb r12, r6, ror #8\n\t"
18870#endif
18871#else
18872 "ubfx r12, r6, #8, #8\n\t"
18873#endif
18874#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18875#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18876 "lsl lr, r5, #24\n\t"
18877 "lsr lr, lr, #24\n\t"
18878#else
18879 "uxtb lr, r5\n\t"
18880#endif
18881#else
18882 "ubfx lr, r5, #0, #8\n\t"
18883#endif
18884 "ldr r8, [r0, r8, lsl #2]\n\t"
18885 "ldr r11, [r0, r11, lsl #2]\n\t"
18886 "ldr r12, [r0, r12, lsl #2]\n\t"
18887 "ldr lr, [r0, lr, lsl #2]\n\t"
18888#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18889#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18890 "lsl r9, r4, #8\n\t"
18891 "lsr r9, r9, #24\n\t"
18892#else
18893 "uxtb r9, r4, ror #16\n\t"
18894#endif
18895#else
18896 "ubfx r9, r4, #16, #8\n\t"
18897#endif
18898 "eor r8, r8, r11, ror #24\n\t"
18899 "lsr r11, r5, #24\n\t"
18900 "eor r8, r8, r12, ror #8\n\t"
18901#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18902#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18903 "lsl r12, r7, #16\n\t"
18904 "lsr r12, r12, #24\n\t"
18905#else
18906 "uxtb r12, r7, ror #8\n\t"
18907#endif
18908#else
18909 "ubfx r12, r7, #8, #8\n\t"
18910#endif
18911 "eor r8, r8, lr, ror #16\n\t"
18912#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18913#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18914 "lsl lr, r6, #24\n\t"
18915 "lsr lr, lr, #24\n\t"
18916#else
18917 "uxtb lr, r6\n\t"
18918#endif
18919#else
18920 "ubfx lr, r6, #0, #8\n\t"
18921#endif
18922 "ldr r9, [r0, r9, lsl #2]\n\t"
18923 "ldr r11, [r0, r11, lsl #2]\n\t"
18924 "ldr r12, [r0, r12, lsl #2]\n\t"
18925 "ldr lr, [r0, lr, lsl #2]\n\t"
18926#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18927#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18928 "lsl r10, r5, #8\n\t"
18929 "lsr r10, r10, #24\n\t"
18930#else
18931 "uxtb r10, r5, ror #16\n\t"
18932#endif
18933#else
18934 "ubfx r10, r5, #16, #8\n\t"
18935#endif
18936 "eor r9, r9, r11, ror #24\n\t"
18937 "lsr r11, r6, #24\n\t"
18938 "eor r9, r9, r12, ror #8\n\t"
18939#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18940#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18941 "lsl r12, r4, #16\n\t"
18942 "lsr r12, r12, #24\n\t"
18943#else
18944 "uxtb r12, r4, ror #8\n\t"
18945#endif
18946#else
18947 "ubfx r12, r4, #8, #8\n\t"
18948#endif
18949 "eor r9, r9, lr, ror #16\n\t"
18950#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18951#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18952 "lsl lr, r7, #24\n\t"
18953 "lsr lr, lr, #24\n\t"
18954#else
18955 "uxtb lr, r7\n\t"
18956#endif
18957#else
18958 "ubfx lr, r7, #0, #8\n\t"
18959#endif
18960 "ldr r10, [r0, r10, lsl #2]\n\t"
18961 "ldr r11, [r0, r11, lsl #2]\n\t"
18962 "ldr r12, [r0, r12, lsl #2]\n\t"
18963 "ldr lr, [r0, lr, lsl #2]\n\t"
18964#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18965#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18966 "lsl r4, r4, #24\n\t"
18967 "lsr r4, r4, #24\n\t"
18968#else
18969 "uxtb r4, r4\n\t"
18970#endif
18971#else
18972 "ubfx r4, r4, #0, #8\n\t"
18973#endif
18974 "eor r10, r10, r11, ror #24\n\t"
18975#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18976#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18977 "lsl r11, r6, #8\n\t"
18978 "lsr r11, r11, #24\n\t"
18979#else
18980 "uxtb r11, r6, ror #16\n\t"
18981#endif
18982#else
18983 "ubfx r11, r6, #16, #8\n\t"
18984#endif
18985 "eor r10, r10, r12, ror #8\n\t"
18986 "lsr r12, r7, #24\n\t"
18987 "eor r10, r10, lr, ror #16\n\t"
18988#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
18989#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
18990 "lsl lr, r5, #16\n\t"
18991 "lsr lr, lr, #24\n\t"
18992#else
18993 "uxtb lr, r5, ror #8\n\t"
18994#endif
18995#else
18996 "ubfx lr, r5, #8, #8\n\t"
18997#endif
18998 "ldr r4, [r0, r4, lsl #2]\n\t"
18999 "ldr r12, [r0, r12, lsl #2]\n\t"
19000 "ldr r11, [r0, r11, lsl #2]\n\t"
19001 "ldr lr, [r0, lr, lsl #2]\n\t"
19002 "eor r12, r12, r4, ror #24\n\t"
19003 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
19004 "eor r11, r11, lr, ror #8\n\t"
19005 "eor r11, r11, r12, ror #24\n\t"
19006 /* XOR in Key Schedule */
19007 "eor r8, r8, r4\n\t"
19008 "eor r9, r9, r5\n\t"
19009 "eor r10, r10, r6\n\t"
19010 "eor r11, r11, r7\n\t"
19011#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19012#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19013 "lsl r4, r11, #8\n\t"
19014 "lsr r4, r4, #24\n\t"
19015#else
19016 "uxtb r4, r11, ror #16\n\t"
19017#endif
19018#else
19019 "ubfx r4, r11, #16, #8\n\t"
19020#endif
19021 "lsr r7, r8, #24\n\t"
19022#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19023#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19024 "lsl r12, r10, #16\n\t"
19025 "lsr r12, r12, #24\n\t"
19026#else
19027 "uxtb r12, r10, ror #8\n\t"
19028#endif
19029#else
19030 "ubfx r12, r10, #8, #8\n\t"
19031#endif
19032#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19033#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19034 "lsl lr, r9, #24\n\t"
19035 "lsr lr, lr, #24\n\t"
19036#else
19037 "uxtb lr, r9\n\t"
19038#endif
19039#else
19040 "ubfx lr, r9, #0, #8\n\t"
19041#endif
19042 "ldr r4, [r0, r4, lsl #2]\n\t"
19043 "ldr r7, [r0, r7, lsl #2]\n\t"
19044 "ldr r12, [r0, r12, lsl #2]\n\t"
19045 "ldr lr, [r0, lr, lsl #2]\n\t"
19046#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19047#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19048 "lsl r5, r8, #8\n\t"
19049 "lsr r5, r5, #24\n\t"
19050#else
19051 "uxtb r5, r8, ror #16\n\t"
19052#endif
19053#else
19054 "ubfx r5, r8, #16, #8\n\t"
19055#endif
19056 "eor r4, r4, r7, ror #24\n\t"
19057 "lsr r7, r9, #24\n\t"
19058 "eor r4, r4, r12, ror #8\n\t"
19059#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19060#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19061 "lsl r12, r11, #16\n\t"
19062 "lsr r12, r12, #24\n\t"
19063#else
19064 "uxtb r12, r11, ror #8\n\t"
19065#endif
19066#else
19067 "ubfx r12, r11, #8, #8\n\t"
19068#endif
19069 "eor r4, r4, lr, ror #16\n\t"
19070#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19071#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19072 "lsl lr, r10, #24\n\t"
19073 "lsr lr, lr, #24\n\t"
19074#else
19075 "uxtb lr, r10\n\t"
19076#endif
19077#else
19078 "ubfx lr, r10, #0, #8\n\t"
19079#endif
19080 "ldr r5, [r0, r5, lsl #2]\n\t"
19081 "ldr r7, [r0, r7, lsl #2]\n\t"
19082 "ldr r12, [r0, r12, lsl #2]\n\t"
19083 "ldr lr, [r0, lr, lsl #2]\n\t"
19084#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19085#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19086 "lsl r6, r9, #8\n\t"
19087 "lsr r6, r6, #24\n\t"
19088#else
19089 "uxtb r6, r9, ror #16\n\t"
19090#endif
19091#else
19092 "ubfx r6, r9, #16, #8\n\t"
19093#endif
19094 "eor r5, r5, r7, ror #24\n\t"
19095 "lsr r7, r10, #24\n\t"
19096 "eor r5, r5, r12, ror #8\n\t"
19097#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19098#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19099 "lsl r12, r8, #16\n\t"
19100 "lsr r12, r12, #24\n\t"
19101#else
19102 "uxtb r12, r8, ror #8\n\t"
19103#endif
19104#else
19105 "ubfx r12, r8, #8, #8\n\t"
19106#endif
19107 "eor r5, r5, lr, ror #16\n\t"
19108#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19109#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19110 "lsl lr, r11, #24\n\t"
19111 "lsr lr, lr, #24\n\t"
19112#else
19113 "uxtb lr, r11\n\t"
19114#endif
19115#else
19116 "ubfx lr, r11, #0, #8\n\t"
19117#endif
19118 "ldr r6, [r0, r6, lsl #2]\n\t"
19119 "ldr r7, [r0, r7, lsl #2]\n\t"
19120 "ldr r12, [r0, r12, lsl #2]\n\t"
19121 "ldr lr, [r0, lr, lsl #2]\n\t"
19122#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19123#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19124 "lsl r8, r8, #24\n\t"
19125 "lsr r8, r8, #24\n\t"
19126#else
19127 "uxtb r8, r8\n\t"
19128#endif
19129#else
19130 "ubfx r8, r8, #0, #8\n\t"
19131#endif
19132 "eor r6, r6, r7, ror #24\n\t"
19133#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19134#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19135 "lsl r7, r10, #8\n\t"
19136 "lsr r7, r7, #24\n\t"
19137#else
19138 "uxtb r7, r10, ror #16\n\t"
19139#endif
19140#else
19141 "ubfx r7, r10, #16, #8\n\t"
19142#endif
19143 "eor r6, r6, r12, ror #8\n\t"
19144 "lsr r12, r11, #24\n\t"
19145 "eor r6, r6, lr, ror #16\n\t"
19146#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19147#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19148 "lsl lr, r9, #16\n\t"
19149 "lsr lr, lr, #24\n\t"
19150#else
19151 "uxtb lr, r9, ror #8\n\t"
19152#endif
19153#else
19154 "ubfx lr, r9, #8, #8\n\t"
19155#endif
19156 "ldr r8, [r0, r8, lsl #2]\n\t"
19157 "ldr r12, [r0, r12, lsl #2]\n\t"
19158 "ldr r7, [r0, r7, lsl #2]\n\t"
19159 "ldr lr, [r0, lr, lsl #2]\n\t"
19160 "eor r12, r12, r8, ror #24\n\t"
19161 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
19162 "eor r7, r7, lr, ror #8\n\t"
19163 "eor r7, r7, r12, ror #24\n\t"
19164 /* XOR in Key Schedule */
19165 "eor r4, r4, r8\n\t"
19166 "eor r5, r5, r9\n\t"
19167 "eor r6, r6, r10\n\t"
19168 "eor r7, r7, r11\n\t"
19169 "subs r1, r1, #1\n\t"
19170 "bne L_AES_ECB_decrypt_block_nr_128_%=\n\t"
19171#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19172#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19173 "lsl r8, r7, #8\n\t"
19174 "lsr r8, r8, #24\n\t"
19175#else
19176 "uxtb r8, r7, ror #16\n\t"
19177#endif
19178#else
19179 "ubfx r8, r7, #16, #8\n\t"
19180#endif
19181 "lsr r11, r4, #24\n\t"
19182#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19183#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19184 "lsl r12, r6, #16\n\t"
19185 "lsr r12, r12, #24\n\t"
19186#else
19187 "uxtb r12, r6, ror #8\n\t"
19188#endif
19189#else
19190 "ubfx r12, r6, #8, #8\n\t"
19191#endif
19192#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19193#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19194 "lsl lr, r5, #24\n\t"
19195 "lsr lr, lr, #24\n\t"
19196#else
19197 "uxtb lr, r5\n\t"
19198#endif
19199#else
19200 "ubfx lr, r5, #0, #8\n\t"
19201#endif
19202 "ldr r8, [r0, r8, lsl #2]\n\t"
19203 "ldr r11, [r0, r11, lsl #2]\n\t"
19204 "ldr r12, [r0, r12, lsl #2]\n\t"
19205 "ldr lr, [r0, lr, lsl #2]\n\t"
19206#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19207#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19208 "lsl r9, r4, #8\n\t"
19209 "lsr r9, r9, #24\n\t"
19210#else
19211 "uxtb r9, r4, ror #16\n\t"
19212#endif
19213#else
19214 "ubfx r9, r4, #16, #8\n\t"
19215#endif
19216 "eor r8, r8, r11, ror #24\n\t"
19217 "lsr r11, r5, #24\n\t"
19218 "eor r8, r8, r12, ror #8\n\t"
19219#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19220#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19221 "lsl r12, r7, #16\n\t"
19222 "lsr r12, r12, #24\n\t"
19223#else
19224 "uxtb r12, r7, ror #8\n\t"
19225#endif
19226#else
19227 "ubfx r12, r7, #8, #8\n\t"
19228#endif
19229 "eor r8, r8, lr, ror #16\n\t"
19230#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19231#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19232 "lsl lr, r6, #24\n\t"
19233 "lsr lr, lr, #24\n\t"
19234#else
19235 "uxtb lr, r6\n\t"
19236#endif
19237#else
19238 "ubfx lr, r6, #0, #8\n\t"
19239#endif
19240 "ldr r9, [r0, r9, lsl #2]\n\t"
19241 "ldr r11, [r0, r11, lsl #2]\n\t"
19242 "ldr r12, [r0, r12, lsl #2]\n\t"
19243 "ldr lr, [r0, lr, lsl #2]\n\t"
19244#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19245#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19246 "lsl r10, r5, #8\n\t"
19247 "lsr r10, r10, #24\n\t"
19248#else
19249 "uxtb r10, r5, ror #16\n\t"
19250#endif
19251#else
19252 "ubfx r10, r5, #16, #8\n\t"
19253#endif
19254 "eor r9, r9, r11, ror #24\n\t"
19255 "lsr r11, r6, #24\n\t"
19256 "eor r9, r9, r12, ror #8\n\t"
19257#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19258#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19259 "lsl r12, r4, #16\n\t"
19260 "lsr r12, r12, #24\n\t"
19261#else
19262 "uxtb r12, r4, ror #8\n\t"
19263#endif
19264#else
19265 "ubfx r12, r4, #8, #8\n\t"
19266#endif
19267 "eor r9, r9, lr, ror #16\n\t"
19268#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19269#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19270 "lsl lr, r7, #24\n\t"
19271 "lsr lr, lr, #24\n\t"
19272#else
19273 "uxtb lr, r7\n\t"
19274#endif
19275#else
19276 "ubfx lr, r7, #0, #8\n\t"
19277#endif
19278 "ldr r10, [r0, r10, lsl #2]\n\t"
19279 "ldr r11, [r0, r11, lsl #2]\n\t"
19280 "ldr r12, [r0, r12, lsl #2]\n\t"
19281 "ldr lr, [r0, lr, lsl #2]\n\t"
19282#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19283#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19284 "lsl r4, r4, #24\n\t"
19285 "lsr r4, r4, #24\n\t"
19286#else
19287 "uxtb r4, r4\n\t"
19288#endif
19289#else
19290 "ubfx r4, r4, #0, #8\n\t"
19291#endif
19292 "eor r10, r10, r11, ror #24\n\t"
19293#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19294#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19295 "lsl r11, r6, #8\n\t"
19296 "lsr r11, r11, #24\n\t"
19297#else
19298 "uxtb r11, r6, ror #16\n\t"
19299#endif
19300#else
19301 "ubfx r11, r6, #16, #8\n\t"
19302#endif
19303 "eor r10, r10, r12, ror #8\n\t"
19304 "lsr r12, r7, #24\n\t"
19305 "eor r10, r10, lr, ror #16\n\t"
19306#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19307#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19308 "lsl lr, r5, #16\n\t"
19309 "lsr lr, lr, #24\n\t"
19310#else
19311 "uxtb lr, r5, ror #8\n\t"
19312#endif
19313#else
19314 "ubfx lr, r5, #8, #8\n\t"
19315#endif
19316 "ldr r4, [r0, r4, lsl #2]\n\t"
19317 "ldr r12, [r0, r12, lsl #2]\n\t"
19318 "ldr r11, [r0, r11, lsl #2]\n\t"
19319 "ldr lr, [r0, lr, lsl #2]\n\t"
19320 "eor r12, r12, r4, ror #24\n\t"
19321 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
19322 "eor r11, r11, lr, ror #8\n\t"
19323 "eor r11, r11, r12, ror #24\n\t"
19324 /* XOR in Key Schedule */
19325 "eor r8, r8, r4\n\t"
19326 "eor r9, r9, r5\n\t"
19327 "eor r10, r10, r6\n\t"
19328 "eor r11, r11, r7\n\t"
19329#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19330#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19331 "lsl r4, r9, #24\n\t"
19332 "lsr r4, r4, #24\n\t"
19333#else
19334 "uxtb r4, r9\n\t"
19335#endif
19336#else
19337 "ubfx r4, r9, #0, #8\n\t"
19338#endif
19339#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19340#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19341 "lsl r7, r10, #16\n\t"
19342 "lsr r7, r7, #24\n\t"
19343#else
19344 "uxtb r7, r10, ror #8\n\t"
19345#endif
19346#else
19347 "ubfx r7, r10, #8, #8\n\t"
19348#endif
19349#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19350#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19351 "lsl r12, r11, #8\n\t"
19352 "lsr r12, r12, #24\n\t"
19353#else
19354 "uxtb r12, r11, ror #16\n\t"
19355#endif
19356#else
19357 "ubfx r12, r11, #16, #8\n\t"
19358#endif
19359 "lsr lr, r8, #24\n\t"
19360 "ldrb r4, [r2, r4]\n\t"
19361 "ldrb r7, [r2, r7]\n\t"
19362 "ldrb r12, [r2, r12]\n\t"
19363 "ldrb lr, [r2, lr]\n\t"
19364#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19365#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19366 "lsl r5, r10, #24\n\t"
19367 "lsr r5, r5, #24\n\t"
19368#else
19369 "uxtb r5, r10\n\t"
19370#endif
19371#else
19372 "ubfx r5, r10, #0, #8\n\t"
19373#endif
19374 "eor r4, r4, r7, lsl #8\n\t"
19375#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19376#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19377 "lsl r7, r11, #16\n\t"
19378 "lsr r7, r7, #24\n\t"
19379#else
19380 "uxtb r7, r11, ror #8\n\t"
19381#endif
19382#else
19383 "ubfx r7, r11, #8, #8\n\t"
19384#endif
19385 "eor r4, r4, r12, lsl #16\n\t"
19386#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19387#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19388 "lsl r12, r8, #8\n\t"
19389 "lsr r12, r12, #24\n\t"
19390#else
19391 "uxtb r12, r8, ror #16\n\t"
19392#endif
19393#else
19394 "ubfx r12, r8, #16, #8\n\t"
19395#endif
19396 "eor r4, r4, lr, lsl #24\n\t"
19397 "lsr lr, r9, #24\n\t"
19398 "ldrb r7, [r2, r7]\n\t"
19399 "ldrb lr, [r2, lr]\n\t"
19400 "ldrb r5, [r2, r5]\n\t"
19401 "ldrb r12, [r2, r12]\n\t"
19402#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19403#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19404 "lsl r6, r11, #24\n\t"
19405 "lsr r6, r6, #24\n\t"
19406#else
19407 "uxtb r6, r11\n\t"
19408#endif
19409#else
19410 "ubfx r6, r11, #0, #8\n\t"
19411#endif
19412 "eor r5, r5, r7, lsl #8\n\t"
19413#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19414#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19415 "lsl r7, r8, #16\n\t"
19416 "lsr r7, r7, #24\n\t"
19417#else
19418 "uxtb r7, r8, ror #8\n\t"
19419#endif
19420#else
19421 "ubfx r7, r8, #8, #8\n\t"
19422#endif
19423 "eor r5, r5, r12, lsl #16\n\t"
19424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19425#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19426 "lsl r12, r9, #8\n\t"
19427 "lsr r12, r12, #24\n\t"
19428#else
19429 "uxtb r12, r9, ror #16\n\t"
19430#endif
19431#else
19432 "ubfx r12, r9, #16, #8\n\t"
19433#endif
19434 "eor r5, r5, lr, lsl #24\n\t"
19435 "lsr lr, r10, #24\n\t"
19436 "ldrb r7, [r2, r7]\n\t"
19437 "ldrb lr, [r2, lr]\n\t"
19438 "ldrb r6, [r2, r6]\n\t"
19439 "ldrb r12, [r2, r12]\n\t"
19440 "lsr r11, r11, #24\n\t"
19441 "eor r6, r6, r7, lsl #8\n\t"
19442#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19443#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19444 "lsl r7, r8, #24\n\t"
19445 "lsr r7, r7, #24\n\t"
19446#else
19447 "uxtb r7, r8\n\t"
19448#endif
19449#else
19450 "ubfx r7, r8, #0, #8\n\t"
19451#endif
19452 "eor r6, r6, r12, lsl #16\n\t"
19453#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19454#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19455 "lsl r12, r9, #16\n\t"
19456 "lsr r12, r12, #24\n\t"
19457#else
19458 "uxtb r12, r9, ror #8\n\t"
19459#endif
19460#else
19461 "ubfx r12, r9, #8, #8\n\t"
19462#endif
19463 "eor r6, r6, lr, lsl #24\n\t"
19464#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19465#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19466 "lsl lr, r10, #8\n\t"
19467 "lsr lr, lr, #24\n\t"
19468#else
19469 "uxtb lr, r10, ror #16\n\t"
19470#endif
19471#else
19472 "ubfx lr, r10, #16, #8\n\t"
19473#endif
19474 "ldrb r11, [r2, r11]\n\t"
19475 "ldrb r12, [r2, r12]\n\t"
19476 "ldrb r7, [r2, r7]\n\t"
19477 "ldrb lr, [r2, lr]\n\t"
19478 "eor r12, r12, r11, lsl #16\n\t"
19479 "ldm %[ks], {r8, r9, r10, r11}\n\t"
19480 "eor r7, r7, r12, lsl #8\n\t"
19481 "eor r7, r7, lr, lsl #16\n\t"
19482 /* XOR in Key Schedule */
19483 "eor r4, r4, r8\n\t"
19484 "eor r5, r5, r9\n\t"
19485 "eor r6, r6, r10\n\t"
19486 "eor r7, r7, r11\n\t"
19487#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
19488 "pop {r1, %[ks], r12, lr}\n\t"
19489#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19490 "eor r8, r4, r4, ror #16\n\t"
19491 "eor r9, r5, r5, ror #16\n\t"
19492 "eor r10, r6, r6, ror #16\n\t"
19493 "eor r11, r7, r7, ror #16\n\t"
19494 "bic r8, r8, #0xff0000\n\t"
19495 "bic r9, r9, #0xff0000\n\t"
19496 "bic r10, r10, #0xff0000\n\t"
19497 "bic r11, r11, #0xff0000\n\t"
19498 "ror r4, r4, #8\n\t"
19499 "ror r5, r5, #8\n\t"
19500 "ror r6, r6, #8\n\t"
19501 "ror r7, r7, #8\n\t"
19502 "eor r4, r4, r8, lsr #8\n\t"
19503 "eor r5, r5, r9, lsr #8\n\t"
19504 "eor r6, r6, r10, lsr #8\n\t"
19505 "eor r7, r7, r11, lsr #8\n\t"
19506#else
19507 "rev r4, r4\n\t"
19508 "rev r5, r5\n\t"
19509 "rev r6, r6\n\t"
19510 "rev r7, r7\n\t"
19511#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
19512 "str r4, [%[out]]\n\t"
19513 "str r5, [%[out], #4]\n\t"
19514 "str r6, [%[out], #8]\n\t"
19515 "str r7, [%[out], #12]\n\t"
19516 "subs r12, r12, #16\n\t"
19517 "add lr, lr, #16\n\t"
19518 "add %[out], %[out], #16\n\t"
19519 "bne L_AES_ECB_decrypt_loop_block_128_%=\n\t"
19520 "\n"
19521 "L_AES_ECB_decrypt_end_%=:\n\t"
19522 "pop {%[nr], %[L_AES_ARM32_td_ecb]}\n\t"
19523 "pop {%[L_AES_ARM32_ecb_td4]}\n\t"
19524#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
19525 : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
19526 [nr] "+r" (nr), [L_AES_ARM32_td_ecb] "+r" (L_AES_ARM32_td_ecb_c),
19527 [L_AES_ARM32_ecb_td4] "+r" (L_AES_ARM32_ecb_td4_c)
19528 :
19529#else
19530 :
19531 : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
19532 [nr] "r" (nr), [L_AES_ARM32_td_ecb] "r" (L_AES_ARM32_td_ecb_c),
19533 [L_AES_ARM32_ecb_td4] "r" (L_AES_ARM32_ecb_td4_c)
19534#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
19535 : "memory", "cc", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
19536 );
19537}
19538
19539#endif /* WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER || defined(HAVE_AES_ECB) */
19540#ifdef HAVE_AES_CBC
19541XALIGNED(4) static const word8 L_AES_ARM32_cbc_td4[] = {
19542 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38,
19543 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
19544 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
19545 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
19546 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d,
19547 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
19548 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2,
19549 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
19550 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
19551 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
19552 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda,
19553 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
19554 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a,
19555 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
19556 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
19557 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
19558 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea,
19559 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
19560 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85,
19561 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
19562 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
19563 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
19564 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20,
19565 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
19566 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31,
19567 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
19568 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
19569 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
19570 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0,
19571 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
19572 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26,
19573 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d,
19574};
19575
19576void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p,
19577 unsigned long len_p, const unsigned char* ks_p, int nr_p,
19578 unsigned char* iv_p);
19579#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
19580WC_OMIT_FRAME_POINTER void AES_CBC_decrypt(const unsigned char* in_p,
19581 unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
19582 int nr_p, unsigned char* iv_p)
19583#else
19584WC_OMIT_FRAME_POINTER void AES_CBC_decrypt(const unsigned char* in,
19585 unsigned char* out, unsigned long len, const unsigned char* ks, int nr,
19586 unsigned char* iv)
19587#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
19588{
19589#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
19590 register const unsigned char* in __asm__ ("r0") =
19591 (const unsigned char*)in_p;
19592 register unsigned char* out __asm__ ("r1") = (unsigned char*)out_p;
19593 register unsigned long len __asm__ ("r2") = (unsigned long)len_p;
19594 register const unsigned char* ks __asm__ ("r3") =
19595 (const unsigned char*)ks_p;
19596 register int nr __asm__ ("r12") = (int)nr_p;
19597 register unsigned char* iv __asm__ ("lr") = (unsigned char*)iv_p;
19598 register word32* L_AES_ARM32_td_ecb_c __asm__ ("r4") =
19599 (word32*)L_AES_ARM32_td_ecb;
19600 register word8* L_AES_ARM32_cbc_td4_c __asm__ ("r5") =
19601 (word8*)&L_AES_ARM32_cbc_td4;
19602#else
19603 register word32* L_AES_ARM32_td_ecb_c = (word32*)L_AES_ARM32_td_ecb;
19604 register word8* L_AES_ARM32_cbc_td4_c = (word8*)&L_AES_ARM32_cbc_td4;
19605#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
19606
19607 __asm__ __volatile__ (
19608 "push {%[L_AES_ARM32_td_ecb], %[L_AES_ARM32_cbc_td4]}\n\t"
19609 "push {%[nr], %[iv]}\n\t"
19610 "mov lr, %[in]\n\t"
19611 "ldr r0, [sp, #8]\n\t"
19612 "mov r12, %[len]\n\t"
19613 "mov r2, %[L_AES_ARM32_cbc_td4]\n\t"
19614 "ldr r8, [sp]\n\t"
19615 "ldr r4, [sp, #4]\n\t"
19616 "push {%[ks]-r4}\n\t"
19617 "cmp r8, #10\n\t"
19618 "beq L_AES_CBC_decrypt_loop_block_128_%=\n\t"
19619 "cmp r8, #12\n\t"
19620 "beq L_AES_CBC_decrypt_loop_block_192_%=\n\t"
19621 "\n"
19622 "L_AES_CBC_decrypt_loop_block_256_%=:\n\t"
19623 "push {r1, r12, lr}\n\t"
19624 "ldr r4, [lr]\n\t"
19625 "ldr r5, [lr, #4]\n\t"
19626 "ldr r6, [lr, #8]\n\t"
19627 "ldr r7, [lr, #12]\n\t"
19628 "ldr lr, [sp, #16]\n\t"
19629#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19630 "str r4, [lr, #16]\n\t"
19631 "str r5, [lr, #20]\n\t"
19632#else
19633 "strd r4, r5, [lr, #16]\n\t"
19634#endif
19635#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19636 "str r6, [lr, #24]\n\t"
19637 "str r7, [lr, #28]\n\t"
19638#else
19639 "strd r6, r7, [lr, #24]\n\t"
19640#endif
19641#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19642 "eor r8, r4, r4, ror #16\n\t"
19643 "eor r9, r5, r5, ror #16\n\t"
19644 "eor r10, r6, r6, ror #16\n\t"
19645 "eor r11, r7, r7, ror #16\n\t"
19646 "bic r8, r8, #0xff0000\n\t"
19647 "bic r9, r9, #0xff0000\n\t"
19648 "bic r10, r10, #0xff0000\n\t"
19649 "bic r11, r11, #0xff0000\n\t"
19650 "ror r4, r4, #8\n\t"
19651 "ror r5, r5, #8\n\t"
19652 "ror r6, r6, #8\n\t"
19653 "ror r7, r7, #8\n\t"
19654 "eor r4, r4, r8, lsr #8\n\t"
19655 "eor r5, r5, r9, lsr #8\n\t"
19656 "eor r6, r6, r10, lsr #8\n\t"
19657 "eor r7, r7, r11, lsr #8\n\t"
19658#else
19659 "rev r4, r4\n\t"
19660 "rev r5, r5\n\t"
19661 "rev r6, r6\n\t"
19662 "rev r7, r7\n\t"
19663#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
19664 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
19665 /* Round: 0 - XOR in key schedule */
19666 "eor r4, r4, r8\n\t"
19667 "eor r5, r5, r9\n\t"
19668 "eor r6, r6, r10\n\t"
19669 "eor r7, r7, r11\n\t"
19670 "mov r1, #6\n\t"
19671#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
19672 "bl AES_decrypt_block\n\t"
19673#else
19674 "\n"
19675 "L_AES_CBC_decrypt_block_nr_256_odd_%=:\n\t"
19676#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19677#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19678 "lsl r8, r7, #8\n\t"
19679 "lsr r8, r8, #24\n\t"
19680#else
19681 "uxtb r8, r7, ror #16\n\t"
19682#endif
19683#else
19684 "ubfx r8, r7, #16, #8\n\t"
19685#endif
19686 "lsr r11, r4, #24\n\t"
19687#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19688#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19689 "lsl r12, r6, #16\n\t"
19690 "lsr r12, r12, #24\n\t"
19691#else
19692 "uxtb r12, r6, ror #8\n\t"
19693#endif
19694#else
19695 "ubfx r12, r6, #8, #8\n\t"
19696#endif
19697#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19698#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19699 "lsl lr, r5, #24\n\t"
19700 "lsr lr, lr, #24\n\t"
19701#else
19702 "uxtb lr, r5\n\t"
19703#endif
19704#else
19705 "ubfx lr, r5, #0, #8\n\t"
19706#endif
19707 "ldr r8, [r0, r8, lsl #2]\n\t"
19708 "ldr r11, [r0, r11, lsl #2]\n\t"
19709 "ldr r12, [r0, r12, lsl #2]\n\t"
19710 "ldr lr, [r0, lr, lsl #2]\n\t"
19711#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19713 "lsl r9, r4, #8\n\t"
19714 "lsr r9, r9, #24\n\t"
19715#else
19716 "uxtb r9, r4, ror #16\n\t"
19717#endif
19718#else
19719 "ubfx r9, r4, #16, #8\n\t"
19720#endif
19721 "eor r8, r8, r11, ror #24\n\t"
19722 "lsr r11, r5, #24\n\t"
19723 "eor r8, r8, r12, ror #8\n\t"
19724#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19725#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19726 "lsl r12, r7, #16\n\t"
19727 "lsr r12, r12, #24\n\t"
19728#else
19729 "uxtb r12, r7, ror #8\n\t"
19730#endif
19731#else
19732 "ubfx r12, r7, #8, #8\n\t"
19733#endif
19734 "eor r8, r8, lr, ror #16\n\t"
19735#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19736#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19737 "lsl lr, r6, #24\n\t"
19738 "lsr lr, lr, #24\n\t"
19739#else
19740 "uxtb lr, r6\n\t"
19741#endif
19742#else
19743 "ubfx lr, r6, #0, #8\n\t"
19744#endif
19745 "ldr r9, [r0, r9, lsl #2]\n\t"
19746 "ldr r11, [r0, r11, lsl #2]\n\t"
19747 "ldr r12, [r0, r12, lsl #2]\n\t"
19748 "ldr lr, [r0, lr, lsl #2]\n\t"
19749#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19750#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19751 "lsl r10, r5, #8\n\t"
19752 "lsr r10, r10, #24\n\t"
19753#else
19754 "uxtb r10, r5, ror #16\n\t"
19755#endif
19756#else
19757 "ubfx r10, r5, #16, #8\n\t"
19758#endif
19759 "eor r9, r9, r11, ror #24\n\t"
19760 "lsr r11, r6, #24\n\t"
19761 "eor r9, r9, r12, ror #8\n\t"
19762#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19763#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19764 "lsl r12, r4, #16\n\t"
19765 "lsr r12, r12, #24\n\t"
19766#else
19767 "uxtb r12, r4, ror #8\n\t"
19768#endif
19769#else
19770 "ubfx r12, r4, #8, #8\n\t"
19771#endif
19772 "eor r9, r9, lr, ror #16\n\t"
19773#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19774#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19775 "lsl lr, r7, #24\n\t"
19776 "lsr lr, lr, #24\n\t"
19777#else
19778 "uxtb lr, r7\n\t"
19779#endif
19780#else
19781 "ubfx lr, r7, #0, #8\n\t"
19782#endif
19783 "ldr r10, [r0, r10, lsl #2]\n\t"
19784 "ldr r11, [r0, r11, lsl #2]\n\t"
19785 "ldr r12, [r0, r12, lsl #2]\n\t"
19786 "ldr lr, [r0, lr, lsl #2]\n\t"
19787#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19788#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19789 "lsl r4, r4, #24\n\t"
19790 "lsr r4, r4, #24\n\t"
19791#else
19792 "uxtb r4, r4\n\t"
19793#endif
19794#else
19795 "ubfx r4, r4, #0, #8\n\t"
19796#endif
19797 "eor r10, r10, r11, ror #24\n\t"
19798#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19799#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19800 "lsl r11, r6, #8\n\t"
19801 "lsr r11, r11, #24\n\t"
19802#else
19803 "uxtb r11, r6, ror #16\n\t"
19804#endif
19805#else
19806 "ubfx r11, r6, #16, #8\n\t"
19807#endif
19808 "eor r10, r10, r12, ror #8\n\t"
19809 "lsr r12, r7, #24\n\t"
19810 "eor r10, r10, lr, ror #16\n\t"
19811#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19812#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19813 "lsl lr, r5, #16\n\t"
19814 "lsr lr, lr, #24\n\t"
19815#else
19816 "uxtb lr, r5, ror #8\n\t"
19817#endif
19818#else
19819 "ubfx lr, r5, #8, #8\n\t"
19820#endif
19821 "ldr r4, [r0, r4, lsl #2]\n\t"
19822 "ldr r12, [r0, r12, lsl #2]\n\t"
19823 "ldr r11, [r0, r11, lsl #2]\n\t"
19824 "ldr lr, [r0, lr, lsl #2]\n\t"
19825 "eor r12, r12, r4, ror #24\n\t"
19826 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
19827 "eor r11, r11, lr, ror #8\n\t"
19828 "eor r11, r11, r12, ror #24\n\t"
19829 /* XOR in Key Schedule */
19830 "eor r8, r8, r4\n\t"
19831 "eor r9, r9, r5\n\t"
19832 "eor r10, r10, r6\n\t"
19833 "eor r11, r11, r7\n\t"
19834#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19835#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19836 "lsl r4, r11, #8\n\t"
19837 "lsr r4, r4, #24\n\t"
19838#else
19839 "uxtb r4, r11, ror #16\n\t"
19840#endif
19841#else
19842 "ubfx r4, r11, #16, #8\n\t"
19843#endif
19844 "lsr r7, r8, #24\n\t"
19845#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19846#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19847 "lsl r12, r10, #16\n\t"
19848 "lsr r12, r12, #24\n\t"
19849#else
19850 "uxtb r12, r10, ror #8\n\t"
19851#endif
19852#else
19853 "ubfx r12, r10, #8, #8\n\t"
19854#endif
19855#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19856#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19857 "lsl lr, r9, #24\n\t"
19858 "lsr lr, lr, #24\n\t"
19859#else
19860 "uxtb lr, r9\n\t"
19861#endif
19862#else
19863 "ubfx lr, r9, #0, #8\n\t"
19864#endif
19865 "ldr r4, [r0, r4, lsl #2]\n\t"
19866 "ldr r7, [r0, r7, lsl #2]\n\t"
19867 "ldr r12, [r0, r12, lsl #2]\n\t"
19868 "ldr lr, [r0, lr, lsl #2]\n\t"
19869#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19871 "lsl r5, r8, #8\n\t"
19872 "lsr r5, r5, #24\n\t"
19873#else
19874 "uxtb r5, r8, ror #16\n\t"
19875#endif
19876#else
19877 "ubfx r5, r8, #16, #8\n\t"
19878#endif
19879 "eor r4, r4, r7, ror #24\n\t"
19880 "lsr r7, r9, #24\n\t"
19881 "eor r4, r4, r12, ror #8\n\t"
19882#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19883#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19884 "lsl r12, r11, #16\n\t"
19885 "lsr r12, r12, #24\n\t"
19886#else
19887 "uxtb r12, r11, ror #8\n\t"
19888#endif
19889#else
19890 "ubfx r12, r11, #8, #8\n\t"
19891#endif
19892 "eor r4, r4, lr, ror #16\n\t"
19893#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19894#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19895 "lsl lr, r10, #24\n\t"
19896 "lsr lr, lr, #24\n\t"
19897#else
19898 "uxtb lr, r10\n\t"
19899#endif
19900#else
19901 "ubfx lr, r10, #0, #8\n\t"
19902#endif
19903 "ldr r5, [r0, r5, lsl #2]\n\t"
19904 "ldr r7, [r0, r7, lsl #2]\n\t"
19905 "ldr r12, [r0, r12, lsl #2]\n\t"
19906 "ldr lr, [r0, lr, lsl #2]\n\t"
19907#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19908#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19909 "lsl r6, r9, #8\n\t"
19910 "lsr r6, r6, #24\n\t"
19911#else
19912 "uxtb r6, r9, ror #16\n\t"
19913#endif
19914#else
19915 "ubfx r6, r9, #16, #8\n\t"
19916#endif
19917 "eor r5, r5, r7, ror #24\n\t"
19918 "lsr r7, r10, #24\n\t"
19919 "eor r5, r5, r12, ror #8\n\t"
19920#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19921#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19922 "lsl r12, r8, #16\n\t"
19923 "lsr r12, r12, #24\n\t"
19924#else
19925 "uxtb r12, r8, ror #8\n\t"
19926#endif
19927#else
19928 "ubfx r12, r8, #8, #8\n\t"
19929#endif
19930 "eor r5, r5, lr, ror #16\n\t"
19931#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19932#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19933 "lsl lr, r11, #24\n\t"
19934 "lsr lr, lr, #24\n\t"
19935#else
19936 "uxtb lr, r11\n\t"
19937#endif
19938#else
19939 "ubfx lr, r11, #0, #8\n\t"
19940#endif
19941 "ldr r6, [r0, r6, lsl #2]\n\t"
19942 "ldr r7, [r0, r7, lsl #2]\n\t"
19943 "ldr r12, [r0, r12, lsl #2]\n\t"
19944 "ldr lr, [r0, lr, lsl #2]\n\t"
19945#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19946#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19947 "lsl r8, r8, #24\n\t"
19948 "lsr r8, r8, #24\n\t"
19949#else
19950 "uxtb r8, r8\n\t"
19951#endif
19952#else
19953 "ubfx r8, r8, #0, #8\n\t"
19954#endif
19955 "eor r6, r6, r7, ror #24\n\t"
19956#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19957#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19958 "lsl r7, r10, #8\n\t"
19959 "lsr r7, r7, #24\n\t"
19960#else
19961 "uxtb r7, r10, ror #16\n\t"
19962#endif
19963#else
19964 "ubfx r7, r10, #16, #8\n\t"
19965#endif
19966 "eor r6, r6, r12, ror #8\n\t"
19967 "lsr r12, r11, #24\n\t"
19968 "eor r6, r6, lr, ror #16\n\t"
19969#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19970#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19971 "lsl lr, r9, #16\n\t"
19972 "lsr lr, lr, #24\n\t"
19973#else
19974 "uxtb lr, r9, ror #8\n\t"
19975#endif
19976#else
19977 "ubfx lr, r9, #8, #8\n\t"
19978#endif
19979 "ldr r8, [r0, r8, lsl #2]\n\t"
19980 "ldr r12, [r0, r12, lsl #2]\n\t"
19981 "ldr r7, [r0, r7, lsl #2]\n\t"
19982 "ldr lr, [r0, lr, lsl #2]\n\t"
19983 "eor r12, r12, r8, ror #24\n\t"
19984 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
19985 "eor r7, r7, lr, ror #8\n\t"
19986 "eor r7, r7, r12, ror #24\n\t"
19987 /* XOR in Key Schedule */
19988 "eor r4, r4, r8\n\t"
19989 "eor r5, r5, r9\n\t"
19990 "eor r6, r6, r10\n\t"
19991 "eor r7, r7, r11\n\t"
19992 "subs r1, r1, #1\n\t"
19993 "bne L_AES_CBC_decrypt_block_nr_256_odd_%=\n\t"
19994#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
19995#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
19996 "lsl r8, r7, #8\n\t"
19997 "lsr r8, r8, #24\n\t"
19998#else
19999 "uxtb r8, r7, ror #16\n\t"
20000#endif
20001#else
20002 "ubfx r8, r7, #16, #8\n\t"
20003#endif
20004 "lsr r11, r4, #24\n\t"
20005#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20006#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20007 "lsl r12, r6, #16\n\t"
20008 "lsr r12, r12, #24\n\t"
20009#else
20010 "uxtb r12, r6, ror #8\n\t"
20011#endif
20012#else
20013 "ubfx r12, r6, #8, #8\n\t"
20014#endif
20015#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20016#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20017 "lsl lr, r5, #24\n\t"
20018 "lsr lr, lr, #24\n\t"
20019#else
20020 "uxtb lr, r5\n\t"
20021#endif
20022#else
20023 "ubfx lr, r5, #0, #8\n\t"
20024#endif
20025 "ldr r8, [r0, r8, lsl #2]\n\t"
20026 "ldr r11, [r0, r11, lsl #2]\n\t"
20027 "ldr r12, [r0, r12, lsl #2]\n\t"
20028 "ldr lr, [r0, lr, lsl #2]\n\t"
20029#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20030#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20031 "lsl r9, r4, #8\n\t"
20032 "lsr r9, r9, #24\n\t"
20033#else
20034 "uxtb r9, r4, ror #16\n\t"
20035#endif
20036#else
20037 "ubfx r9, r4, #16, #8\n\t"
20038#endif
20039 "eor r8, r8, r11, ror #24\n\t"
20040 "lsr r11, r5, #24\n\t"
20041 "eor r8, r8, r12, ror #8\n\t"
20042#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20043#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20044 "lsl r12, r7, #16\n\t"
20045 "lsr r12, r12, #24\n\t"
20046#else
20047 "uxtb r12, r7, ror #8\n\t"
20048#endif
20049#else
20050 "ubfx r12, r7, #8, #8\n\t"
20051#endif
20052 "eor r8, r8, lr, ror #16\n\t"
20053#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20054#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20055 "lsl lr, r6, #24\n\t"
20056 "lsr lr, lr, #24\n\t"
20057#else
20058 "uxtb lr, r6\n\t"
20059#endif
20060#else
20061 "ubfx lr, r6, #0, #8\n\t"
20062#endif
20063 "ldr r9, [r0, r9, lsl #2]\n\t"
20064 "ldr r11, [r0, r11, lsl #2]\n\t"
20065 "ldr r12, [r0, r12, lsl #2]\n\t"
20066 "ldr lr, [r0, lr, lsl #2]\n\t"
20067#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20068#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20069 "lsl r10, r5, #8\n\t"
20070 "lsr r10, r10, #24\n\t"
20071#else
20072 "uxtb r10, r5, ror #16\n\t"
20073#endif
20074#else
20075 "ubfx r10, r5, #16, #8\n\t"
20076#endif
20077 "eor r9, r9, r11, ror #24\n\t"
20078 "lsr r11, r6, #24\n\t"
20079 "eor r9, r9, r12, ror #8\n\t"
20080#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20081#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20082 "lsl r12, r4, #16\n\t"
20083 "lsr r12, r12, #24\n\t"
20084#else
20085 "uxtb r12, r4, ror #8\n\t"
20086#endif
20087#else
20088 "ubfx r12, r4, #8, #8\n\t"
20089#endif
20090 "eor r9, r9, lr, ror #16\n\t"
20091#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20092#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20093 "lsl lr, r7, #24\n\t"
20094 "lsr lr, lr, #24\n\t"
20095#else
20096 "uxtb lr, r7\n\t"
20097#endif
20098#else
20099 "ubfx lr, r7, #0, #8\n\t"
20100#endif
20101 "ldr r10, [r0, r10, lsl #2]\n\t"
20102 "ldr r11, [r0, r11, lsl #2]\n\t"
20103 "ldr r12, [r0, r12, lsl #2]\n\t"
20104 "ldr lr, [r0, lr, lsl #2]\n\t"
20105#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20107 "lsl r4, r4, #24\n\t"
20108 "lsr r4, r4, #24\n\t"
20109#else
20110 "uxtb r4, r4\n\t"
20111#endif
20112#else
20113 "ubfx r4, r4, #0, #8\n\t"
20114#endif
20115 "eor r10, r10, r11, ror #24\n\t"
20116#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20117#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20118 "lsl r11, r6, #8\n\t"
20119 "lsr r11, r11, #24\n\t"
20120#else
20121 "uxtb r11, r6, ror #16\n\t"
20122#endif
20123#else
20124 "ubfx r11, r6, #16, #8\n\t"
20125#endif
20126 "eor r10, r10, r12, ror #8\n\t"
20127 "lsr r12, r7, #24\n\t"
20128 "eor r10, r10, lr, ror #16\n\t"
20129#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20130#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20131 "lsl lr, r5, #16\n\t"
20132 "lsr lr, lr, #24\n\t"
20133#else
20134 "uxtb lr, r5, ror #8\n\t"
20135#endif
20136#else
20137 "ubfx lr, r5, #8, #8\n\t"
20138#endif
20139 "ldr r4, [r0, r4, lsl #2]\n\t"
20140 "ldr r12, [r0, r12, lsl #2]\n\t"
20141 "ldr r11, [r0, r11, lsl #2]\n\t"
20142 "ldr lr, [r0, lr, lsl #2]\n\t"
20143 "eor r12, r12, r4, ror #24\n\t"
20144 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
20145 "eor r11, r11, lr, ror #8\n\t"
20146 "eor r11, r11, r12, ror #24\n\t"
20147 /* XOR in Key Schedule */
20148 "eor r8, r8, r4\n\t"
20149 "eor r9, r9, r5\n\t"
20150 "eor r10, r10, r6\n\t"
20151 "eor r11, r11, r7\n\t"
20152#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20153#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20154 "lsl r4, r9, #24\n\t"
20155 "lsr r4, r4, #24\n\t"
20156#else
20157 "uxtb r4, r9\n\t"
20158#endif
20159#else
20160 "ubfx r4, r9, #0, #8\n\t"
20161#endif
20162#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20164 "lsl r7, r10, #16\n\t"
20165 "lsr r7, r7, #24\n\t"
20166#else
20167 "uxtb r7, r10, ror #8\n\t"
20168#endif
20169#else
20170 "ubfx r7, r10, #8, #8\n\t"
20171#endif
20172#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20173#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20174 "lsl r12, r11, #8\n\t"
20175 "lsr r12, r12, #24\n\t"
20176#else
20177 "uxtb r12, r11, ror #16\n\t"
20178#endif
20179#else
20180 "ubfx r12, r11, #16, #8\n\t"
20181#endif
20182 "lsr lr, r8, #24\n\t"
20183 "ldrb r4, [r2, r4]\n\t"
20184 "ldrb r7, [r2, r7]\n\t"
20185 "ldrb r12, [r2, r12]\n\t"
20186 "ldrb lr, [r2, lr]\n\t"
20187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20188#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20189 "lsl r5, r10, #24\n\t"
20190 "lsr r5, r5, #24\n\t"
20191#else
20192 "uxtb r5, r10\n\t"
20193#endif
20194#else
20195 "ubfx r5, r10, #0, #8\n\t"
20196#endif
20197 "eor r4, r4, r7, lsl #8\n\t"
20198#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20200 "lsl r7, r11, #16\n\t"
20201 "lsr r7, r7, #24\n\t"
20202#else
20203 "uxtb r7, r11, ror #8\n\t"
20204#endif
20205#else
20206 "ubfx r7, r11, #8, #8\n\t"
20207#endif
20208 "eor r4, r4, r12, lsl #16\n\t"
20209#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20210#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20211 "lsl r12, r8, #8\n\t"
20212 "lsr r12, r12, #24\n\t"
20213#else
20214 "uxtb r12, r8, ror #16\n\t"
20215#endif
20216#else
20217 "ubfx r12, r8, #16, #8\n\t"
20218#endif
20219 "eor r4, r4, lr, lsl #24\n\t"
20220 "lsr lr, r9, #24\n\t"
20221 "ldrb r7, [r2, r7]\n\t"
20222 "ldrb lr, [r2, lr]\n\t"
20223 "ldrb r5, [r2, r5]\n\t"
20224 "ldrb r12, [r2, r12]\n\t"
20225#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20226#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20227 "lsl r6, r11, #24\n\t"
20228 "lsr r6, r6, #24\n\t"
20229#else
20230 "uxtb r6, r11\n\t"
20231#endif
20232#else
20233 "ubfx r6, r11, #0, #8\n\t"
20234#endif
20235 "eor r5, r5, r7, lsl #8\n\t"
20236#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20237#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20238 "lsl r7, r8, #16\n\t"
20239 "lsr r7, r7, #24\n\t"
20240#else
20241 "uxtb r7, r8, ror #8\n\t"
20242#endif
20243#else
20244 "ubfx r7, r8, #8, #8\n\t"
20245#endif
20246 "eor r5, r5, r12, lsl #16\n\t"
20247#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20248#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20249 "lsl r12, r9, #8\n\t"
20250 "lsr r12, r12, #24\n\t"
20251#else
20252 "uxtb r12, r9, ror #16\n\t"
20253#endif
20254#else
20255 "ubfx r12, r9, #16, #8\n\t"
20256#endif
20257 "eor r5, r5, lr, lsl #24\n\t"
20258 "lsr lr, r10, #24\n\t"
20259 "ldrb r7, [r2, r7]\n\t"
20260 "ldrb lr, [r2, lr]\n\t"
20261 "ldrb r6, [r2, r6]\n\t"
20262 "ldrb r12, [r2, r12]\n\t"
20263 "lsr r11, r11, #24\n\t"
20264 "eor r6, r6, r7, lsl #8\n\t"
20265#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20266#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20267 "lsl r7, r8, #24\n\t"
20268 "lsr r7, r7, #24\n\t"
20269#else
20270 "uxtb r7, r8\n\t"
20271#endif
20272#else
20273 "ubfx r7, r8, #0, #8\n\t"
20274#endif
20275 "eor r6, r6, r12, lsl #16\n\t"
20276#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20277#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20278 "lsl r12, r9, #16\n\t"
20279 "lsr r12, r12, #24\n\t"
20280#else
20281 "uxtb r12, r9, ror #8\n\t"
20282#endif
20283#else
20284 "ubfx r12, r9, #8, #8\n\t"
20285#endif
20286 "eor r6, r6, lr, lsl #24\n\t"
20287#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20288#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20289 "lsl lr, r10, #8\n\t"
20290 "lsr lr, lr, #24\n\t"
20291#else
20292 "uxtb lr, r10, ror #16\n\t"
20293#endif
20294#else
20295 "ubfx lr, r10, #16, #8\n\t"
20296#endif
20297 "ldrb r11, [r2, r11]\n\t"
20298 "ldrb r12, [r2, r12]\n\t"
20299 "ldrb r7, [r2, r7]\n\t"
20300 "ldrb lr, [r2, lr]\n\t"
20301 "eor r12, r12, r11, lsl #16\n\t"
20302 "ldm %[ks], {r8, r9, r10, r11}\n\t"
20303 "eor r7, r7, r12, lsl #8\n\t"
20304 "eor r7, r7, lr, lsl #16\n\t"
20305 /* XOR in Key Schedule */
20306 "eor r4, r4, r8\n\t"
20307 "eor r5, r5, r9\n\t"
20308 "eor r6, r6, r10\n\t"
20309 "eor r7, r7, r11\n\t"
20310#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
20311 "ldr lr, [sp, #16]\n\t"
20312#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20313 "eor r8, r4, r4, ror #16\n\t"
20314 "eor r9, r5, r5, ror #16\n\t"
20315 "eor r10, r6, r6, ror #16\n\t"
20316 "eor r11, r7, r7, ror #16\n\t"
20317 "bic r8, r8, #0xff0000\n\t"
20318 "bic r9, r9, #0xff0000\n\t"
20319 "bic r10, r10, #0xff0000\n\t"
20320 "bic r11, r11, #0xff0000\n\t"
20321 "ror r4, r4, #8\n\t"
20322 "ror r5, r5, #8\n\t"
20323 "ror r6, r6, #8\n\t"
20324 "ror r7, r7, #8\n\t"
20325 "eor r4, r4, r8, lsr #8\n\t"
20326 "eor r5, r5, r9, lsr #8\n\t"
20327 "eor r6, r6, r10, lsr #8\n\t"
20328 "eor r7, r7, r11, lsr #8\n\t"
20329#else
20330 "rev r4, r4\n\t"
20331 "rev r5, r5\n\t"
20332 "rev r6, r6\n\t"
20333 "rev r7, r7\n\t"
20334#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
20335 "ldm lr, {r8, r9, r10, r11}\n\t"
20336 "pop {r1, r12, lr}\n\t"
20337 "ldr %[ks], [sp]\n\t"
20338 "eor r4, r4, r8\n\t"
20339 "eor r5, r5, r9\n\t"
20340 "eor r6, r6, r10\n\t"
20341 "eor r7, r7, r11\n\t"
20342 "str r4, [%[out]]\n\t"
20343 "str r5, [%[out], #4]\n\t"
20344 "str r6, [%[out], #8]\n\t"
20345 "str r7, [%[out], #12]\n\t"
20346 "subs r12, r12, #16\n\t"
20347 "add lr, lr, #16\n\t"
20348 "add %[out], %[out], #16\n\t"
20349 "beq L_AES_CBC_decrypt_end_odd_%=\n\t"
20350 "push {r1, r12, lr}\n\t"
20351 "ldr r4, [lr]\n\t"
20352 "ldr r5, [lr, #4]\n\t"
20353 "ldr r6, [lr, #8]\n\t"
20354 "ldr r7, [lr, #12]\n\t"
20355 "ldr lr, [sp, #16]\n\t"
20356#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20357 "stm lr, {r4, r5}\n\t"
20358#else
20359 "strd r4, r5, [lr]\n\t"
20360#endif
20361#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20362 "str r6, [lr, #8]\n\t"
20363 "str r7, [lr, #12]\n\t"
20364#else
20365 "strd r6, r7, [lr, #8]\n\t"
20366#endif
20367#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20368 "eor r8, r4, r4, ror #16\n\t"
20369 "eor r9, r5, r5, ror #16\n\t"
20370 "eor r10, r6, r6, ror #16\n\t"
20371 "eor r11, r7, r7, ror #16\n\t"
20372 "bic r8, r8, #0xff0000\n\t"
20373 "bic r9, r9, #0xff0000\n\t"
20374 "bic r10, r10, #0xff0000\n\t"
20375 "bic r11, r11, #0xff0000\n\t"
20376 "ror r4, r4, #8\n\t"
20377 "ror r5, r5, #8\n\t"
20378 "ror r6, r6, #8\n\t"
20379 "ror r7, r7, #8\n\t"
20380 "eor r4, r4, r8, lsr #8\n\t"
20381 "eor r5, r5, r9, lsr #8\n\t"
20382 "eor r6, r6, r10, lsr #8\n\t"
20383 "eor r7, r7, r11, lsr #8\n\t"
20384#else
20385 "rev r4, r4\n\t"
20386 "rev r5, r5\n\t"
20387 "rev r6, r6\n\t"
20388 "rev r7, r7\n\t"
20389#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
20390 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
20391 /* Round: 0 - XOR in key schedule */
20392 "eor r4, r4, r8\n\t"
20393 "eor r5, r5, r9\n\t"
20394 "eor r6, r6, r10\n\t"
20395 "eor r7, r7, r11\n\t"
20396 "mov r1, #6\n\t"
20397#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
20398 "bl AES_decrypt_block\n\t"
20399#else
20400 "\n"
20401 "L_AES_CBC_decrypt_block_nr_256_even_%=:\n\t"
20402#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20403#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20404 "lsl r8, r7, #8\n\t"
20405 "lsr r8, r8, #24\n\t"
20406#else
20407 "uxtb r8, r7, ror #16\n\t"
20408#endif
20409#else
20410 "ubfx r8, r7, #16, #8\n\t"
20411#endif
20412 "lsr r11, r4, #24\n\t"
20413#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20414#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20415 "lsl r12, r6, #16\n\t"
20416 "lsr r12, r12, #24\n\t"
20417#else
20418 "uxtb r12, r6, ror #8\n\t"
20419#endif
20420#else
20421 "ubfx r12, r6, #8, #8\n\t"
20422#endif
20423#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20425 "lsl lr, r5, #24\n\t"
20426 "lsr lr, lr, #24\n\t"
20427#else
20428 "uxtb lr, r5\n\t"
20429#endif
20430#else
20431 "ubfx lr, r5, #0, #8\n\t"
20432#endif
20433 "ldr r8, [r0, r8, lsl #2]\n\t"
20434 "ldr r11, [r0, r11, lsl #2]\n\t"
20435 "ldr r12, [r0, r12, lsl #2]\n\t"
20436 "ldr lr, [r0, lr, lsl #2]\n\t"
20437#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20438#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20439 "lsl r9, r4, #8\n\t"
20440 "lsr r9, r9, #24\n\t"
20441#else
20442 "uxtb r9, r4, ror #16\n\t"
20443#endif
20444#else
20445 "ubfx r9, r4, #16, #8\n\t"
20446#endif
20447 "eor r8, r8, r11, ror #24\n\t"
20448 "lsr r11, r5, #24\n\t"
20449 "eor r8, r8, r12, ror #8\n\t"
20450#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20451#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20452 "lsl r12, r7, #16\n\t"
20453 "lsr r12, r12, #24\n\t"
20454#else
20455 "uxtb r12, r7, ror #8\n\t"
20456#endif
20457#else
20458 "ubfx r12, r7, #8, #8\n\t"
20459#endif
20460 "eor r8, r8, lr, ror #16\n\t"
20461#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20462#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20463 "lsl lr, r6, #24\n\t"
20464 "lsr lr, lr, #24\n\t"
20465#else
20466 "uxtb lr, r6\n\t"
20467#endif
20468#else
20469 "ubfx lr, r6, #0, #8\n\t"
20470#endif
20471 "ldr r9, [r0, r9, lsl #2]\n\t"
20472 "ldr r11, [r0, r11, lsl #2]\n\t"
20473 "ldr r12, [r0, r12, lsl #2]\n\t"
20474 "ldr lr, [r0, lr, lsl #2]\n\t"
20475#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20476#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20477 "lsl r10, r5, #8\n\t"
20478 "lsr r10, r10, #24\n\t"
20479#else
20480 "uxtb r10, r5, ror #16\n\t"
20481#endif
20482#else
20483 "ubfx r10, r5, #16, #8\n\t"
20484#endif
20485 "eor r9, r9, r11, ror #24\n\t"
20486 "lsr r11, r6, #24\n\t"
20487 "eor r9, r9, r12, ror #8\n\t"
20488#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20489#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20490 "lsl r12, r4, #16\n\t"
20491 "lsr r12, r12, #24\n\t"
20492#else
20493 "uxtb r12, r4, ror #8\n\t"
20494#endif
20495#else
20496 "ubfx r12, r4, #8, #8\n\t"
20497#endif
20498 "eor r9, r9, lr, ror #16\n\t"
20499#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20500#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20501 "lsl lr, r7, #24\n\t"
20502 "lsr lr, lr, #24\n\t"
20503#else
20504 "uxtb lr, r7\n\t"
20505#endif
20506#else
20507 "ubfx lr, r7, #0, #8\n\t"
20508#endif
20509 "ldr r10, [r0, r10, lsl #2]\n\t"
20510 "ldr r11, [r0, r11, lsl #2]\n\t"
20511 "ldr r12, [r0, r12, lsl #2]\n\t"
20512 "ldr lr, [r0, lr, lsl #2]\n\t"
20513#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20514#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20515 "lsl r4, r4, #24\n\t"
20516 "lsr r4, r4, #24\n\t"
20517#else
20518 "uxtb r4, r4\n\t"
20519#endif
20520#else
20521 "ubfx r4, r4, #0, #8\n\t"
20522#endif
20523 "eor r10, r10, r11, ror #24\n\t"
20524#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20525#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20526 "lsl r11, r6, #8\n\t"
20527 "lsr r11, r11, #24\n\t"
20528#else
20529 "uxtb r11, r6, ror #16\n\t"
20530#endif
20531#else
20532 "ubfx r11, r6, #16, #8\n\t"
20533#endif
20534 "eor r10, r10, r12, ror #8\n\t"
20535 "lsr r12, r7, #24\n\t"
20536 "eor r10, r10, lr, ror #16\n\t"
20537#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20538#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20539 "lsl lr, r5, #16\n\t"
20540 "lsr lr, lr, #24\n\t"
20541#else
20542 "uxtb lr, r5, ror #8\n\t"
20543#endif
20544#else
20545 "ubfx lr, r5, #8, #8\n\t"
20546#endif
20547 "ldr r4, [r0, r4, lsl #2]\n\t"
20548 "ldr r12, [r0, r12, lsl #2]\n\t"
20549 "ldr r11, [r0, r11, lsl #2]\n\t"
20550 "ldr lr, [r0, lr, lsl #2]\n\t"
20551 "eor r12, r12, r4, ror #24\n\t"
20552 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
20553 "eor r11, r11, lr, ror #8\n\t"
20554 "eor r11, r11, r12, ror #24\n\t"
20555 /* XOR in Key Schedule */
20556 "eor r8, r8, r4\n\t"
20557 "eor r9, r9, r5\n\t"
20558 "eor r10, r10, r6\n\t"
20559 "eor r11, r11, r7\n\t"
20560#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20561#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20562 "lsl r4, r11, #8\n\t"
20563 "lsr r4, r4, #24\n\t"
20564#else
20565 "uxtb r4, r11, ror #16\n\t"
20566#endif
20567#else
20568 "ubfx r4, r11, #16, #8\n\t"
20569#endif
20570 "lsr r7, r8, #24\n\t"
20571#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20572#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20573 "lsl r12, r10, #16\n\t"
20574 "lsr r12, r12, #24\n\t"
20575#else
20576 "uxtb r12, r10, ror #8\n\t"
20577#endif
20578#else
20579 "ubfx r12, r10, #8, #8\n\t"
20580#endif
20581#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20582#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20583 "lsl lr, r9, #24\n\t"
20584 "lsr lr, lr, #24\n\t"
20585#else
20586 "uxtb lr, r9\n\t"
20587#endif
20588#else
20589 "ubfx lr, r9, #0, #8\n\t"
20590#endif
20591 "ldr r4, [r0, r4, lsl #2]\n\t"
20592 "ldr r7, [r0, r7, lsl #2]\n\t"
20593 "ldr r12, [r0, r12, lsl #2]\n\t"
20594 "ldr lr, [r0, lr, lsl #2]\n\t"
20595#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20596#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20597 "lsl r5, r8, #8\n\t"
20598 "lsr r5, r5, #24\n\t"
20599#else
20600 "uxtb r5, r8, ror #16\n\t"
20601#endif
20602#else
20603 "ubfx r5, r8, #16, #8\n\t"
20604#endif
20605 "eor r4, r4, r7, ror #24\n\t"
20606 "lsr r7, r9, #24\n\t"
20607 "eor r4, r4, r12, ror #8\n\t"
20608#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20609#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20610 "lsl r12, r11, #16\n\t"
20611 "lsr r12, r12, #24\n\t"
20612#else
20613 "uxtb r12, r11, ror #8\n\t"
20614#endif
20615#else
20616 "ubfx r12, r11, #8, #8\n\t"
20617#endif
20618 "eor r4, r4, lr, ror #16\n\t"
20619#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20620#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20621 "lsl lr, r10, #24\n\t"
20622 "lsr lr, lr, #24\n\t"
20623#else
20624 "uxtb lr, r10\n\t"
20625#endif
20626#else
20627 "ubfx lr, r10, #0, #8\n\t"
20628#endif
20629 "ldr r5, [r0, r5, lsl #2]\n\t"
20630 "ldr r7, [r0, r7, lsl #2]\n\t"
20631 "ldr r12, [r0, r12, lsl #2]\n\t"
20632 "ldr lr, [r0, lr, lsl #2]\n\t"
20633#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20634#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20635 "lsl r6, r9, #8\n\t"
20636 "lsr r6, r6, #24\n\t"
20637#else
20638 "uxtb r6, r9, ror #16\n\t"
20639#endif
20640#else
20641 "ubfx r6, r9, #16, #8\n\t"
20642#endif
20643 "eor r5, r5, r7, ror #24\n\t"
20644 "lsr r7, r10, #24\n\t"
20645 "eor r5, r5, r12, ror #8\n\t"
20646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20647#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20648 "lsl r12, r8, #16\n\t"
20649 "lsr r12, r12, #24\n\t"
20650#else
20651 "uxtb r12, r8, ror #8\n\t"
20652#endif
20653#else
20654 "ubfx r12, r8, #8, #8\n\t"
20655#endif
20656 "eor r5, r5, lr, ror #16\n\t"
20657#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20658#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20659 "lsl lr, r11, #24\n\t"
20660 "lsr lr, lr, #24\n\t"
20661#else
20662 "uxtb lr, r11\n\t"
20663#endif
20664#else
20665 "ubfx lr, r11, #0, #8\n\t"
20666#endif
20667 "ldr r6, [r0, r6, lsl #2]\n\t"
20668 "ldr r7, [r0, r7, lsl #2]\n\t"
20669 "ldr r12, [r0, r12, lsl #2]\n\t"
20670 "ldr lr, [r0, lr, lsl #2]\n\t"
20671#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20672#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20673 "lsl r8, r8, #24\n\t"
20674 "lsr r8, r8, #24\n\t"
20675#else
20676 "uxtb r8, r8\n\t"
20677#endif
20678#else
20679 "ubfx r8, r8, #0, #8\n\t"
20680#endif
20681 "eor r6, r6, r7, ror #24\n\t"
20682#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20683#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20684 "lsl r7, r10, #8\n\t"
20685 "lsr r7, r7, #24\n\t"
20686#else
20687 "uxtb r7, r10, ror #16\n\t"
20688#endif
20689#else
20690 "ubfx r7, r10, #16, #8\n\t"
20691#endif
20692 "eor r6, r6, r12, ror #8\n\t"
20693 "lsr r12, r11, #24\n\t"
20694 "eor r6, r6, lr, ror #16\n\t"
20695#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20696#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20697 "lsl lr, r9, #16\n\t"
20698 "lsr lr, lr, #24\n\t"
20699#else
20700 "uxtb lr, r9, ror #8\n\t"
20701#endif
20702#else
20703 "ubfx lr, r9, #8, #8\n\t"
20704#endif
20705 "ldr r8, [r0, r8, lsl #2]\n\t"
20706 "ldr r12, [r0, r12, lsl #2]\n\t"
20707 "ldr r7, [r0, r7, lsl #2]\n\t"
20708 "ldr lr, [r0, lr, lsl #2]\n\t"
20709 "eor r12, r12, r8, ror #24\n\t"
20710 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
20711 "eor r7, r7, lr, ror #8\n\t"
20712 "eor r7, r7, r12, ror #24\n\t"
20713 /* XOR in Key Schedule */
20714 "eor r4, r4, r8\n\t"
20715 "eor r5, r5, r9\n\t"
20716 "eor r6, r6, r10\n\t"
20717 "eor r7, r7, r11\n\t"
20718 "subs r1, r1, #1\n\t"
20719 "bne L_AES_CBC_decrypt_block_nr_256_even_%=\n\t"
20720#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20721#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20722 "lsl r8, r7, #8\n\t"
20723 "lsr r8, r8, #24\n\t"
20724#else
20725 "uxtb r8, r7, ror #16\n\t"
20726#endif
20727#else
20728 "ubfx r8, r7, #16, #8\n\t"
20729#endif
20730 "lsr r11, r4, #24\n\t"
20731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20733 "lsl r12, r6, #16\n\t"
20734 "lsr r12, r12, #24\n\t"
20735#else
20736 "uxtb r12, r6, ror #8\n\t"
20737#endif
20738#else
20739 "ubfx r12, r6, #8, #8\n\t"
20740#endif
20741#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20742#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20743 "lsl lr, r5, #24\n\t"
20744 "lsr lr, lr, #24\n\t"
20745#else
20746 "uxtb lr, r5\n\t"
20747#endif
20748#else
20749 "ubfx lr, r5, #0, #8\n\t"
20750#endif
20751 "ldr r8, [r0, r8, lsl #2]\n\t"
20752 "ldr r11, [r0, r11, lsl #2]\n\t"
20753 "ldr r12, [r0, r12, lsl #2]\n\t"
20754 "ldr lr, [r0, lr, lsl #2]\n\t"
20755#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20756#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20757 "lsl r9, r4, #8\n\t"
20758 "lsr r9, r9, #24\n\t"
20759#else
20760 "uxtb r9, r4, ror #16\n\t"
20761#endif
20762#else
20763 "ubfx r9, r4, #16, #8\n\t"
20764#endif
20765 "eor r8, r8, r11, ror #24\n\t"
20766 "lsr r11, r5, #24\n\t"
20767 "eor r8, r8, r12, ror #8\n\t"
20768#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20769#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20770 "lsl r12, r7, #16\n\t"
20771 "lsr r12, r12, #24\n\t"
20772#else
20773 "uxtb r12, r7, ror #8\n\t"
20774#endif
20775#else
20776 "ubfx r12, r7, #8, #8\n\t"
20777#endif
20778 "eor r8, r8, lr, ror #16\n\t"
20779#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20780#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20781 "lsl lr, r6, #24\n\t"
20782 "lsr lr, lr, #24\n\t"
20783#else
20784 "uxtb lr, r6\n\t"
20785#endif
20786#else
20787 "ubfx lr, r6, #0, #8\n\t"
20788#endif
20789 "ldr r9, [r0, r9, lsl #2]\n\t"
20790 "ldr r11, [r0, r11, lsl #2]\n\t"
20791 "ldr r12, [r0, r12, lsl #2]\n\t"
20792 "ldr lr, [r0, lr, lsl #2]\n\t"
20793#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20794#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20795 "lsl r10, r5, #8\n\t"
20796 "lsr r10, r10, #24\n\t"
20797#else
20798 "uxtb r10, r5, ror #16\n\t"
20799#endif
20800#else
20801 "ubfx r10, r5, #16, #8\n\t"
20802#endif
20803 "eor r9, r9, r11, ror #24\n\t"
20804 "lsr r11, r6, #24\n\t"
20805 "eor r9, r9, r12, ror #8\n\t"
20806#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20807#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20808 "lsl r12, r4, #16\n\t"
20809 "lsr r12, r12, #24\n\t"
20810#else
20811 "uxtb r12, r4, ror #8\n\t"
20812#endif
20813#else
20814 "ubfx r12, r4, #8, #8\n\t"
20815#endif
20816 "eor r9, r9, lr, ror #16\n\t"
20817#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20818#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20819 "lsl lr, r7, #24\n\t"
20820 "lsr lr, lr, #24\n\t"
20821#else
20822 "uxtb lr, r7\n\t"
20823#endif
20824#else
20825 "ubfx lr, r7, #0, #8\n\t"
20826#endif
20827 "ldr r10, [r0, r10, lsl #2]\n\t"
20828 "ldr r11, [r0, r11, lsl #2]\n\t"
20829 "ldr r12, [r0, r12, lsl #2]\n\t"
20830 "ldr lr, [r0, lr, lsl #2]\n\t"
20831#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20832#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20833 "lsl r4, r4, #24\n\t"
20834 "lsr r4, r4, #24\n\t"
20835#else
20836 "uxtb r4, r4\n\t"
20837#endif
20838#else
20839 "ubfx r4, r4, #0, #8\n\t"
20840#endif
20841 "eor r10, r10, r11, ror #24\n\t"
20842#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20843#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20844 "lsl r11, r6, #8\n\t"
20845 "lsr r11, r11, #24\n\t"
20846#else
20847 "uxtb r11, r6, ror #16\n\t"
20848#endif
20849#else
20850 "ubfx r11, r6, #16, #8\n\t"
20851#endif
20852 "eor r10, r10, r12, ror #8\n\t"
20853 "lsr r12, r7, #24\n\t"
20854 "eor r10, r10, lr, ror #16\n\t"
20855#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20856#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20857 "lsl lr, r5, #16\n\t"
20858 "lsr lr, lr, #24\n\t"
20859#else
20860 "uxtb lr, r5, ror #8\n\t"
20861#endif
20862#else
20863 "ubfx lr, r5, #8, #8\n\t"
20864#endif
20865 "ldr r4, [r0, r4, lsl #2]\n\t"
20866 "ldr r12, [r0, r12, lsl #2]\n\t"
20867 "ldr r11, [r0, r11, lsl #2]\n\t"
20868 "ldr lr, [r0, lr, lsl #2]\n\t"
20869 "eor r12, r12, r4, ror #24\n\t"
20870 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
20871 "eor r11, r11, lr, ror #8\n\t"
20872 "eor r11, r11, r12, ror #24\n\t"
20873 /* XOR in Key Schedule */
20874 "eor r8, r8, r4\n\t"
20875 "eor r9, r9, r5\n\t"
20876 "eor r10, r10, r6\n\t"
20877 "eor r11, r11, r7\n\t"
20878#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20879#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20880 "lsl r4, r9, #24\n\t"
20881 "lsr r4, r4, #24\n\t"
20882#else
20883 "uxtb r4, r9\n\t"
20884#endif
20885#else
20886 "ubfx r4, r9, #0, #8\n\t"
20887#endif
20888#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20889#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20890 "lsl r7, r10, #16\n\t"
20891 "lsr r7, r7, #24\n\t"
20892#else
20893 "uxtb r7, r10, ror #8\n\t"
20894#endif
20895#else
20896 "ubfx r7, r10, #8, #8\n\t"
20897#endif
20898#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20899#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20900 "lsl r12, r11, #8\n\t"
20901 "lsr r12, r12, #24\n\t"
20902#else
20903 "uxtb r12, r11, ror #16\n\t"
20904#endif
20905#else
20906 "ubfx r12, r11, #16, #8\n\t"
20907#endif
20908 "lsr lr, r8, #24\n\t"
20909 "ldrb r4, [r2, r4]\n\t"
20910 "ldrb r7, [r2, r7]\n\t"
20911 "ldrb r12, [r2, r12]\n\t"
20912 "ldrb lr, [r2, lr]\n\t"
20913#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20914#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20915 "lsl r5, r10, #24\n\t"
20916 "lsr r5, r5, #24\n\t"
20917#else
20918 "uxtb r5, r10\n\t"
20919#endif
20920#else
20921 "ubfx r5, r10, #0, #8\n\t"
20922#endif
20923 "eor r4, r4, r7, lsl #8\n\t"
20924#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20925#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20926 "lsl r7, r11, #16\n\t"
20927 "lsr r7, r7, #24\n\t"
20928#else
20929 "uxtb r7, r11, ror #8\n\t"
20930#endif
20931#else
20932 "ubfx r7, r11, #8, #8\n\t"
20933#endif
20934 "eor r4, r4, r12, lsl #16\n\t"
20935#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20936#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20937 "lsl r12, r8, #8\n\t"
20938 "lsr r12, r12, #24\n\t"
20939#else
20940 "uxtb r12, r8, ror #16\n\t"
20941#endif
20942#else
20943 "ubfx r12, r8, #16, #8\n\t"
20944#endif
20945 "eor r4, r4, lr, lsl #24\n\t"
20946 "lsr lr, r9, #24\n\t"
20947 "ldrb r7, [r2, r7]\n\t"
20948 "ldrb lr, [r2, lr]\n\t"
20949 "ldrb r5, [r2, r5]\n\t"
20950 "ldrb r12, [r2, r12]\n\t"
20951#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20952#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20953 "lsl r6, r11, #24\n\t"
20954 "lsr r6, r6, #24\n\t"
20955#else
20956 "uxtb r6, r11\n\t"
20957#endif
20958#else
20959 "ubfx r6, r11, #0, #8\n\t"
20960#endif
20961 "eor r5, r5, r7, lsl #8\n\t"
20962#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20964 "lsl r7, r8, #16\n\t"
20965 "lsr r7, r7, #24\n\t"
20966#else
20967 "uxtb r7, r8, ror #8\n\t"
20968#endif
20969#else
20970 "ubfx r7, r8, #8, #8\n\t"
20971#endif
20972 "eor r5, r5, r12, lsl #16\n\t"
20973#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20974#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20975 "lsl r12, r9, #8\n\t"
20976 "lsr r12, r12, #24\n\t"
20977#else
20978 "uxtb r12, r9, ror #16\n\t"
20979#endif
20980#else
20981 "ubfx r12, r9, #16, #8\n\t"
20982#endif
20983 "eor r5, r5, lr, lsl #24\n\t"
20984 "lsr lr, r10, #24\n\t"
20985 "ldrb r7, [r2, r7]\n\t"
20986 "ldrb lr, [r2, lr]\n\t"
20987 "ldrb r6, [r2, r6]\n\t"
20988 "ldrb r12, [r2, r12]\n\t"
20989 "lsr r11, r11, #24\n\t"
20990 "eor r6, r6, r7, lsl #8\n\t"
20991#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
20992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
20993 "lsl r7, r8, #24\n\t"
20994 "lsr r7, r7, #24\n\t"
20995#else
20996 "uxtb r7, r8\n\t"
20997#endif
20998#else
20999 "ubfx r7, r8, #0, #8\n\t"
21000#endif
21001 "eor r6, r6, r12, lsl #16\n\t"
21002#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21003#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21004 "lsl r12, r9, #16\n\t"
21005 "lsr r12, r12, #24\n\t"
21006#else
21007 "uxtb r12, r9, ror #8\n\t"
21008#endif
21009#else
21010 "ubfx r12, r9, #8, #8\n\t"
21011#endif
21012 "eor r6, r6, lr, lsl #24\n\t"
21013#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21014#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21015 "lsl lr, r10, #8\n\t"
21016 "lsr lr, lr, #24\n\t"
21017#else
21018 "uxtb lr, r10, ror #16\n\t"
21019#endif
21020#else
21021 "ubfx lr, r10, #16, #8\n\t"
21022#endif
21023 "ldrb r11, [r2, r11]\n\t"
21024 "ldrb r12, [r2, r12]\n\t"
21025 "ldrb r7, [r2, r7]\n\t"
21026 "ldrb lr, [r2, lr]\n\t"
21027 "eor r12, r12, r11, lsl #16\n\t"
21028 "ldm %[ks], {r8, r9, r10, r11}\n\t"
21029 "eor r7, r7, r12, lsl #8\n\t"
21030 "eor r7, r7, lr, lsl #16\n\t"
21031 /* XOR in Key Schedule */
21032 "eor r4, r4, r8\n\t"
21033 "eor r5, r5, r9\n\t"
21034 "eor r6, r6, r10\n\t"
21035 "eor r7, r7, r11\n\t"
21036#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
21037 "ldr lr, [sp, #16]\n\t"
21038#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21039 "eor r8, r4, r4, ror #16\n\t"
21040 "eor r9, r5, r5, ror #16\n\t"
21041 "eor r10, r6, r6, ror #16\n\t"
21042 "eor r11, r7, r7, ror #16\n\t"
21043 "bic r8, r8, #0xff0000\n\t"
21044 "bic r9, r9, #0xff0000\n\t"
21045 "bic r10, r10, #0xff0000\n\t"
21046 "bic r11, r11, #0xff0000\n\t"
21047 "ror r4, r4, #8\n\t"
21048 "ror r5, r5, #8\n\t"
21049 "ror r6, r6, #8\n\t"
21050 "ror r7, r7, #8\n\t"
21051 "eor r4, r4, r8, lsr #8\n\t"
21052 "eor r5, r5, r9, lsr #8\n\t"
21053 "eor r6, r6, r10, lsr #8\n\t"
21054 "eor r7, r7, r11, lsr #8\n\t"
21055#else
21056 "rev r4, r4\n\t"
21057 "rev r5, r5\n\t"
21058 "rev r6, r6\n\t"
21059 "rev r7, r7\n\t"
21060#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
21061#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21062 "ldr r8, [lr, #16]\n\t"
21063 "ldr r9, [lr, #20]\n\t"
21064#else
21065 "ldrd r8, r9, [lr, #16]\n\t"
21066#endif
21067#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21068 "ldr r10, [lr, #24]\n\t"
21069 "ldr r11, [lr, #28]\n\t"
21070#else
21071 "ldrd r10, r11, [lr, #24]\n\t"
21072#endif
21073 "pop {r1, r12, lr}\n\t"
21074 "ldr %[ks], [sp]\n\t"
21075 "eor r4, r4, r8\n\t"
21076 "eor r5, r5, r9\n\t"
21077 "eor r6, r6, r10\n\t"
21078 "eor r7, r7, r11\n\t"
21079 "str r4, [%[out]]\n\t"
21080 "str r5, [%[out], #4]\n\t"
21081 "str r6, [%[out], #8]\n\t"
21082 "str r7, [%[out], #12]\n\t"
21083 "subs r12, r12, #16\n\t"
21084 "add lr, lr, #16\n\t"
21085 "add %[out], %[out], #16\n\t"
21086 "bne L_AES_CBC_decrypt_loop_block_256_%=\n\t"
21087 "b L_AES_CBC_decrypt_end_%=\n\t"
21088 "\n"
21089 "L_AES_CBC_decrypt_loop_block_192_%=:\n\t"
21090 "push {r1, r12, lr}\n\t"
21091 "ldr r4, [lr]\n\t"
21092 "ldr r5, [lr, #4]\n\t"
21093 "ldr r6, [lr, #8]\n\t"
21094 "ldr r7, [lr, #12]\n\t"
21095 "ldr lr, [sp, #16]\n\t"
21096#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21097 "str r4, [lr, #16]\n\t"
21098 "str r5, [lr, #20]\n\t"
21099#else
21100 "strd r4, r5, [lr, #16]\n\t"
21101#endif
21102#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21103 "str r6, [lr, #24]\n\t"
21104 "str r7, [lr, #28]\n\t"
21105#else
21106 "strd r6, r7, [lr, #24]\n\t"
21107#endif
21108#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21109 "eor r8, r4, r4, ror #16\n\t"
21110 "eor r9, r5, r5, ror #16\n\t"
21111 "eor r10, r6, r6, ror #16\n\t"
21112 "eor r11, r7, r7, ror #16\n\t"
21113 "bic r8, r8, #0xff0000\n\t"
21114 "bic r9, r9, #0xff0000\n\t"
21115 "bic r10, r10, #0xff0000\n\t"
21116 "bic r11, r11, #0xff0000\n\t"
21117 "ror r4, r4, #8\n\t"
21118 "ror r5, r5, #8\n\t"
21119 "ror r6, r6, #8\n\t"
21120 "ror r7, r7, #8\n\t"
21121 "eor r4, r4, r8, lsr #8\n\t"
21122 "eor r5, r5, r9, lsr #8\n\t"
21123 "eor r6, r6, r10, lsr #8\n\t"
21124 "eor r7, r7, r11, lsr #8\n\t"
21125#else
21126 "rev r4, r4\n\t"
21127 "rev r5, r5\n\t"
21128 "rev r6, r6\n\t"
21129 "rev r7, r7\n\t"
21130#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
21131 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
21132 /* Round: 0 - XOR in key schedule */
21133 "eor r4, r4, r8\n\t"
21134 "eor r5, r5, r9\n\t"
21135 "eor r6, r6, r10\n\t"
21136 "eor r7, r7, r11\n\t"
21137 "mov r1, #5\n\t"
21138#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
21139 "bl AES_decrypt_block\n\t"
21140#else
21141 "\n"
21142 "L_AES_CBC_decrypt_block_nr_192_odd_%=:\n\t"
21143#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21144#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21145 "lsl r8, r7, #8\n\t"
21146 "lsr r8, r8, #24\n\t"
21147#else
21148 "uxtb r8, r7, ror #16\n\t"
21149#endif
21150#else
21151 "ubfx r8, r7, #16, #8\n\t"
21152#endif
21153 "lsr r11, r4, #24\n\t"
21154#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21155#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21156 "lsl r12, r6, #16\n\t"
21157 "lsr r12, r12, #24\n\t"
21158#else
21159 "uxtb r12, r6, ror #8\n\t"
21160#endif
21161#else
21162 "ubfx r12, r6, #8, #8\n\t"
21163#endif
21164#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21165#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21166 "lsl lr, r5, #24\n\t"
21167 "lsr lr, lr, #24\n\t"
21168#else
21169 "uxtb lr, r5\n\t"
21170#endif
21171#else
21172 "ubfx lr, r5, #0, #8\n\t"
21173#endif
21174 "ldr r8, [r0, r8, lsl #2]\n\t"
21175 "ldr r11, [r0, r11, lsl #2]\n\t"
21176 "ldr r12, [r0, r12, lsl #2]\n\t"
21177 "ldr lr, [r0, lr, lsl #2]\n\t"
21178#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21179#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21180 "lsl r9, r4, #8\n\t"
21181 "lsr r9, r9, #24\n\t"
21182#else
21183 "uxtb r9, r4, ror #16\n\t"
21184#endif
21185#else
21186 "ubfx r9, r4, #16, #8\n\t"
21187#endif
21188 "eor r8, r8, r11, ror #24\n\t"
21189 "lsr r11, r5, #24\n\t"
21190 "eor r8, r8, r12, ror #8\n\t"
21191#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21192#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21193 "lsl r12, r7, #16\n\t"
21194 "lsr r12, r12, #24\n\t"
21195#else
21196 "uxtb r12, r7, ror #8\n\t"
21197#endif
21198#else
21199 "ubfx r12, r7, #8, #8\n\t"
21200#endif
21201 "eor r8, r8, lr, ror #16\n\t"
21202#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21203#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21204 "lsl lr, r6, #24\n\t"
21205 "lsr lr, lr, #24\n\t"
21206#else
21207 "uxtb lr, r6\n\t"
21208#endif
21209#else
21210 "ubfx lr, r6, #0, #8\n\t"
21211#endif
21212 "ldr r9, [r0, r9, lsl #2]\n\t"
21213 "ldr r11, [r0, r11, lsl #2]\n\t"
21214 "ldr r12, [r0, r12, lsl #2]\n\t"
21215 "ldr lr, [r0, lr, lsl #2]\n\t"
21216#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21217#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21218 "lsl r10, r5, #8\n\t"
21219 "lsr r10, r10, #24\n\t"
21220#else
21221 "uxtb r10, r5, ror #16\n\t"
21222#endif
21223#else
21224 "ubfx r10, r5, #16, #8\n\t"
21225#endif
21226 "eor r9, r9, r11, ror #24\n\t"
21227 "lsr r11, r6, #24\n\t"
21228 "eor r9, r9, r12, ror #8\n\t"
21229#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21230#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21231 "lsl r12, r4, #16\n\t"
21232 "lsr r12, r12, #24\n\t"
21233#else
21234 "uxtb r12, r4, ror #8\n\t"
21235#endif
21236#else
21237 "ubfx r12, r4, #8, #8\n\t"
21238#endif
21239 "eor r9, r9, lr, ror #16\n\t"
21240#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21241#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21242 "lsl lr, r7, #24\n\t"
21243 "lsr lr, lr, #24\n\t"
21244#else
21245 "uxtb lr, r7\n\t"
21246#endif
21247#else
21248 "ubfx lr, r7, #0, #8\n\t"
21249#endif
21250 "ldr r10, [r0, r10, lsl #2]\n\t"
21251 "ldr r11, [r0, r11, lsl #2]\n\t"
21252 "ldr r12, [r0, r12, lsl #2]\n\t"
21253 "ldr lr, [r0, lr, lsl #2]\n\t"
21254#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21255#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21256 "lsl r4, r4, #24\n\t"
21257 "lsr r4, r4, #24\n\t"
21258#else
21259 "uxtb r4, r4\n\t"
21260#endif
21261#else
21262 "ubfx r4, r4, #0, #8\n\t"
21263#endif
21264 "eor r10, r10, r11, ror #24\n\t"
21265#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21266#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21267 "lsl r11, r6, #8\n\t"
21268 "lsr r11, r11, #24\n\t"
21269#else
21270 "uxtb r11, r6, ror #16\n\t"
21271#endif
21272#else
21273 "ubfx r11, r6, #16, #8\n\t"
21274#endif
21275 "eor r10, r10, r12, ror #8\n\t"
21276 "lsr r12, r7, #24\n\t"
21277 "eor r10, r10, lr, ror #16\n\t"
21278#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21279#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21280 "lsl lr, r5, #16\n\t"
21281 "lsr lr, lr, #24\n\t"
21282#else
21283 "uxtb lr, r5, ror #8\n\t"
21284#endif
21285#else
21286 "ubfx lr, r5, #8, #8\n\t"
21287#endif
21288 "ldr r4, [r0, r4, lsl #2]\n\t"
21289 "ldr r12, [r0, r12, lsl #2]\n\t"
21290 "ldr r11, [r0, r11, lsl #2]\n\t"
21291 "ldr lr, [r0, lr, lsl #2]\n\t"
21292 "eor r12, r12, r4, ror #24\n\t"
21293 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
21294 "eor r11, r11, lr, ror #8\n\t"
21295 "eor r11, r11, r12, ror #24\n\t"
21296 /* XOR in Key Schedule */
21297 "eor r8, r8, r4\n\t"
21298 "eor r9, r9, r5\n\t"
21299 "eor r10, r10, r6\n\t"
21300 "eor r11, r11, r7\n\t"
21301#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21302#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21303 "lsl r4, r11, #8\n\t"
21304 "lsr r4, r4, #24\n\t"
21305#else
21306 "uxtb r4, r11, ror #16\n\t"
21307#endif
21308#else
21309 "ubfx r4, r11, #16, #8\n\t"
21310#endif
21311 "lsr r7, r8, #24\n\t"
21312#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21313#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21314 "lsl r12, r10, #16\n\t"
21315 "lsr r12, r12, #24\n\t"
21316#else
21317 "uxtb r12, r10, ror #8\n\t"
21318#endif
21319#else
21320 "ubfx r12, r10, #8, #8\n\t"
21321#endif
21322#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21323#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21324 "lsl lr, r9, #24\n\t"
21325 "lsr lr, lr, #24\n\t"
21326#else
21327 "uxtb lr, r9\n\t"
21328#endif
21329#else
21330 "ubfx lr, r9, #0, #8\n\t"
21331#endif
21332 "ldr r4, [r0, r4, lsl #2]\n\t"
21333 "ldr r7, [r0, r7, lsl #2]\n\t"
21334 "ldr r12, [r0, r12, lsl #2]\n\t"
21335 "ldr lr, [r0, lr, lsl #2]\n\t"
21336#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21337#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21338 "lsl r5, r8, #8\n\t"
21339 "lsr r5, r5, #24\n\t"
21340#else
21341 "uxtb r5, r8, ror #16\n\t"
21342#endif
21343#else
21344 "ubfx r5, r8, #16, #8\n\t"
21345#endif
21346 "eor r4, r4, r7, ror #24\n\t"
21347 "lsr r7, r9, #24\n\t"
21348 "eor r4, r4, r12, ror #8\n\t"
21349#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21350#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21351 "lsl r12, r11, #16\n\t"
21352 "lsr r12, r12, #24\n\t"
21353#else
21354 "uxtb r12, r11, ror #8\n\t"
21355#endif
21356#else
21357 "ubfx r12, r11, #8, #8\n\t"
21358#endif
21359 "eor r4, r4, lr, ror #16\n\t"
21360#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21361#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21362 "lsl lr, r10, #24\n\t"
21363 "lsr lr, lr, #24\n\t"
21364#else
21365 "uxtb lr, r10\n\t"
21366#endif
21367#else
21368 "ubfx lr, r10, #0, #8\n\t"
21369#endif
21370 "ldr r5, [r0, r5, lsl #2]\n\t"
21371 "ldr r7, [r0, r7, lsl #2]\n\t"
21372 "ldr r12, [r0, r12, lsl #2]\n\t"
21373 "ldr lr, [r0, lr, lsl #2]\n\t"
21374#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21375#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21376 "lsl r6, r9, #8\n\t"
21377 "lsr r6, r6, #24\n\t"
21378#else
21379 "uxtb r6, r9, ror #16\n\t"
21380#endif
21381#else
21382 "ubfx r6, r9, #16, #8\n\t"
21383#endif
21384 "eor r5, r5, r7, ror #24\n\t"
21385 "lsr r7, r10, #24\n\t"
21386 "eor r5, r5, r12, ror #8\n\t"
21387#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21388#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21389 "lsl r12, r8, #16\n\t"
21390 "lsr r12, r12, #24\n\t"
21391#else
21392 "uxtb r12, r8, ror #8\n\t"
21393#endif
21394#else
21395 "ubfx r12, r8, #8, #8\n\t"
21396#endif
21397 "eor r5, r5, lr, ror #16\n\t"
21398#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21399#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21400 "lsl lr, r11, #24\n\t"
21401 "lsr lr, lr, #24\n\t"
21402#else
21403 "uxtb lr, r11\n\t"
21404#endif
21405#else
21406 "ubfx lr, r11, #0, #8\n\t"
21407#endif
21408 "ldr r6, [r0, r6, lsl #2]\n\t"
21409 "ldr r7, [r0, r7, lsl #2]\n\t"
21410 "ldr r12, [r0, r12, lsl #2]\n\t"
21411 "ldr lr, [r0, lr, lsl #2]\n\t"
21412#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21413#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21414 "lsl r8, r8, #24\n\t"
21415 "lsr r8, r8, #24\n\t"
21416#else
21417 "uxtb r8, r8\n\t"
21418#endif
21419#else
21420 "ubfx r8, r8, #0, #8\n\t"
21421#endif
21422 "eor r6, r6, r7, ror #24\n\t"
21423#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21425 "lsl r7, r10, #8\n\t"
21426 "lsr r7, r7, #24\n\t"
21427#else
21428 "uxtb r7, r10, ror #16\n\t"
21429#endif
21430#else
21431 "ubfx r7, r10, #16, #8\n\t"
21432#endif
21433 "eor r6, r6, r12, ror #8\n\t"
21434 "lsr r12, r11, #24\n\t"
21435 "eor r6, r6, lr, ror #16\n\t"
21436#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21437#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21438 "lsl lr, r9, #16\n\t"
21439 "lsr lr, lr, #24\n\t"
21440#else
21441 "uxtb lr, r9, ror #8\n\t"
21442#endif
21443#else
21444 "ubfx lr, r9, #8, #8\n\t"
21445#endif
21446 "ldr r8, [r0, r8, lsl #2]\n\t"
21447 "ldr r12, [r0, r12, lsl #2]\n\t"
21448 "ldr r7, [r0, r7, lsl #2]\n\t"
21449 "ldr lr, [r0, lr, lsl #2]\n\t"
21450 "eor r12, r12, r8, ror #24\n\t"
21451 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
21452 "eor r7, r7, lr, ror #8\n\t"
21453 "eor r7, r7, r12, ror #24\n\t"
21454 /* XOR in Key Schedule */
21455 "eor r4, r4, r8\n\t"
21456 "eor r5, r5, r9\n\t"
21457 "eor r6, r6, r10\n\t"
21458 "eor r7, r7, r11\n\t"
21459 "subs r1, r1, #1\n\t"
21460 "bne L_AES_CBC_decrypt_block_nr_192_odd_%=\n\t"
21461#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21462#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21463 "lsl r8, r7, #8\n\t"
21464 "lsr r8, r8, #24\n\t"
21465#else
21466 "uxtb r8, r7, ror #16\n\t"
21467#endif
21468#else
21469 "ubfx r8, r7, #16, #8\n\t"
21470#endif
21471 "lsr r11, r4, #24\n\t"
21472#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21473#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21474 "lsl r12, r6, #16\n\t"
21475 "lsr r12, r12, #24\n\t"
21476#else
21477 "uxtb r12, r6, ror #8\n\t"
21478#endif
21479#else
21480 "ubfx r12, r6, #8, #8\n\t"
21481#endif
21482#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21483#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21484 "lsl lr, r5, #24\n\t"
21485 "lsr lr, lr, #24\n\t"
21486#else
21487 "uxtb lr, r5\n\t"
21488#endif
21489#else
21490 "ubfx lr, r5, #0, #8\n\t"
21491#endif
21492 "ldr r8, [r0, r8, lsl #2]\n\t"
21493 "ldr r11, [r0, r11, lsl #2]\n\t"
21494 "ldr r12, [r0, r12, lsl #2]\n\t"
21495 "ldr lr, [r0, lr, lsl #2]\n\t"
21496#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21497#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21498 "lsl r9, r4, #8\n\t"
21499 "lsr r9, r9, #24\n\t"
21500#else
21501 "uxtb r9, r4, ror #16\n\t"
21502#endif
21503#else
21504 "ubfx r9, r4, #16, #8\n\t"
21505#endif
21506 "eor r8, r8, r11, ror #24\n\t"
21507 "lsr r11, r5, #24\n\t"
21508 "eor r8, r8, r12, ror #8\n\t"
21509#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21510#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21511 "lsl r12, r7, #16\n\t"
21512 "lsr r12, r12, #24\n\t"
21513#else
21514 "uxtb r12, r7, ror #8\n\t"
21515#endif
21516#else
21517 "ubfx r12, r7, #8, #8\n\t"
21518#endif
21519 "eor r8, r8, lr, ror #16\n\t"
21520#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21521#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21522 "lsl lr, r6, #24\n\t"
21523 "lsr lr, lr, #24\n\t"
21524#else
21525 "uxtb lr, r6\n\t"
21526#endif
21527#else
21528 "ubfx lr, r6, #0, #8\n\t"
21529#endif
21530 "ldr r9, [r0, r9, lsl #2]\n\t"
21531 "ldr r11, [r0, r11, lsl #2]\n\t"
21532 "ldr r12, [r0, r12, lsl #2]\n\t"
21533 "ldr lr, [r0, lr, lsl #2]\n\t"
21534#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21535#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21536 "lsl r10, r5, #8\n\t"
21537 "lsr r10, r10, #24\n\t"
21538#else
21539 "uxtb r10, r5, ror #16\n\t"
21540#endif
21541#else
21542 "ubfx r10, r5, #16, #8\n\t"
21543#endif
21544 "eor r9, r9, r11, ror #24\n\t"
21545 "lsr r11, r6, #24\n\t"
21546 "eor r9, r9, r12, ror #8\n\t"
21547#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21548#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21549 "lsl r12, r4, #16\n\t"
21550 "lsr r12, r12, #24\n\t"
21551#else
21552 "uxtb r12, r4, ror #8\n\t"
21553#endif
21554#else
21555 "ubfx r12, r4, #8, #8\n\t"
21556#endif
21557 "eor r9, r9, lr, ror #16\n\t"
21558#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21559#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21560 "lsl lr, r7, #24\n\t"
21561 "lsr lr, lr, #24\n\t"
21562#else
21563 "uxtb lr, r7\n\t"
21564#endif
21565#else
21566 "ubfx lr, r7, #0, #8\n\t"
21567#endif
21568 "ldr r10, [r0, r10, lsl #2]\n\t"
21569 "ldr r11, [r0, r11, lsl #2]\n\t"
21570 "ldr r12, [r0, r12, lsl #2]\n\t"
21571 "ldr lr, [r0, lr, lsl #2]\n\t"
21572#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21573#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21574 "lsl r4, r4, #24\n\t"
21575 "lsr r4, r4, #24\n\t"
21576#else
21577 "uxtb r4, r4\n\t"
21578#endif
21579#else
21580 "ubfx r4, r4, #0, #8\n\t"
21581#endif
21582 "eor r10, r10, r11, ror #24\n\t"
21583#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21584#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21585 "lsl r11, r6, #8\n\t"
21586 "lsr r11, r11, #24\n\t"
21587#else
21588 "uxtb r11, r6, ror #16\n\t"
21589#endif
21590#else
21591 "ubfx r11, r6, #16, #8\n\t"
21592#endif
21593 "eor r10, r10, r12, ror #8\n\t"
21594 "lsr r12, r7, #24\n\t"
21595 "eor r10, r10, lr, ror #16\n\t"
21596#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21597#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21598 "lsl lr, r5, #16\n\t"
21599 "lsr lr, lr, #24\n\t"
21600#else
21601 "uxtb lr, r5, ror #8\n\t"
21602#endif
21603#else
21604 "ubfx lr, r5, #8, #8\n\t"
21605#endif
21606 "ldr r4, [r0, r4, lsl #2]\n\t"
21607 "ldr r12, [r0, r12, lsl #2]\n\t"
21608 "ldr r11, [r0, r11, lsl #2]\n\t"
21609 "ldr lr, [r0, lr, lsl #2]\n\t"
21610 "eor r12, r12, r4, ror #24\n\t"
21611 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
21612 "eor r11, r11, lr, ror #8\n\t"
21613 "eor r11, r11, r12, ror #24\n\t"
21614 /* XOR in Key Schedule */
21615 "eor r8, r8, r4\n\t"
21616 "eor r9, r9, r5\n\t"
21617 "eor r10, r10, r6\n\t"
21618 "eor r11, r11, r7\n\t"
21619#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21620#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21621 "lsl r4, r9, #24\n\t"
21622 "lsr r4, r4, #24\n\t"
21623#else
21624 "uxtb r4, r9\n\t"
21625#endif
21626#else
21627 "ubfx r4, r9, #0, #8\n\t"
21628#endif
21629#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21630#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21631 "lsl r7, r10, #16\n\t"
21632 "lsr r7, r7, #24\n\t"
21633#else
21634 "uxtb r7, r10, ror #8\n\t"
21635#endif
21636#else
21637 "ubfx r7, r10, #8, #8\n\t"
21638#endif
21639#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21640#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21641 "lsl r12, r11, #8\n\t"
21642 "lsr r12, r12, #24\n\t"
21643#else
21644 "uxtb r12, r11, ror #16\n\t"
21645#endif
21646#else
21647 "ubfx r12, r11, #16, #8\n\t"
21648#endif
21649 "lsr lr, r8, #24\n\t"
21650 "ldrb r4, [r2, r4]\n\t"
21651 "ldrb r7, [r2, r7]\n\t"
21652 "ldrb r12, [r2, r12]\n\t"
21653 "ldrb lr, [r2, lr]\n\t"
21654#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21655#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21656 "lsl r5, r10, #24\n\t"
21657 "lsr r5, r5, #24\n\t"
21658#else
21659 "uxtb r5, r10\n\t"
21660#endif
21661#else
21662 "ubfx r5, r10, #0, #8\n\t"
21663#endif
21664 "eor r4, r4, r7, lsl #8\n\t"
21665#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21666#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21667 "lsl r7, r11, #16\n\t"
21668 "lsr r7, r7, #24\n\t"
21669#else
21670 "uxtb r7, r11, ror #8\n\t"
21671#endif
21672#else
21673 "ubfx r7, r11, #8, #8\n\t"
21674#endif
21675 "eor r4, r4, r12, lsl #16\n\t"
21676#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21677#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21678 "lsl r12, r8, #8\n\t"
21679 "lsr r12, r12, #24\n\t"
21680#else
21681 "uxtb r12, r8, ror #16\n\t"
21682#endif
21683#else
21684 "ubfx r12, r8, #16, #8\n\t"
21685#endif
21686 "eor r4, r4, lr, lsl #24\n\t"
21687 "lsr lr, r9, #24\n\t"
21688 "ldrb r7, [r2, r7]\n\t"
21689 "ldrb lr, [r2, lr]\n\t"
21690 "ldrb r5, [r2, r5]\n\t"
21691 "ldrb r12, [r2, r12]\n\t"
21692#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21693#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21694 "lsl r6, r11, #24\n\t"
21695 "lsr r6, r6, #24\n\t"
21696#else
21697 "uxtb r6, r11\n\t"
21698#endif
21699#else
21700 "ubfx r6, r11, #0, #8\n\t"
21701#endif
21702 "eor r5, r5, r7, lsl #8\n\t"
21703#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21704#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21705 "lsl r7, r8, #16\n\t"
21706 "lsr r7, r7, #24\n\t"
21707#else
21708 "uxtb r7, r8, ror #8\n\t"
21709#endif
21710#else
21711 "ubfx r7, r8, #8, #8\n\t"
21712#endif
21713 "eor r5, r5, r12, lsl #16\n\t"
21714#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21715#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21716 "lsl r12, r9, #8\n\t"
21717 "lsr r12, r12, #24\n\t"
21718#else
21719 "uxtb r12, r9, ror #16\n\t"
21720#endif
21721#else
21722 "ubfx r12, r9, #16, #8\n\t"
21723#endif
21724 "eor r5, r5, lr, lsl #24\n\t"
21725 "lsr lr, r10, #24\n\t"
21726 "ldrb r7, [r2, r7]\n\t"
21727 "ldrb lr, [r2, lr]\n\t"
21728 "ldrb r6, [r2, r6]\n\t"
21729 "ldrb r12, [r2, r12]\n\t"
21730 "lsr r11, r11, #24\n\t"
21731 "eor r6, r6, r7, lsl #8\n\t"
21732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21733#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21734 "lsl r7, r8, #24\n\t"
21735 "lsr r7, r7, #24\n\t"
21736#else
21737 "uxtb r7, r8\n\t"
21738#endif
21739#else
21740 "ubfx r7, r8, #0, #8\n\t"
21741#endif
21742 "eor r6, r6, r12, lsl #16\n\t"
21743#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21744#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21745 "lsl r12, r9, #16\n\t"
21746 "lsr r12, r12, #24\n\t"
21747#else
21748 "uxtb r12, r9, ror #8\n\t"
21749#endif
21750#else
21751 "ubfx r12, r9, #8, #8\n\t"
21752#endif
21753 "eor r6, r6, lr, lsl #24\n\t"
21754#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21755#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21756 "lsl lr, r10, #8\n\t"
21757 "lsr lr, lr, #24\n\t"
21758#else
21759 "uxtb lr, r10, ror #16\n\t"
21760#endif
21761#else
21762 "ubfx lr, r10, #16, #8\n\t"
21763#endif
21764 "ldrb r11, [r2, r11]\n\t"
21765 "ldrb r12, [r2, r12]\n\t"
21766 "ldrb r7, [r2, r7]\n\t"
21767 "ldrb lr, [r2, lr]\n\t"
21768 "eor r12, r12, r11, lsl #16\n\t"
21769 "ldm %[ks], {r8, r9, r10, r11}\n\t"
21770 "eor r7, r7, r12, lsl #8\n\t"
21771 "eor r7, r7, lr, lsl #16\n\t"
21772 /* XOR in Key Schedule */
21773 "eor r4, r4, r8\n\t"
21774 "eor r5, r5, r9\n\t"
21775 "eor r6, r6, r10\n\t"
21776 "eor r7, r7, r11\n\t"
21777#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
21778 "ldr lr, [sp, #16]\n\t"
21779#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21780 "eor r8, r4, r4, ror #16\n\t"
21781 "eor r9, r5, r5, ror #16\n\t"
21782 "eor r10, r6, r6, ror #16\n\t"
21783 "eor r11, r7, r7, ror #16\n\t"
21784 "bic r8, r8, #0xff0000\n\t"
21785 "bic r9, r9, #0xff0000\n\t"
21786 "bic r10, r10, #0xff0000\n\t"
21787 "bic r11, r11, #0xff0000\n\t"
21788 "ror r4, r4, #8\n\t"
21789 "ror r5, r5, #8\n\t"
21790 "ror r6, r6, #8\n\t"
21791 "ror r7, r7, #8\n\t"
21792 "eor r4, r4, r8, lsr #8\n\t"
21793 "eor r5, r5, r9, lsr #8\n\t"
21794 "eor r6, r6, r10, lsr #8\n\t"
21795 "eor r7, r7, r11, lsr #8\n\t"
21796#else
21797 "rev r4, r4\n\t"
21798 "rev r5, r5\n\t"
21799 "rev r6, r6\n\t"
21800 "rev r7, r7\n\t"
21801#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
21802 "ldm lr, {r8, r9, r10, r11}\n\t"
21803 "pop {r1, r12, lr}\n\t"
21804 "ldr %[ks], [sp]\n\t"
21805 "eor r4, r4, r8\n\t"
21806 "eor r5, r5, r9\n\t"
21807 "eor r6, r6, r10\n\t"
21808 "eor r7, r7, r11\n\t"
21809 "str r4, [%[out]]\n\t"
21810 "str r5, [%[out], #4]\n\t"
21811 "str r6, [%[out], #8]\n\t"
21812 "str r7, [%[out], #12]\n\t"
21813 "subs r12, r12, #16\n\t"
21814 "add lr, lr, #16\n\t"
21815 "add %[out], %[out], #16\n\t"
21816 "beq L_AES_CBC_decrypt_end_odd_%=\n\t"
21817 "push {r1, r12, lr}\n\t"
21818 "ldr r4, [lr]\n\t"
21819 "ldr r5, [lr, #4]\n\t"
21820 "ldr r6, [lr, #8]\n\t"
21821 "ldr r7, [lr, #12]\n\t"
21822 "ldr lr, [sp, #16]\n\t"
21823#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21824 "stm lr, {r4, r5}\n\t"
21825#else
21826 "strd r4, r5, [lr]\n\t"
21827#endif
21828#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21829 "str r6, [lr, #8]\n\t"
21830 "str r7, [lr, #12]\n\t"
21831#else
21832 "strd r6, r7, [lr, #8]\n\t"
21833#endif
21834#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21835 "eor r8, r4, r4, ror #16\n\t"
21836 "eor r9, r5, r5, ror #16\n\t"
21837 "eor r10, r6, r6, ror #16\n\t"
21838 "eor r11, r7, r7, ror #16\n\t"
21839 "bic r8, r8, #0xff0000\n\t"
21840 "bic r9, r9, #0xff0000\n\t"
21841 "bic r10, r10, #0xff0000\n\t"
21842 "bic r11, r11, #0xff0000\n\t"
21843 "ror r4, r4, #8\n\t"
21844 "ror r5, r5, #8\n\t"
21845 "ror r6, r6, #8\n\t"
21846 "ror r7, r7, #8\n\t"
21847 "eor r4, r4, r8, lsr #8\n\t"
21848 "eor r5, r5, r9, lsr #8\n\t"
21849 "eor r6, r6, r10, lsr #8\n\t"
21850 "eor r7, r7, r11, lsr #8\n\t"
21851#else
21852 "rev r4, r4\n\t"
21853 "rev r5, r5\n\t"
21854 "rev r6, r6\n\t"
21855 "rev r7, r7\n\t"
21856#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
21857 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
21858 /* Round: 0 - XOR in key schedule */
21859 "eor r4, r4, r8\n\t"
21860 "eor r5, r5, r9\n\t"
21861 "eor r6, r6, r10\n\t"
21862 "eor r7, r7, r11\n\t"
21863 "mov r1, #5\n\t"
21864#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
21865 "bl AES_decrypt_block\n\t"
21866#else
21867 "\n"
21868 "L_AES_CBC_decrypt_block_nr_192_even_%=:\n\t"
21869#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21871 "lsl r8, r7, #8\n\t"
21872 "lsr r8, r8, #24\n\t"
21873#else
21874 "uxtb r8, r7, ror #16\n\t"
21875#endif
21876#else
21877 "ubfx r8, r7, #16, #8\n\t"
21878#endif
21879 "lsr r11, r4, #24\n\t"
21880#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21881#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21882 "lsl r12, r6, #16\n\t"
21883 "lsr r12, r12, #24\n\t"
21884#else
21885 "uxtb r12, r6, ror #8\n\t"
21886#endif
21887#else
21888 "ubfx r12, r6, #8, #8\n\t"
21889#endif
21890#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21891#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21892 "lsl lr, r5, #24\n\t"
21893 "lsr lr, lr, #24\n\t"
21894#else
21895 "uxtb lr, r5\n\t"
21896#endif
21897#else
21898 "ubfx lr, r5, #0, #8\n\t"
21899#endif
21900 "ldr r8, [r0, r8, lsl #2]\n\t"
21901 "ldr r11, [r0, r11, lsl #2]\n\t"
21902 "ldr r12, [r0, r12, lsl #2]\n\t"
21903 "ldr lr, [r0, lr, lsl #2]\n\t"
21904#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21906 "lsl r9, r4, #8\n\t"
21907 "lsr r9, r9, #24\n\t"
21908#else
21909 "uxtb r9, r4, ror #16\n\t"
21910#endif
21911#else
21912 "ubfx r9, r4, #16, #8\n\t"
21913#endif
21914 "eor r8, r8, r11, ror #24\n\t"
21915 "lsr r11, r5, #24\n\t"
21916 "eor r8, r8, r12, ror #8\n\t"
21917#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21918#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21919 "lsl r12, r7, #16\n\t"
21920 "lsr r12, r12, #24\n\t"
21921#else
21922 "uxtb r12, r7, ror #8\n\t"
21923#endif
21924#else
21925 "ubfx r12, r7, #8, #8\n\t"
21926#endif
21927 "eor r8, r8, lr, ror #16\n\t"
21928#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21930 "lsl lr, r6, #24\n\t"
21931 "lsr lr, lr, #24\n\t"
21932#else
21933 "uxtb lr, r6\n\t"
21934#endif
21935#else
21936 "ubfx lr, r6, #0, #8\n\t"
21937#endif
21938 "ldr r9, [r0, r9, lsl #2]\n\t"
21939 "ldr r11, [r0, r11, lsl #2]\n\t"
21940 "ldr r12, [r0, r12, lsl #2]\n\t"
21941 "ldr lr, [r0, lr, lsl #2]\n\t"
21942#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21943#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21944 "lsl r10, r5, #8\n\t"
21945 "lsr r10, r10, #24\n\t"
21946#else
21947 "uxtb r10, r5, ror #16\n\t"
21948#endif
21949#else
21950 "ubfx r10, r5, #16, #8\n\t"
21951#endif
21952 "eor r9, r9, r11, ror #24\n\t"
21953 "lsr r11, r6, #24\n\t"
21954 "eor r9, r9, r12, ror #8\n\t"
21955#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21956#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21957 "lsl r12, r4, #16\n\t"
21958 "lsr r12, r12, #24\n\t"
21959#else
21960 "uxtb r12, r4, ror #8\n\t"
21961#endif
21962#else
21963 "ubfx r12, r4, #8, #8\n\t"
21964#endif
21965 "eor r9, r9, lr, ror #16\n\t"
21966#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21967#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21968 "lsl lr, r7, #24\n\t"
21969 "lsr lr, lr, #24\n\t"
21970#else
21971 "uxtb lr, r7\n\t"
21972#endif
21973#else
21974 "ubfx lr, r7, #0, #8\n\t"
21975#endif
21976 "ldr r10, [r0, r10, lsl #2]\n\t"
21977 "ldr r11, [r0, r11, lsl #2]\n\t"
21978 "ldr r12, [r0, r12, lsl #2]\n\t"
21979 "ldr lr, [r0, lr, lsl #2]\n\t"
21980#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21981#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21982 "lsl r4, r4, #24\n\t"
21983 "lsr r4, r4, #24\n\t"
21984#else
21985 "uxtb r4, r4\n\t"
21986#endif
21987#else
21988 "ubfx r4, r4, #0, #8\n\t"
21989#endif
21990 "eor r10, r10, r11, ror #24\n\t"
21991#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
21992#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
21993 "lsl r11, r6, #8\n\t"
21994 "lsr r11, r11, #24\n\t"
21995#else
21996 "uxtb r11, r6, ror #16\n\t"
21997#endif
21998#else
21999 "ubfx r11, r6, #16, #8\n\t"
22000#endif
22001 "eor r10, r10, r12, ror #8\n\t"
22002 "lsr r12, r7, #24\n\t"
22003 "eor r10, r10, lr, ror #16\n\t"
22004#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22005#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22006 "lsl lr, r5, #16\n\t"
22007 "lsr lr, lr, #24\n\t"
22008#else
22009 "uxtb lr, r5, ror #8\n\t"
22010#endif
22011#else
22012 "ubfx lr, r5, #8, #8\n\t"
22013#endif
22014 "ldr r4, [r0, r4, lsl #2]\n\t"
22015 "ldr r12, [r0, r12, lsl #2]\n\t"
22016 "ldr r11, [r0, r11, lsl #2]\n\t"
22017 "ldr lr, [r0, lr, lsl #2]\n\t"
22018 "eor r12, r12, r4, ror #24\n\t"
22019 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
22020 "eor r11, r11, lr, ror #8\n\t"
22021 "eor r11, r11, r12, ror #24\n\t"
22022 /* XOR in Key Schedule */
22023 "eor r8, r8, r4\n\t"
22024 "eor r9, r9, r5\n\t"
22025 "eor r10, r10, r6\n\t"
22026 "eor r11, r11, r7\n\t"
22027#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22028#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22029 "lsl r4, r11, #8\n\t"
22030 "lsr r4, r4, #24\n\t"
22031#else
22032 "uxtb r4, r11, ror #16\n\t"
22033#endif
22034#else
22035 "ubfx r4, r11, #16, #8\n\t"
22036#endif
22037 "lsr r7, r8, #24\n\t"
22038#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22039#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22040 "lsl r12, r10, #16\n\t"
22041 "lsr r12, r12, #24\n\t"
22042#else
22043 "uxtb r12, r10, ror #8\n\t"
22044#endif
22045#else
22046 "ubfx r12, r10, #8, #8\n\t"
22047#endif
22048#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22049#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22050 "lsl lr, r9, #24\n\t"
22051 "lsr lr, lr, #24\n\t"
22052#else
22053 "uxtb lr, r9\n\t"
22054#endif
22055#else
22056 "ubfx lr, r9, #0, #8\n\t"
22057#endif
22058 "ldr r4, [r0, r4, lsl #2]\n\t"
22059 "ldr r7, [r0, r7, lsl #2]\n\t"
22060 "ldr r12, [r0, r12, lsl #2]\n\t"
22061 "ldr lr, [r0, lr, lsl #2]\n\t"
22062#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22063#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22064 "lsl r5, r8, #8\n\t"
22065 "lsr r5, r5, #24\n\t"
22066#else
22067 "uxtb r5, r8, ror #16\n\t"
22068#endif
22069#else
22070 "ubfx r5, r8, #16, #8\n\t"
22071#endif
22072 "eor r4, r4, r7, ror #24\n\t"
22073 "lsr r7, r9, #24\n\t"
22074 "eor r4, r4, r12, ror #8\n\t"
22075#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22077 "lsl r12, r11, #16\n\t"
22078 "lsr r12, r12, #24\n\t"
22079#else
22080 "uxtb r12, r11, ror #8\n\t"
22081#endif
22082#else
22083 "ubfx r12, r11, #8, #8\n\t"
22084#endif
22085 "eor r4, r4, lr, ror #16\n\t"
22086#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22087#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22088 "lsl lr, r10, #24\n\t"
22089 "lsr lr, lr, #24\n\t"
22090#else
22091 "uxtb lr, r10\n\t"
22092#endif
22093#else
22094 "ubfx lr, r10, #0, #8\n\t"
22095#endif
22096 "ldr r5, [r0, r5, lsl #2]\n\t"
22097 "ldr r7, [r0, r7, lsl #2]\n\t"
22098 "ldr r12, [r0, r12, lsl #2]\n\t"
22099 "ldr lr, [r0, lr, lsl #2]\n\t"
22100#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22101#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22102 "lsl r6, r9, #8\n\t"
22103 "lsr r6, r6, #24\n\t"
22104#else
22105 "uxtb r6, r9, ror #16\n\t"
22106#endif
22107#else
22108 "ubfx r6, r9, #16, #8\n\t"
22109#endif
22110 "eor r5, r5, r7, ror #24\n\t"
22111 "lsr r7, r10, #24\n\t"
22112 "eor r5, r5, r12, ror #8\n\t"
22113#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22114#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22115 "lsl r12, r8, #16\n\t"
22116 "lsr r12, r12, #24\n\t"
22117#else
22118 "uxtb r12, r8, ror #8\n\t"
22119#endif
22120#else
22121 "ubfx r12, r8, #8, #8\n\t"
22122#endif
22123 "eor r5, r5, lr, ror #16\n\t"
22124#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22125#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22126 "lsl lr, r11, #24\n\t"
22127 "lsr lr, lr, #24\n\t"
22128#else
22129 "uxtb lr, r11\n\t"
22130#endif
22131#else
22132 "ubfx lr, r11, #0, #8\n\t"
22133#endif
22134 "ldr r6, [r0, r6, lsl #2]\n\t"
22135 "ldr r7, [r0, r7, lsl #2]\n\t"
22136 "ldr r12, [r0, r12, lsl #2]\n\t"
22137 "ldr lr, [r0, lr, lsl #2]\n\t"
22138#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22139#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22140 "lsl r8, r8, #24\n\t"
22141 "lsr r8, r8, #24\n\t"
22142#else
22143 "uxtb r8, r8\n\t"
22144#endif
22145#else
22146 "ubfx r8, r8, #0, #8\n\t"
22147#endif
22148 "eor r6, r6, r7, ror #24\n\t"
22149#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22150#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22151 "lsl r7, r10, #8\n\t"
22152 "lsr r7, r7, #24\n\t"
22153#else
22154 "uxtb r7, r10, ror #16\n\t"
22155#endif
22156#else
22157 "ubfx r7, r10, #16, #8\n\t"
22158#endif
22159 "eor r6, r6, r12, ror #8\n\t"
22160 "lsr r12, r11, #24\n\t"
22161 "eor r6, r6, lr, ror #16\n\t"
22162#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22164 "lsl lr, r9, #16\n\t"
22165 "lsr lr, lr, #24\n\t"
22166#else
22167 "uxtb lr, r9, ror #8\n\t"
22168#endif
22169#else
22170 "ubfx lr, r9, #8, #8\n\t"
22171#endif
22172 "ldr r8, [r0, r8, lsl #2]\n\t"
22173 "ldr r12, [r0, r12, lsl #2]\n\t"
22174 "ldr r7, [r0, r7, lsl #2]\n\t"
22175 "ldr lr, [r0, lr, lsl #2]\n\t"
22176 "eor r12, r12, r8, ror #24\n\t"
22177 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
22178 "eor r7, r7, lr, ror #8\n\t"
22179 "eor r7, r7, r12, ror #24\n\t"
22180 /* XOR in Key Schedule */
22181 "eor r4, r4, r8\n\t"
22182 "eor r5, r5, r9\n\t"
22183 "eor r6, r6, r10\n\t"
22184 "eor r7, r7, r11\n\t"
22185 "subs r1, r1, #1\n\t"
22186 "bne L_AES_CBC_decrypt_block_nr_192_even_%=\n\t"
22187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22188#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22189 "lsl r8, r7, #8\n\t"
22190 "lsr r8, r8, #24\n\t"
22191#else
22192 "uxtb r8, r7, ror #16\n\t"
22193#endif
22194#else
22195 "ubfx r8, r7, #16, #8\n\t"
22196#endif
22197 "lsr r11, r4, #24\n\t"
22198#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22200 "lsl r12, r6, #16\n\t"
22201 "lsr r12, r12, #24\n\t"
22202#else
22203 "uxtb r12, r6, ror #8\n\t"
22204#endif
22205#else
22206 "ubfx r12, r6, #8, #8\n\t"
22207#endif
22208#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22209#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22210 "lsl lr, r5, #24\n\t"
22211 "lsr lr, lr, #24\n\t"
22212#else
22213 "uxtb lr, r5\n\t"
22214#endif
22215#else
22216 "ubfx lr, r5, #0, #8\n\t"
22217#endif
22218 "ldr r8, [r0, r8, lsl #2]\n\t"
22219 "ldr r11, [r0, r11, lsl #2]\n\t"
22220 "ldr r12, [r0, r12, lsl #2]\n\t"
22221 "ldr lr, [r0, lr, lsl #2]\n\t"
22222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22223#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22224 "lsl r9, r4, #8\n\t"
22225 "lsr r9, r9, #24\n\t"
22226#else
22227 "uxtb r9, r4, ror #16\n\t"
22228#endif
22229#else
22230 "ubfx r9, r4, #16, #8\n\t"
22231#endif
22232 "eor r8, r8, r11, ror #24\n\t"
22233 "lsr r11, r5, #24\n\t"
22234 "eor r8, r8, r12, ror #8\n\t"
22235#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22236#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22237 "lsl r12, r7, #16\n\t"
22238 "lsr r12, r12, #24\n\t"
22239#else
22240 "uxtb r12, r7, ror #8\n\t"
22241#endif
22242#else
22243 "ubfx r12, r7, #8, #8\n\t"
22244#endif
22245 "eor r8, r8, lr, ror #16\n\t"
22246#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22247#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22248 "lsl lr, r6, #24\n\t"
22249 "lsr lr, lr, #24\n\t"
22250#else
22251 "uxtb lr, r6\n\t"
22252#endif
22253#else
22254 "ubfx lr, r6, #0, #8\n\t"
22255#endif
22256 "ldr r9, [r0, r9, lsl #2]\n\t"
22257 "ldr r11, [r0, r11, lsl #2]\n\t"
22258 "ldr r12, [r0, r12, lsl #2]\n\t"
22259 "ldr lr, [r0, lr, lsl #2]\n\t"
22260#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22261#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22262 "lsl r10, r5, #8\n\t"
22263 "lsr r10, r10, #24\n\t"
22264#else
22265 "uxtb r10, r5, ror #16\n\t"
22266#endif
22267#else
22268 "ubfx r10, r5, #16, #8\n\t"
22269#endif
22270 "eor r9, r9, r11, ror #24\n\t"
22271 "lsr r11, r6, #24\n\t"
22272 "eor r9, r9, r12, ror #8\n\t"
22273#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22274#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22275 "lsl r12, r4, #16\n\t"
22276 "lsr r12, r12, #24\n\t"
22277#else
22278 "uxtb r12, r4, ror #8\n\t"
22279#endif
22280#else
22281 "ubfx r12, r4, #8, #8\n\t"
22282#endif
22283 "eor r9, r9, lr, ror #16\n\t"
22284#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22285#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22286 "lsl lr, r7, #24\n\t"
22287 "lsr lr, lr, #24\n\t"
22288#else
22289 "uxtb lr, r7\n\t"
22290#endif
22291#else
22292 "ubfx lr, r7, #0, #8\n\t"
22293#endif
22294 "ldr r10, [r0, r10, lsl #2]\n\t"
22295 "ldr r11, [r0, r11, lsl #2]\n\t"
22296 "ldr r12, [r0, r12, lsl #2]\n\t"
22297 "ldr lr, [r0, lr, lsl #2]\n\t"
22298#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22299#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22300 "lsl r4, r4, #24\n\t"
22301 "lsr r4, r4, #24\n\t"
22302#else
22303 "uxtb r4, r4\n\t"
22304#endif
22305#else
22306 "ubfx r4, r4, #0, #8\n\t"
22307#endif
22308 "eor r10, r10, r11, ror #24\n\t"
22309#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22310#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22311 "lsl r11, r6, #8\n\t"
22312 "lsr r11, r11, #24\n\t"
22313#else
22314 "uxtb r11, r6, ror #16\n\t"
22315#endif
22316#else
22317 "ubfx r11, r6, #16, #8\n\t"
22318#endif
22319 "eor r10, r10, r12, ror #8\n\t"
22320 "lsr r12, r7, #24\n\t"
22321 "eor r10, r10, lr, ror #16\n\t"
22322#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22323#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22324 "lsl lr, r5, #16\n\t"
22325 "lsr lr, lr, #24\n\t"
22326#else
22327 "uxtb lr, r5, ror #8\n\t"
22328#endif
22329#else
22330 "ubfx lr, r5, #8, #8\n\t"
22331#endif
22332 "ldr r4, [r0, r4, lsl #2]\n\t"
22333 "ldr r12, [r0, r12, lsl #2]\n\t"
22334 "ldr r11, [r0, r11, lsl #2]\n\t"
22335 "ldr lr, [r0, lr, lsl #2]\n\t"
22336 "eor r12, r12, r4, ror #24\n\t"
22337 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
22338 "eor r11, r11, lr, ror #8\n\t"
22339 "eor r11, r11, r12, ror #24\n\t"
22340 /* XOR in Key Schedule */
22341 "eor r8, r8, r4\n\t"
22342 "eor r9, r9, r5\n\t"
22343 "eor r10, r10, r6\n\t"
22344 "eor r11, r11, r7\n\t"
22345#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22346#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22347 "lsl r4, r9, #24\n\t"
22348 "lsr r4, r4, #24\n\t"
22349#else
22350 "uxtb r4, r9\n\t"
22351#endif
22352#else
22353 "ubfx r4, r9, #0, #8\n\t"
22354#endif
22355#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22356#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22357 "lsl r7, r10, #16\n\t"
22358 "lsr r7, r7, #24\n\t"
22359#else
22360 "uxtb r7, r10, ror #8\n\t"
22361#endif
22362#else
22363 "ubfx r7, r10, #8, #8\n\t"
22364#endif
22365#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22366#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22367 "lsl r12, r11, #8\n\t"
22368 "lsr r12, r12, #24\n\t"
22369#else
22370 "uxtb r12, r11, ror #16\n\t"
22371#endif
22372#else
22373 "ubfx r12, r11, #16, #8\n\t"
22374#endif
22375 "lsr lr, r8, #24\n\t"
22376 "ldrb r4, [r2, r4]\n\t"
22377 "ldrb r7, [r2, r7]\n\t"
22378 "ldrb r12, [r2, r12]\n\t"
22379 "ldrb lr, [r2, lr]\n\t"
22380#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22381#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22382 "lsl r5, r10, #24\n\t"
22383 "lsr r5, r5, #24\n\t"
22384#else
22385 "uxtb r5, r10\n\t"
22386#endif
22387#else
22388 "ubfx r5, r10, #0, #8\n\t"
22389#endif
22390 "eor r4, r4, r7, lsl #8\n\t"
22391#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22392#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22393 "lsl r7, r11, #16\n\t"
22394 "lsr r7, r7, #24\n\t"
22395#else
22396 "uxtb r7, r11, ror #8\n\t"
22397#endif
22398#else
22399 "ubfx r7, r11, #8, #8\n\t"
22400#endif
22401 "eor r4, r4, r12, lsl #16\n\t"
22402#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22403#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22404 "lsl r12, r8, #8\n\t"
22405 "lsr r12, r12, #24\n\t"
22406#else
22407 "uxtb r12, r8, ror #16\n\t"
22408#endif
22409#else
22410 "ubfx r12, r8, #16, #8\n\t"
22411#endif
22412 "eor r4, r4, lr, lsl #24\n\t"
22413 "lsr lr, r9, #24\n\t"
22414 "ldrb r7, [r2, r7]\n\t"
22415 "ldrb lr, [r2, lr]\n\t"
22416 "ldrb r5, [r2, r5]\n\t"
22417 "ldrb r12, [r2, r12]\n\t"
22418#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22419#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22420 "lsl r6, r11, #24\n\t"
22421 "lsr r6, r6, #24\n\t"
22422#else
22423 "uxtb r6, r11\n\t"
22424#endif
22425#else
22426 "ubfx r6, r11, #0, #8\n\t"
22427#endif
22428 "eor r5, r5, r7, lsl #8\n\t"
22429#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22430#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22431 "lsl r7, r8, #16\n\t"
22432 "lsr r7, r7, #24\n\t"
22433#else
22434 "uxtb r7, r8, ror #8\n\t"
22435#endif
22436#else
22437 "ubfx r7, r8, #8, #8\n\t"
22438#endif
22439 "eor r5, r5, r12, lsl #16\n\t"
22440#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22441#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22442 "lsl r12, r9, #8\n\t"
22443 "lsr r12, r12, #24\n\t"
22444#else
22445 "uxtb r12, r9, ror #16\n\t"
22446#endif
22447#else
22448 "ubfx r12, r9, #16, #8\n\t"
22449#endif
22450 "eor r5, r5, lr, lsl #24\n\t"
22451 "lsr lr, r10, #24\n\t"
22452 "ldrb r7, [r2, r7]\n\t"
22453 "ldrb lr, [r2, lr]\n\t"
22454 "ldrb r6, [r2, r6]\n\t"
22455 "ldrb r12, [r2, r12]\n\t"
22456 "lsr r11, r11, #24\n\t"
22457 "eor r6, r6, r7, lsl #8\n\t"
22458#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22459#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22460 "lsl r7, r8, #24\n\t"
22461 "lsr r7, r7, #24\n\t"
22462#else
22463 "uxtb r7, r8\n\t"
22464#endif
22465#else
22466 "ubfx r7, r8, #0, #8\n\t"
22467#endif
22468 "eor r6, r6, r12, lsl #16\n\t"
22469#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22470#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22471 "lsl r12, r9, #16\n\t"
22472 "lsr r12, r12, #24\n\t"
22473#else
22474 "uxtb r12, r9, ror #8\n\t"
22475#endif
22476#else
22477 "ubfx r12, r9, #8, #8\n\t"
22478#endif
22479 "eor r6, r6, lr, lsl #24\n\t"
22480#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22481#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22482 "lsl lr, r10, #8\n\t"
22483 "lsr lr, lr, #24\n\t"
22484#else
22485 "uxtb lr, r10, ror #16\n\t"
22486#endif
22487#else
22488 "ubfx lr, r10, #16, #8\n\t"
22489#endif
22490 "ldrb r11, [r2, r11]\n\t"
22491 "ldrb r12, [r2, r12]\n\t"
22492 "ldrb r7, [r2, r7]\n\t"
22493 "ldrb lr, [r2, lr]\n\t"
22494 "eor r12, r12, r11, lsl #16\n\t"
22495 "ldm %[ks], {r8, r9, r10, r11}\n\t"
22496 "eor r7, r7, r12, lsl #8\n\t"
22497 "eor r7, r7, lr, lsl #16\n\t"
22498 /* XOR in Key Schedule */
22499 "eor r4, r4, r8\n\t"
22500 "eor r5, r5, r9\n\t"
22501 "eor r6, r6, r10\n\t"
22502 "eor r7, r7, r11\n\t"
22503#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
22504 "ldr lr, [sp, #16]\n\t"
22505#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22506 "eor r8, r4, r4, ror #16\n\t"
22507 "eor r9, r5, r5, ror #16\n\t"
22508 "eor r10, r6, r6, ror #16\n\t"
22509 "eor r11, r7, r7, ror #16\n\t"
22510 "bic r8, r8, #0xff0000\n\t"
22511 "bic r9, r9, #0xff0000\n\t"
22512 "bic r10, r10, #0xff0000\n\t"
22513 "bic r11, r11, #0xff0000\n\t"
22514 "ror r4, r4, #8\n\t"
22515 "ror r5, r5, #8\n\t"
22516 "ror r6, r6, #8\n\t"
22517 "ror r7, r7, #8\n\t"
22518 "eor r4, r4, r8, lsr #8\n\t"
22519 "eor r5, r5, r9, lsr #8\n\t"
22520 "eor r6, r6, r10, lsr #8\n\t"
22521 "eor r7, r7, r11, lsr #8\n\t"
22522#else
22523 "rev r4, r4\n\t"
22524 "rev r5, r5\n\t"
22525 "rev r6, r6\n\t"
22526 "rev r7, r7\n\t"
22527#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
22528#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22529 "ldr r8, [lr, #16]\n\t"
22530 "ldr r9, [lr, #20]\n\t"
22531#else
22532 "ldrd r8, r9, [lr, #16]\n\t"
22533#endif
22534#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22535 "ldr r10, [lr, #24]\n\t"
22536 "ldr r11, [lr, #28]\n\t"
22537#else
22538 "ldrd r10, r11, [lr, #24]\n\t"
22539#endif
22540 "pop {r1, r12, lr}\n\t"
22541 "ldr %[ks], [sp]\n\t"
22542 "eor r4, r4, r8\n\t"
22543 "eor r5, r5, r9\n\t"
22544 "eor r6, r6, r10\n\t"
22545 "eor r7, r7, r11\n\t"
22546 "str r4, [%[out]]\n\t"
22547 "str r5, [%[out], #4]\n\t"
22548 "str r6, [%[out], #8]\n\t"
22549 "str r7, [%[out], #12]\n\t"
22550 "subs r12, r12, #16\n\t"
22551 "add lr, lr, #16\n\t"
22552 "add %[out], %[out], #16\n\t"
22553 "bne L_AES_CBC_decrypt_loop_block_192_%=\n\t"
22554 "b L_AES_CBC_decrypt_end_%=\n\t"
22555 "\n"
22556 "L_AES_CBC_decrypt_loop_block_128_%=:\n\t"
22557 "push {r1, r12, lr}\n\t"
22558 "ldr r4, [lr]\n\t"
22559 "ldr r5, [lr, #4]\n\t"
22560 "ldr r6, [lr, #8]\n\t"
22561 "ldr r7, [lr, #12]\n\t"
22562 "ldr lr, [sp, #16]\n\t"
22563#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22564 "str r4, [lr, #16]\n\t"
22565 "str r5, [lr, #20]\n\t"
22566#else
22567 "strd r4, r5, [lr, #16]\n\t"
22568#endif
22569#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22570 "str r6, [lr, #24]\n\t"
22571 "str r7, [lr, #28]\n\t"
22572#else
22573 "strd r6, r7, [lr, #24]\n\t"
22574#endif
22575#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22576 "eor r8, r4, r4, ror #16\n\t"
22577 "eor r9, r5, r5, ror #16\n\t"
22578 "eor r10, r6, r6, ror #16\n\t"
22579 "eor r11, r7, r7, ror #16\n\t"
22580 "bic r8, r8, #0xff0000\n\t"
22581 "bic r9, r9, #0xff0000\n\t"
22582 "bic r10, r10, #0xff0000\n\t"
22583 "bic r11, r11, #0xff0000\n\t"
22584 "ror r4, r4, #8\n\t"
22585 "ror r5, r5, #8\n\t"
22586 "ror r6, r6, #8\n\t"
22587 "ror r7, r7, #8\n\t"
22588 "eor r4, r4, r8, lsr #8\n\t"
22589 "eor r5, r5, r9, lsr #8\n\t"
22590 "eor r6, r6, r10, lsr #8\n\t"
22591 "eor r7, r7, r11, lsr #8\n\t"
22592#else
22593 "rev r4, r4\n\t"
22594 "rev r5, r5\n\t"
22595 "rev r6, r6\n\t"
22596 "rev r7, r7\n\t"
22597#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
22598 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
22599 /* Round: 0 - XOR in key schedule */
22600 "eor r4, r4, r8\n\t"
22601 "eor r5, r5, r9\n\t"
22602 "eor r6, r6, r10\n\t"
22603 "eor r7, r7, r11\n\t"
22604 "mov r1, #4\n\t"
22605#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
22606 "bl AES_decrypt_block\n\t"
22607#else
22608 "\n"
22609 "L_AES_CBC_decrypt_block_nr_128_odd_%=:\n\t"
22610#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22611#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22612 "lsl r8, r7, #8\n\t"
22613 "lsr r8, r8, #24\n\t"
22614#else
22615 "uxtb r8, r7, ror #16\n\t"
22616#endif
22617#else
22618 "ubfx r8, r7, #16, #8\n\t"
22619#endif
22620 "lsr r11, r4, #24\n\t"
22621#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22622#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22623 "lsl r12, r6, #16\n\t"
22624 "lsr r12, r12, #24\n\t"
22625#else
22626 "uxtb r12, r6, ror #8\n\t"
22627#endif
22628#else
22629 "ubfx r12, r6, #8, #8\n\t"
22630#endif
22631#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22632#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22633 "lsl lr, r5, #24\n\t"
22634 "lsr lr, lr, #24\n\t"
22635#else
22636 "uxtb lr, r5\n\t"
22637#endif
22638#else
22639 "ubfx lr, r5, #0, #8\n\t"
22640#endif
22641 "ldr r8, [r0, r8, lsl #2]\n\t"
22642 "ldr r11, [r0, r11, lsl #2]\n\t"
22643 "ldr r12, [r0, r12, lsl #2]\n\t"
22644 "ldr lr, [r0, lr, lsl #2]\n\t"
22645#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22647 "lsl r9, r4, #8\n\t"
22648 "lsr r9, r9, #24\n\t"
22649#else
22650 "uxtb r9, r4, ror #16\n\t"
22651#endif
22652#else
22653 "ubfx r9, r4, #16, #8\n\t"
22654#endif
22655 "eor r8, r8, r11, ror #24\n\t"
22656 "lsr r11, r5, #24\n\t"
22657 "eor r8, r8, r12, ror #8\n\t"
22658#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22659#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22660 "lsl r12, r7, #16\n\t"
22661 "lsr r12, r12, #24\n\t"
22662#else
22663 "uxtb r12, r7, ror #8\n\t"
22664#endif
22665#else
22666 "ubfx r12, r7, #8, #8\n\t"
22667#endif
22668 "eor r8, r8, lr, ror #16\n\t"
22669#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22670#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22671 "lsl lr, r6, #24\n\t"
22672 "lsr lr, lr, #24\n\t"
22673#else
22674 "uxtb lr, r6\n\t"
22675#endif
22676#else
22677 "ubfx lr, r6, #0, #8\n\t"
22678#endif
22679 "ldr r9, [r0, r9, lsl #2]\n\t"
22680 "ldr r11, [r0, r11, lsl #2]\n\t"
22681 "ldr r12, [r0, r12, lsl #2]\n\t"
22682 "ldr lr, [r0, lr, lsl #2]\n\t"
22683#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22684#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22685 "lsl r10, r5, #8\n\t"
22686 "lsr r10, r10, #24\n\t"
22687#else
22688 "uxtb r10, r5, ror #16\n\t"
22689#endif
22690#else
22691 "ubfx r10, r5, #16, #8\n\t"
22692#endif
22693 "eor r9, r9, r11, ror #24\n\t"
22694 "lsr r11, r6, #24\n\t"
22695 "eor r9, r9, r12, ror #8\n\t"
22696#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22697#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22698 "lsl r12, r4, #16\n\t"
22699 "lsr r12, r12, #24\n\t"
22700#else
22701 "uxtb r12, r4, ror #8\n\t"
22702#endif
22703#else
22704 "ubfx r12, r4, #8, #8\n\t"
22705#endif
22706 "eor r9, r9, lr, ror #16\n\t"
22707#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22708#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22709 "lsl lr, r7, #24\n\t"
22710 "lsr lr, lr, #24\n\t"
22711#else
22712 "uxtb lr, r7\n\t"
22713#endif
22714#else
22715 "ubfx lr, r7, #0, #8\n\t"
22716#endif
22717 "ldr r10, [r0, r10, lsl #2]\n\t"
22718 "ldr r11, [r0, r11, lsl #2]\n\t"
22719 "ldr r12, [r0, r12, lsl #2]\n\t"
22720 "ldr lr, [r0, lr, lsl #2]\n\t"
22721#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22722#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22723 "lsl r4, r4, #24\n\t"
22724 "lsr r4, r4, #24\n\t"
22725#else
22726 "uxtb r4, r4\n\t"
22727#endif
22728#else
22729 "ubfx r4, r4, #0, #8\n\t"
22730#endif
22731 "eor r10, r10, r11, ror #24\n\t"
22732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22733#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22734 "lsl r11, r6, #8\n\t"
22735 "lsr r11, r11, #24\n\t"
22736#else
22737 "uxtb r11, r6, ror #16\n\t"
22738#endif
22739#else
22740 "ubfx r11, r6, #16, #8\n\t"
22741#endif
22742 "eor r10, r10, r12, ror #8\n\t"
22743 "lsr r12, r7, #24\n\t"
22744 "eor r10, r10, lr, ror #16\n\t"
22745#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22746#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22747 "lsl lr, r5, #16\n\t"
22748 "lsr lr, lr, #24\n\t"
22749#else
22750 "uxtb lr, r5, ror #8\n\t"
22751#endif
22752#else
22753 "ubfx lr, r5, #8, #8\n\t"
22754#endif
22755 "ldr r4, [r0, r4, lsl #2]\n\t"
22756 "ldr r12, [r0, r12, lsl #2]\n\t"
22757 "ldr r11, [r0, r11, lsl #2]\n\t"
22758 "ldr lr, [r0, lr, lsl #2]\n\t"
22759 "eor r12, r12, r4, ror #24\n\t"
22760 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
22761 "eor r11, r11, lr, ror #8\n\t"
22762 "eor r11, r11, r12, ror #24\n\t"
22763 /* XOR in Key Schedule */
22764 "eor r8, r8, r4\n\t"
22765 "eor r9, r9, r5\n\t"
22766 "eor r10, r10, r6\n\t"
22767 "eor r11, r11, r7\n\t"
22768#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22769#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22770 "lsl r4, r11, #8\n\t"
22771 "lsr r4, r4, #24\n\t"
22772#else
22773 "uxtb r4, r11, ror #16\n\t"
22774#endif
22775#else
22776 "ubfx r4, r11, #16, #8\n\t"
22777#endif
22778 "lsr r7, r8, #24\n\t"
22779#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22780#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22781 "lsl r12, r10, #16\n\t"
22782 "lsr r12, r12, #24\n\t"
22783#else
22784 "uxtb r12, r10, ror #8\n\t"
22785#endif
22786#else
22787 "ubfx r12, r10, #8, #8\n\t"
22788#endif
22789#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22790#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22791 "lsl lr, r9, #24\n\t"
22792 "lsr lr, lr, #24\n\t"
22793#else
22794 "uxtb lr, r9\n\t"
22795#endif
22796#else
22797 "ubfx lr, r9, #0, #8\n\t"
22798#endif
22799 "ldr r4, [r0, r4, lsl #2]\n\t"
22800 "ldr r7, [r0, r7, lsl #2]\n\t"
22801 "ldr r12, [r0, r12, lsl #2]\n\t"
22802 "ldr lr, [r0, lr, lsl #2]\n\t"
22803#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22804#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22805 "lsl r5, r8, #8\n\t"
22806 "lsr r5, r5, #24\n\t"
22807#else
22808 "uxtb r5, r8, ror #16\n\t"
22809#endif
22810#else
22811 "ubfx r5, r8, #16, #8\n\t"
22812#endif
22813 "eor r4, r4, r7, ror #24\n\t"
22814 "lsr r7, r9, #24\n\t"
22815 "eor r4, r4, r12, ror #8\n\t"
22816#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22817#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22818 "lsl r12, r11, #16\n\t"
22819 "lsr r12, r12, #24\n\t"
22820#else
22821 "uxtb r12, r11, ror #8\n\t"
22822#endif
22823#else
22824 "ubfx r12, r11, #8, #8\n\t"
22825#endif
22826 "eor r4, r4, lr, ror #16\n\t"
22827#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22828#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22829 "lsl lr, r10, #24\n\t"
22830 "lsr lr, lr, #24\n\t"
22831#else
22832 "uxtb lr, r10\n\t"
22833#endif
22834#else
22835 "ubfx lr, r10, #0, #8\n\t"
22836#endif
22837 "ldr r5, [r0, r5, lsl #2]\n\t"
22838 "ldr r7, [r0, r7, lsl #2]\n\t"
22839 "ldr r12, [r0, r12, lsl #2]\n\t"
22840 "ldr lr, [r0, lr, lsl #2]\n\t"
22841#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22842#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22843 "lsl r6, r9, #8\n\t"
22844 "lsr r6, r6, #24\n\t"
22845#else
22846 "uxtb r6, r9, ror #16\n\t"
22847#endif
22848#else
22849 "ubfx r6, r9, #16, #8\n\t"
22850#endif
22851 "eor r5, r5, r7, ror #24\n\t"
22852 "lsr r7, r10, #24\n\t"
22853 "eor r5, r5, r12, ror #8\n\t"
22854#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22855#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22856 "lsl r12, r8, #16\n\t"
22857 "lsr r12, r12, #24\n\t"
22858#else
22859 "uxtb r12, r8, ror #8\n\t"
22860#endif
22861#else
22862 "ubfx r12, r8, #8, #8\n\t"
22863#endif
22864 "eor r5, r5, lr, ror #16\n\t"
22865#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22866#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22867 "lsl lr, r11, #24\n\t"
22868 "lsr lr, lr, #24\n\t"
22869#else
22870 "uxtb lr, r11\n\t"
22871#endif
22872#else
22873 "ubfx lr, r11, #0, #8\n\t"
22874#endif
22875 "ldr r6, [r0, r6, lsl #2]\n\t"
22876 "ldr r7, [r0, r7, lsl #2]\n\t"
22877 "ldr r12, [r0, r12, lsl #2]\n\t"
22878 "ldr lr, [r0, lr, lsl #2]\n\t"
22879#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22880#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22881 "lsl r8, r8, #24\n\t"
22882 "lsr r8, r8, #24\n\t"
22883#else
22884 "uxtb r8, r8\n\t"
22885#endif
22886#else
22887 "ubfx r8, r8, #0, #8\n\t"
22888#endif
22889 "eor r6, r6, r7, ror #24\n\t"
22890#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22891#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22892 "lsl r7, r10, #8\n\t"
22893 "lsr r7, r7, #24\n\t"
22894#else
22895 "uxtb r7, r10, ror #16\n\t"
22896#endif
22897#else
22898 "ubfx r7, r10, #16, #8\n\t"
22899#endif
22900 "eor r6, r6, r12, ror #8\n\t"
22901 "lsr r12, r11, #24\n\t"
22902 "eor r6, r6, lr, ror #16\n\t"
22903#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22904#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22905 "lsl lr, r9, #16\n\t"
22906 "lsr lr, lr, #24\n\t"
22907#else
22908 "uxtb lr, r9, ror #8\n\t"
22909#endif
22910#else
22911 "ubfx lr, r9, #8, #8\n\t"
22912#endif
22913 "ldr r8, [r0, r8, lsl #2]\n\t"
22914 "ldr r12, [r0, r12, lsl #2]\n\t"
22915 "ldr r7, [r0, r7, lsl #2]\n\t"
22916 "ldr lr, [r0, lr, lsl #2]\n\t"
22917 "eor r12, r12, r8, ror #24\n\t"
22918 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
22919 "eor r7, r7, lr, ror #8\n\t"
22920 "eor r7, r7, r12, ror #24\n\t"
22921 /* XOR in Key Schedule */
22922 "eor r4, r4, r8\n\t"
22923 "eor r5, r5, r9\n\t"
22924 "eor r6, r6, r10\n\t"
22925 "eor r7, r7, r11\n\t"
22926 "subs r1, r1, #1\n\t"
22927 "bne L_AES_CBC_decrypt_block_nr_128_odd_%=\n\t"
22928#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22930 "lsl r8, r7, #8\n\t"
22931 "lsr r8, r8, #24\n\t"
22932#else
22933 "uxtb r8, r7, ror #16\n\t"
22934#endif
22935#else
22936 "ubfx r8, r7, #16, #8\n\t"
22937#endif
22938 "lsr r11, r4, #24\n\t"
22939#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22940#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22941 "lsl r12, r6, #16\n\t"
22942 "lsr r12, r12, #24\n\t"
22943#else
22944 "uxtb r12, r6, ror #8\n\t"
22945#endif
22946#else
22947 "ubfx r12, r6, #8, #8\n\t"
22948#endif
22949#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22950#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22951 "lsl lr, r5, #24\n\t"
22952 "lsr lr, lr, #24\n\t"
22953#else
22954 "uxtb lr, r5\n\t"
22955#endif
22956#else
22957 "ubfx lr, r5, #0, #8\n\t"
22958#endif
22959 "ldr r8, [r0, r8, lsl #2]\n\t"
22960 "ldr r11, [r0, r11, lsl #2]\n\t"
22961 "ldr r12, [r0, r12, lsl #2]\n\t"
22962 "ldr lr, [r0, lr, lsl #2]\n\t"
22963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22964#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22965 "lsl r9, r4, #8\n\t"
22966 "lsr r9, r9, #24\n\t"
22967#else
22968 "uxtb r9, r4, ror #16\n\t"
22969#endif
22970#else
22971 "ubfx r9, r4, #16, #8\n\t"
22972#endif
22973 "eor r8, r8, r11, ror #24\n\t"
22974 "lsr r11, r5, #24\n\t"
22975 "eor r8, r8, r12, ror #8\n\t"
22976#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22977#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22978 "lsl r12, r7, #16\n\t"
22979 "lsr r12, r12, #24\n\t"
22980#else
22981 "uxtb r12, r7, ror #8\n\t"
22982#endif
22983#else
22984 "ubfx r12, r7, #8, #8\n\t"
22985#endif
22986 "eor r8, r8, lr, ror #16\n\t"
22987#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
22988#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
22989 "lsl lr, r6, #24\n\t"
22990 "lsr lr, lr, #24\n\t"
22991#else
22992 "uxtb lr, r6\n\t"
22993#endif
22994#else
22995 "ubfx lr, r6, #0, #8\n\t"
22996#endif
22997 "ldr r9, [r0, r9, lsl #2]\n\t"
22998 "ldr r11, [r0, r11, lsl #2]\n\t"
22999 "ldr r12, [r0, r12, lsl #2]\n\t"
23000 "ldr lr, [r0, lr, lsl #2]\n\t"
23001#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23002#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23003 "lsl r10, r5, #8\n\t"
23004 "lsr r10, r10, #24\n\t"
23005#else
23006 "uxtb r10, r5, ror #16\n\t"
23007#endif
23008#else
23009 "ubfx r10, r5, #16, #8\n\t"
23010#endif
23011 "eor r9, r9, r11, ror #24\n\t"
23012 "lsr r11, r6, #24\n\t"
23013 "eor r9, r9, r12, ror #8\n\t"
23014#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23015#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23016 "lsl r12, r4, #16\n\t"
23017 "lsr r12, r12, #24\n\t"
23018#else
23019 "uxtb r12, r4, ror #8\n\t"
23020#endif
23021#else
23022 "ubfx r12, r4, #8, #8\n\t"
23023#endif
23024 "eor r9, r9, lr, ror #16\n\t"
23025#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23026#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23027 "lsl lr, r7, #24\n\t"
23028 "lsr lr, lr, #24\n\t"
23029#else
23030 "uxtb lr, r7\n\t"
23031#endif
23032#else
23033 "ubfx lr, r7, #0, #8\n\t"
23034#endif
23035 "ldr r10, [r0, r10, lsl #2]\n\t"
23036 "ldr r11, [r0, r11, lsl #2]\n\t"
23037 "ldr r12, [r0, r12, lsl #2]\n\t"
23038 "ldr lr, [r0, lr, lsl #2]\n\t"
23039#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23040#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23041 "lsl r4, r4, #24\n\t"
23042 "lsr r4, r4, #24\n\t"
23043#else
23044 "uxtb r4, r4\n\t"
23045#endif
23046#else
23047 "ubfx r4, r4, #0, #8\n\t"
23048#endif
23049 "eor r10, r10, r11, ror #24\n\t"
23050#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23051#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23052 "lsl r11, r6, #8\n\t"
23053 "lsr r11, r11, #24\n\t"
23054#else
23055 "uxtb r11, r6, ror #16\n\t"
23056#endif
23057#else
23058 "ubfx r11, r6, #16, #8\n\t"
23059#endif
23060 "eor r10, r10, r12, ror #8\n\t"
23061 "lsr r12, r7, #24\n\t"
23062 "eor r10, r10, lr, ror #16\n\t"
23063#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23064#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23065 "lsl lr, r5, #16\n\t"
23066 "lsr lr, lr, #24\n\t"
23067#else
23068 "uxtb lr, r5, ror #8\n\t"
23069#endif
23070#else
23071 "ubfx lr, r5, #8, #8\n\t"
23072#endif
23073 "ldr r4, [r0, r4, lsl #2]\n\t"
23074 "ldr r12, [r0, r12, lsl #2]\n\t"
23075 "ldr r11, [r0, r11, lsl #2]\n\t"
23076 "ldr lr, [r0, lr, lsl #2]\n\t"
23077 "eor r12, r12, r4, ror #24\n\t"
23078 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
23079 "eor r11, r11, lr, ror #8\n\t"
23080 "eor r11, r11, r12, ror #24\n\t"
23081 /* XOR in Key Schedule */
23082 "eor r8, r8, r4\n\t"
23083 "eor r9, r9, r5\n\t"
23084 "eor r10, r10, r6\n\t"
23085 "eor r11, r11, r7\n\t"
23086#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23087#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23088 "lsl r4, r9, #24\n\t"
23089 "lsr r4, r4, #24\n\t"
23090#else
23091 "uxtb r4, r9\n\t"
23092#endif
23093#else
23094 "ubfx r4, r9, #0, #8\n\t"
23095#endif
23096#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23097#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23098 "lsl r7, r10, #16\n\t"
23099 "lsr r7, r7, #24\n\t"
23100#else
23101 "uxtb r7, r10, ror #8\n\t"
23102#endif
23103#else
23104 "ubfx r7, r10, #8, #8\n\t"
23105#endif
23106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23107#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23108 "lsl r12, r11, #8\n\t"
23109 "lsr r12, r12, #24\n\t"
23110#else
23111 "uxtb r12, r11, ror #16\n\t"
23112#endif
23113#else
23114 "ubfx r12, r11, #16, #8\n\t"
23115#endif
23116 "lsr lr, r8, #24\n\t"
23117 "ldrb r4, [r2, r4]\n\t"
23118 "ldrb r7, [r2, r7]\n\t"
23119 "ldrb r12, [r2, r12]\n\t"
23120 "ldrb lr, [r2, lr]\n\t"
23121#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23122#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23123 "lsl r5, r10, #24\n\t"
23124 "lsr r5, r5, #24\n\t"
23125#else
23126 "uxtb r5, r10\n\t"
23127#endif
23128#else
23129 "ubfx r5, r10, #0, #8\n\t"
23130#endif
23131 "eor r4, r4, r7, lsl #8\n\t"
23132#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23133#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23134 "lsl r7, r11, #16\n\t"
23135 "lsr r7, r7, #24\n\t"
23136#else
23137 "uxtb r7, r11, ror #8\n\t"
23138#endif
23139#else
23140 "ubfx r7, r11, #8, #8\n\t"
23141#endif
23142 "eor r4, r4, r12, lsl #16\n\t"
23143#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23144#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23145 "lsl r12, r8, #8\n\t"
23146 "lsr r12, r12, #24\n\t"
23147#else
23148 "uxtb r12, r8, ror #16\n\t"
23149#endif
23150#else
23151 "ubfx r12, r8, #16, #8\n\t"
23152#endif
23153 "eor r4, r4, lr, lsl #24\n\t"
23154 "lsr lr, r9, #24\n\t"
23155 "ldrb r7, [r2, r7]\n\t"
23156 "ldrb lr, [r2, lr]\n\t"
23157 "ldrb r5, [r2, r5]\n\t"
23158 "ldrb r12, [r2, r12]\n\t"
23159#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23160#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23161 "lsl r6, r11, #24\n\t"
23162 "lsr r6, r6, #24\n\t"
23163#else
23164 "uxtb r6, r11\n\t"
23165#endif
23166#else
23167 "ubfx r6, r11, #0, #8\n\t"
23168#endif
23169 "eor r5, r5, r7, lsl #8\n\t"
23170#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23171#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23172 "lsl r7, r8, #16\n\t"
23173 "lsr r7, r7, #24\n\t"
23174#else
23175 "uxtb r7, r8, ror #8\n\t"
23176#endif
23177#else
23178 "ubfx r7, r8, #8, #8\n\t"
23179#endif
23180 "eor r5, r5, r12, lsl #16\n\t"
23181#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23182#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23183 "lsl r12, r9, #8\n\t"
23184 "lsr r12, r12, #24\n\t"
23185#else
23186 "uxtb r12, r9, ror #16\n\t"
23187#endif
23188#else
23189 "ubfx r12, r9, #16, #8\n\t"
23190#endif
23191 "eor r5, r5, lr, lsl #24\n\t"
23192 "lsr lr, r10, #24\n\t"
23193 "ldrb r7, [r2, r7]\n\t"
23194 "ldrb lr, [r2, lr]\n\t"
23195 "ldrb r6, [r2, r6]\n\t"
23196 "ldrb r12, [r2, r12]\n\t"
23197 "lsr r11, r11, #24\n\t"
23198 "eor r6, r6, r7, lsl #8\n\t"
23199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23200#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23201 "lsl r7, r8, #24\n\t"
23202 "lsr r7, r7, #24\n\t"
23203#else
23204 "uxtb r7, r8\n\t"
23205#endif
23206#else
23207 "ubfx r7, r8, #0, #8\n\t"
23208#endif
23209 "eor r6, r6, r12, lsl #16\n\t"
23210#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23211#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23212 "lsl r12, r9, #16\n\t"
23213 "lsr r12, r12, #24\n\t"
23214#else
23215 "uxtb r12, r9, ror #8\n\t"
23216#endif
23217#else
23218 "ubfx r12, r9, #8, #8\n\t"
23219#endif
23220 "eor r6, r6, lr, lsl #24\n\t"
23221#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23223 "lsl lr, r10, #8\n\t"
23224 "lsr lr, lr, #24\n\t"
23225#else
23226 "uxtb lr, r10, ror #16\n\t"
23227#endif
23228#else
23229 "ubfx lr, r10, #16, #8\n\t"
23230#endif
23231 "ldrb r11, [r2, r11]\n\t"
23232 "ldrb r12, [r2, r12]\n\t"
23233 "ldrb r7, [r2, r7]\n\t"
23234 "ldrb lr, [r2, lr]\n\t"
23235 "eor r12, r12, r11, lsl #16\n\t"
23236 "ldm %[ks], {r8, r9, r10, r11}\n\t"
23237 "eor r7, r7, r12, lsl #8\n\t"
23238 "eor r7, r7, lr, lsl #16\n\t"
23239 /* XOR in Key Schedule */
23240 "eor r4, r4, r8\n\t"
23241 "eor r5, r5, r9\n\t"
23242 "eor r6, r6, r10\n\t"
23243 "eor r7, r7, r11\n\t"
23244#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
23245 "ldr lr, [sp, #16]\n\t"
23246#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23247 "eor r8, r4, r4, ror #16\n\t"
23248 "eor r9, r5, r5, ror #16\n\t"
23249 "eor r10, r6, r6, ror #16\n\t"
23250 "eor r11, r7, r7, ror #16\n\t"
23251 "bic r8, r8, #0xff0000\n\t"
23252 "bic r9, r9, #0xff0000\n\t"
23253 "bic r10, r10, #0xff0000\n\t"
23254 "bic r11, r11, #0xff0000\n\t"
23255 "ror r4, r4, #8\n\t"
23256 "ror r5, r5, #8\n\t"
23257 "ror r6, r6, #8\n\t"
23258 "ror r7, r7, #8\n\t"
23259 "eor r4, r4, r8, lsr #8\n\t"
23260 "eor r5, r5, r9, lsr #8\n\t"
23261 "eor r6, r6, r10, lsr #8\n\t"
23262 "eor r7, r7, r11, lsr #8\n\t"
23263#else
23264 "rev r4, r4\n\t"
23265 "rev r5, r5\n\t"
23266 "rev r6, r6\n\t"
23267 "rev r7, r7\n\t"
23268#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
23269 "ldm lr, {r8, r9, r10, r11}\n\t"
23270 "pop {r1, r12, lr}\n\t"
23271 "ldr %[ks], [sp]\n\t"
23272 "eor r4, r4, r8\n\t"
23273 "eor r5, r5, r9\n\t"
23274 "eor r6, r6, r10\n\t"
23275 "eor r7, r7, r11\n\t"
23276 "str r4, [%[out]]\n\t"
23277 "str r5, [%[out], #4]\n\t"
23278 "str r6, [%[out], #8]\n\t"
23279 "str r7, [%[out], #12]\n\t"
23280 "subs r12, r12, #16\n\t"
23281 "add lr, lr, #16\n\t"
23282 "add %[out], %[out], #16\n\t"
23283 "beq L_AES_CBC_decrypt_end_odd_%=\n\t"
23284 "push {r1, r12, lr}\n\t"
23285 "ldr r4, [lr]\n\t"
23286 "ldr r5, [lr, #4]\n\t"
23287 "ldr r6, [lr, #8]\n\t"
23288 "ldr r7, [lr, #12]\n\t"
23289 "ldr lr, [sp, #16]\n\t"
23290#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23291 "stm lr, {r4, r5}\n\t"
23292#else
23293 "strd r4, r5, [lr]\n\t"
23294#endif
23295#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23296 "str r6, [lr, #8]\n\t"
23297 "str r7, [lr, #12]\n\t"
23298#else
23299 "strd r6, r7, [lr, #8]\n\t"
23300#endif
23301#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23302 "eor r8, r4, r4, ror #16\n\t"
23303 "eor r9, r5, r5, ror #16\n\t"
23304 "eor r10, r6, r6, ror #16\n\t"
23305 "eor r11, r7, r7, ror #16\n\t"
23306 "bic r8, r8, #0xff0000\n\t"
23307 "bic r9, r9, #0xff0000\n\t"
23308 "bic r10, r10, #0xff0000\n\t"
23309 "bic r11, r11, #0xff0000\n\t"
23310 "ror r4, r4, #8\n\t"
23311 "ror r5, r5, #8\n\t"
23312 "ror r6, r6, #8\n\t"
23313 "ror r7, r7, #8\n\t"
23314 "eor r4, r4, r8, lsr #8\n\t"
23315 "eor r5, r5, r9, lsr #8\n\t"
23316 "eor r6, r6, r10, lsr #8\n\t"
23317 "eor r7, r7, r11, lsr #8\n\t"
23318#else
23319 "rev r4, r4\n\t"
23320 "rev r5, r5\n\t"
23321 "rev r6, r6\n\t"
23322 "rev r7, r7\n\t"
23323#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
23324 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
23325 /* Round: 0 - XOR in key schedule */
23326 "eor r4, r4, r8\n\t"
23327 "eor r5, r5, r9\n\t"
23328 "eor r6, r6, r10\n\t"
23329 "eor r7, r7, r11\n\t"
23330 "mov r1, #4\n\t"
23331#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
23332 "bl AES_decrypt_block\n\t"
23333#else
23334 "\n"
23335 "L_AES_CBC_decrypt_block_nr_128_even_%=:\n\t"
23336#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23337#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23338 "lsl r8, r7, #8\n\t"
23339 "lsr r8, r8, #24\n\t"
23340#else
23341 "uxtb r8, r7, ror #16\n\t"
23342#endif
23343#else
23344 "ubfx r8, r7, #16, #8\n\t"
23345#endif
23346 "lsr r11, r4, #24\n\t"
23347#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23348#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23349 "lsl r12, r6, #16\n\t"
23350 "lsr r12, r12, #24\n\t"
23351#else
23352 "uxtb r12, r6, ror #8\n\t"
23353#endif
23354#else
23355 "ubfx r12, r6, #8, #8\n\t"
23356#endif
23357#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23358#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23359 "lsl lr, r5, #24\n\t"
23360 "lsr lr, lr, #24\n\t"
23361#else
23362 "uxtb lr, r5\n\t"
23363#endif
23364#else
23365 "ubfx lr, r5, #0, #8\n\t"
23366#endif
23367 "ldr r8, [r0, r8, lsl #2]\n\t"
23368 "ldr r11, [r0, r11, lsl #2]\n\t"
23369 "ldr r12, [r0, r12, lsl #2]\n\t"
23370 "ldr lr, [r0, lr, lsl #2]\n\t"
23371#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23372#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23373 "lsl r9, r4, #8\n\t"
23374 "lsr r9, r9, #24\n\t"
23375#else
23376 "uxtb r9, r4, ror #16\n\t"
23377#endif
23378#else
23379 "ubfx r9, r4, #16, #8\n\t"
23380#endif
23381 "eor r8, r8, r11, ror #24\n\t"
23382 "lsr r11, r5, #24\n\t"
23383 "eor r8, r8, r12, ror #8\n\t"
23384#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23385#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23386 "lsl r12, r7, #16\n\t"
23387 "lsr r12, r12, #24\n\t"
23388#else
23389 "uxtb r12, r7, ror #8\n\t"
23390#endif
23391#else
23392 "ubfx r12, r7, #8, #8\n\t"
23393#endif
23394 "eor r8, r8, lr, ror #16\n\t"
23395#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23396#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23397 "lsl lr, r6, #24\n\t"
23398 "lsr lr, lr, #24\n\t"
23399#else
23400 "uxtb lr, r6\n\t"
23401#endif
23402#else
23403 "ubfx lr, r6, #0, #8\n\t"
23404#endif
23405 "ldr r9, [r0, r9, lsl #2]\n\t"
23406 "ldr r11, [r0, r11, lsl #2]\n\t"
23407 "ldr r12, [r0, r12, lsl #2]\n\t"
23408 "ldr lr, [r0, lr, lsl #2]\n\t"
23409#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23410#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23411 "lsl r10, r5, #8\n\t"
23412 "lsr r10, r10, #24\n\t"
23413#else
23414 "uxtb r10, r5, ror #16\n\t"
23415#endif
23416#else
23417 "ubfx r10, r5, #16, #8\n\t"
23418#endif
23419 "eor r9, r9, r11, ror #24\n\t"
23420 "lsr r11, r6, #24\n\t"
23421 "eor r9, r9, r12, ror #8\n\t"
23422#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23423#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23424 "lsl r12, r4, #16\n\t"
23425 "lsr r12, r12, #24\n\t"
23426#else
23427 "uxtb r12, r4, ror #8\n\t"
23428#endif
23429#else
23430 "ubfx r12, r4, #8, #8\n\t"
23431#endif
23432 "eor r9, r9, lr, ror #16\n\t"
23433#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23434#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23435 "lsl lr, r7, #24\n\t"
23436 "lsr lr, lr, #24\n\t"
23437#else
23438 "uxtb lr, r7\n\t"
23439#endif
23440#else
23441 "ubfx lr, r7, #0, #8\n\t"
23442#endif
23443 "ldr r10, [r0, r10, lsl #2]\n\t"
23444 "ldr r11, [r0, r11, lsl #2]\n\t"
23445 "ldr r12, [r0, r12, lsl #2]\n\t"
23446 "ldr lr, [r0, lr, lsl #2]\n\t"
23447#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23448#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23449 "lsl r4, r4, #24\n\t"
23450 "lsr r4, r4, #24\n\t"
23451#else
23452 "uxtb r4, r4\n\t"
23453#endif
23454#else
23455 "ubfx r4, r4, #0, #8\n\t"
23456#endif
23457 "eor r10, r10, r11, ror #24\n\t"
23458#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23459#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23460 "lsl r11, r6, #8\n\t"
23461 "lsr r11, r11, #24\n\t"
23462#else
23463 "uxtb r11, r6, ror #16\n\t"
23464#endif
23465#else
23466 "ubfx r11, r6, #16, #8\n\t"
23467#endif
23468 "eor r10, r10, r12, ror #8\n\t"
23469 "lsr r12, r7, #24\n\t"
23470 "eor r10, r10, lr, ror #16\n\t"
23471#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23472#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23473 "lsl lr, r5, #16\n\t"
23474 "lsr lr, lr, #24\n\t"
23475#else
23476 "uxtb lr, r5, ror #8\n\t"
23477#endif
23478#else
23479 "ubfx lr, r5, #8, #8\n\t"
23480#endif
23481 "ldr r4, [r0, r4, lsl #2]\n\t"
23482 "ldr r12, [r0, r12, lsl #2]\n\t"
23483 "ldr r11, [r0, r11, lsl #2]\n\t"
23484 "ldr lr, [r0, lr, lsl #2]\n\t"
23485 "eor r12, r12, r4, ror #24\n\t"
23486 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
23487 "eor r11, r11, lr, ror #8\n\t"
23488 "eor r11, r11, r12, ror #24\n\t"
23489 /* XOR in Key Schedule */
23490 "eor r8, r8, r4\n\t"
23491 "eor r9, r9, r5\n\t"
23492 "eor r10, r10, r6\n\t"
23493 "eor r11, r11, r7\n\t"
23494#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23496 "lsl r4, r11, #8\n\t"
23497 "lsr r4, r4, #24\n\t"
23498#else
23499 "uxtb r4, r11, ror #16\n\t"
23500#endif
23501#else
23502 "ubfx r4, r11, #16, #8\n\t"
23503#endif
23504 "lsr r7, r8, #24\n\t"
23505#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23506#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23507 "lsl r12, r10, #16\n\t"
23508 "lsr r12, r12, #24\n\t"
23509#else
23510 "uxtb r12, r10, ror #8\n\t"
23511#endif
23512#else
23513 "ubfx r12, r10, #8, #8\n\t"
23514#endif
23515#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23516#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23517 "lsl lr, r9, #24\n\t"
23518 "lsr lr, lr, #24\n\t"
23519#else
23520 "uxtb lr, r9\n\t"
23521#endif
23522#else
23523 "ubfx lr, r9, #0, #8\n\t"
23524#endif
23525 "ldr r4, [r0, r4, lsl #2]\n\t"
23526 "ldr r7, [r0, r7, lsl #2]\n\t"
23527 "ldr r12, [r0, r12, lsl #2]\n\t"
23528 "ldr lr, [r0, lr, lsl #2]\n\t"
23529#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23530#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23531 "lsl r5, r8, #8\n\t"
23532 "lsr r5, r5, #24\n\t"
23533#else
23534 "uxtb r5, r8, ror #16\n\t"
23535#endif
23536#else
23537 "ubfx r5, r8, #16, #8\n\t"
23538#endif
23539 "eor r4, r4, r7, ror #24\n\t"
23540 "lsr r7, r9, #24\n\t"
23541 "eor r4, r4, r12, ror #8\n\t"
23542#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23543#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23544 "lsl r12, r11, #16\n\t"
23545 "lsr r12, r12, #24\n\t"
23546#else
23547 "uxtb r12, r11, ror #8\n\t"
23548#endif
23549#else
23550 "ubfx r12, r11, #8, #8\n\t"
23551#endif
23552 "eor r4, r4, lr, ror #16\n\t"
23553#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23554#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23555 "lsl lr, r10, #24\n\t"
23556 "lsr lr, lr, #24\n\t"
23557#else
23558 "uxtb lr, r10\n\t"
23559#endif
23560#else
23561 "ubfx lr, r10, #0, #8\n\t"
23562#endif
23563 "ldr r5, [r0, r5, lsl #2]\n\t"
23564 "ldr r7, [r0, r7, lsl #2]\n\t"
23565 "ldr r12, [r0, r12, lsl #2]\n\t"
23566 "ldr lr, [r0, lr, lsl #2]\n\t"
23567#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23568#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23569 "lsl r6, r9, #8\n\t"
23570 "lsr r6, r6, #24\n\t"
23571#else
23572 "uxtb r6, r9, ror #16\n\t"
23573#endif
23574#else
23575 "ubfx r6, r9, #16, #8\n\t"
23576#endif
23577 "eor r5, r5, r7, ror #24\n\t"
23578 "lsr r7, r10, #24\n\t"
23579 "eor r5, r5, r12, ror #8\n\t"
23580#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23581#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23582 "lsl r12, r8, #16\n\t"
23583 "lsr r12, r12, #24\n\t"
23584#else
23585 "uxtb r12, r8, ror #8\n\t"
23586#endif
23587#else
23588 "ubfx r12, r8, #8, #8\n\t"
23589#endif
23590 "eor r5, r5, lr, ror #16\n\t"
23591#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23592#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23593 "lsl lr, r11, #24\n\t"
23594 "lsr lr, lr, #24\n\t"
23595#else
23596 "uxtb lr, r11\n\t"
23597#endif
23598#else
23599 "ubfx lr, r11, #0, #8\n\t"
23600#endif
23601 "ldr r6, [r0, r6, lsl #2]\n\t"
23602 "ldr r7, [r0, r7, lsl #2]\n\t"
23603 "ldr r12, [r0, r12, lsl #2]\n\t"
23604 "ldr lr, [r0, lr, lsl #2]\n\t"
23605#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23606#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23607 "lsl r8, r8, #24\n\t"
23608 "lsr r8, r8, #24\n\t"
23609#else
23610 "uxtb r8, r8\n\t"
23611#endif
23612#else
23613 "ubfx r8, r8, #0, #8\n\t"
23614#endif
23615 "eor r6, r6, r7, ror #24\n\t"
23616#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23617#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23618 "lsl r7, r10, #8\n\t"
23619 "lsr r7, r7, #24\n\t"
23620#else
23621 "uxtb r7, r10, ror #16\n\t"
23622#endif
23623#else
23624 "ubfx r7, r10, #16, #8\n\t"
23625#endif
23626 "eor r6, r6, r12, ror #8\n\t"
23627 "lsr r12, r11, #24\n\t"
23628 "eor r6, r6, lr, ror #16\n\t"
23629#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23630#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23631 "lsl lr, r9, #16\n\t"
23632 "lsr lr, lr, #24\n\t"
23633#else
23634 "uxtb lr, r9, ror #8\n\t"
23635#endif
23636#else
23637 "ubfx lr, r9, #8, #8\n\t"
23638#endif
23639 "ldr r8, [r0, r8, lsl #2]\n\t"
23640 "ldr r12, [r0, r12, lsl #2]\n\t"
23641 "ldr r7, [r0, r7, lsl #2]\n\t"
23642 "ldr lr, [r0, lr, lsl #2]\n\t"
23643 "eor r12, r12, r8, ror #24\n\t"
23644 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
23645 "eor r7, r7, lr, ror #8\n\t"
23646 "eor r7, r7, r12, ror #24\n\t"
23647 /* XOR in Key Schedule */
23648 "eor r4, r4, r8\n\t"
23649 "eor r5, r5, r9\n\t"
23650 "eor r6, r6, r10\n\t"
23651 "eor r7, r7, r11\n\t"
23652 "subs r1, r1, #1\n\t"
23653 "bne L_AES_CBC_decrypt_block_nr_128_even_%=\n\t"
23654#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23655#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23656 "lsl r8, r7, #8\n\t"
23657 "lsr r8, r8, #24\n\t"
23658#else
23659 "uxtb r8, r7, ror #16\n\t"
23660#endif
23661#else
23662 "ubfx r8, r7, #16, #8\n\t"
23663#endif
23664 "lsr r11, r4, #24\n\t"
23665#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23666#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23667 "lsl r12, r6, #16\n\t"
23668 "lsr r12, r12, #24\n\t"
23669#else
23670 "uxtb r12, r6, ror #8\n\t"
23671#endif
23672#else
23673 "ubfx r12, r6, #8, #8\n\t"
23674#endif
23675#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23676#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23677 "lsl lr, r5, #24\n\t"
23678 "lsr lr, lr, #24\n\t"
23679#else
23680 "uxtb lr, r5\n\t"
23681#endif
23682#else
23683 "ubfx lr, r5, #0, #8\n\t"
23684#endif
23685 "ldr r8, [r0, r8, lsl #2]\n\t"
23686 "ldr r11, [r0, r11, lsl #2]\n\t"
23687 "ldr r12, [r0, r12, lsl #2]\n\t"
23688 "ldr lr, [r0, lr, lsl #2]\n\t"
23689#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23690#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23691 "lsl r9, r4, #8\n\t"
23692 "lsr r9, r9, #24\n\t"
23693#else
23694 "uxtb r9, r4, ror #16\n\t"
23695#endif
23696#else
23697 "ubfx r9, r4, #16, #8\n\t"
23698#endif
23699 "eor r8, r8, r11, ror #24\n\t"
23700 "lsr r11, r5, #24\n\t"
23701 "eor r8, r8, r12, ror #8\n\t"
23702#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23703#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23704 "lsl r12, r7, #16\n\t"
23705 "lsr r12, r12, #24\n\t"
23706#else
23707 "uxtb r12, r7, ror #8\n\t"
23708#endif
23709#else
23710 "ubfx r12, r7, #8, #8\n\t"
23711#endif
23712 "eor r8, r8, lr, ror #16\n\t"
23713#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23714#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23715 "lsl lr, r6, #24\n\t"
23716 "lsr lr, lr, #24\n\t"
23717#else
23718 "uxtb lr, r6\n\t"
23719#endif
23720#else
23721 "ubfx lr, r6, #0, #8\n\t"
23722#endif
23723 "ldr r9, [r0, r9, lsl #2]\n\t"
23724 "ldr r11, [r0, r11, lsl #2]\n\t"
23725 "ldr r12, [r0, r12, lsl #2]\n\t"
23726 "ldr lr, [r0, lr, lsl #2]\n\t"
23727#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23728#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23729 "lsl r10, r5, #8\n\t"
23730 "lsr r10, r10, #24\n\t"
23731#else
23732 "uxtb r10, r5, ror #16\n\t"
23733#endif
23734#else
23735 "ubfx r10, r5, #16, #8\n\t"
23736#endif
23737 "eor r9, r9, r11, ror #24\n\t"
23738 "lsr r11, r6, #24\n\t"
23739 "eor r9, r9, r12, ror #8\n\t"
23740#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23741#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23742 "lsl r12, r4, #16\n\t"
23743 "lsr r12, r12, #24\n\t"
23744#else
23745 "uxtb r12, r4, ror #8\n\t"
23746#endif
23747#else
23748 "ubfx r12, r4, #8, #8\n\t"
23749#endif
23750 "eor r9, r9, lr, ror #16\n\t"
23751#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23752#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23753 "lsl lr, r7, #24\n\t"
23754 "lsr lr, lr, #24\n\t"
23755#else
23756 "uxtb lr, r7\n\t"
23757#endif
23758#else
23759 "ubfx lr, r7, #0, #8\n\t"
23760#endif
23761 "ldr r10, [r0, r10, lsl #2]\n\t"
23762 "ldr r11, [r0, r11, lsl #2]\n\t"
23763 "ldr r12, [r0, r12, lsl #2]\n\t"
23764 "ldr lr, [r0, lr, lsl #2]\n\t"
23765#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23766#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23767 "lsl r4, r4, #24\n\t"
23768 "lsr r4, r4, #24\n\t"
23769#else
23770 "uxtb r4, r4\n\t"
23771#endif
23772#else
23773 "ubfx r4, r4, #0, #8\n\t"
23774#endif
23775 "eor r10, r10, r11, ror #24\n\t"
23776#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23777#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23778 "lsl r11, r6, #8\n\t"
23779 "lsr r11, r11, #24\n\t"
23780#else
23781 "uxtb r11, r6, ror #16\n\t"
23782#endif
23783#else
23784 "ubfx r11, r6, #16, #8\n\t"
23785#endif
23786 "eor r10, r10, r12, ror #8\n\t"
23787 "lsr r12, r7, #24\n\t"
23788 "eor r10, r10, lr, ror #16\n\t"
23789#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23790#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23791 "lsl lr, r5, #16\n\t"
23792 "lsr lr, lr, #24\n\t"
23793#else
23794 "uxtb lr, r5, ror #8\n\t"
23795#endif
23796#else
23797 "ubfx lr, r5, #8, #8\n\t"
23798#endif
23799 "ldr r4, [r0, r4, lsl #2]\n\t"
23800 "ldr r12, [r0, r12, lsl #2]\n\t"
23801 "ldr r11, [r0, r11, lsl #2]\n\t"
23802 "ldr lr, [r0, lr, lsl #2]\n\t"
23803 "eor r12, r12, r4, ror #24\n\t"
23804 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
23805 "eor r11, r11, lr, ror #8\n\t"
23806 "eor r11, r11, r12, ror #24\n\t"
23807 /* XOR in Key Schedule */
23808 "eor r8, r8, r4\n\t"
23809 "eor r9, r9, r5\n\t"
23810 "eor r10, r10, r6\n\t"
23811 "eor r11, r11, r7\n\t"
23812#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23813#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23814 "lsl r4, r9, #24\n\t"
23815 "lsr r4, r4, #24\n\t"
23816#else
23817 "uxtb r4, r9\n\t"
23818#endif
23819#else
23820 "ubfx r4, r9, #0, #8\n\t"
23821#endif
23822#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23823#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23824 "lsl r7, r10, #16\n\t"
23825 "lsr r7, r7, #24\n\t"
23826#else
23827 "uxtb r7, r10, ror #8\n\t"
23828#endif
23829#else
23830 "ubfx r7, r10, #8, #8\n\t"
23831#endif
23832#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23833#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23834 "lsl r12, r11, #8\n\t"
23835 "lsr r12, r12, #24\n\t"
23836#else
23837 "uxtb r12, r11, ror #16\n\t"
23838#endif
23839#else
23840 "ubfx r12, r11, #16, #8\n\t"
23841#endif
23842 "lsr lr, r8, #24\n\t"
23843 "ldrb r4, [r2, r4]\n\t"
23844 "ldrb r7, [r2, r7]\n\t"
23845 "ldrb r12, [r2, r12]\n\t"
23846 "ldrb lr, [r2, lr]\n\t"
23847#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23848#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23849 "lsl r5, r10, #24\n\t"
23850 "lsr r5, r5, #24\n\t"
23851#else
23852 "uxtb r5, r10\n\t"
23853#endif
23854#else
23855 "ubfx r5, r10, #0, #8\n\t"
23856#endif
23857 "eor r4, r4, r7, lsl #8\n\t"
23858#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23859#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23860 "lsl r7, r11, #16\n\t"
23861 "lsr r7, r7, #24\n\t"
23862#else
23863 "uxtb r7, r11, ror #8\n\t"
23864#endif
23865#else
23866 "ubfx r7, r11, #8, #8\n\t"
23867#endif
23868 "eor r4, r4, r12, lsl #16\n\t"
23869#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23870#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23871 "lsl r12, r8, #8\n\t"
23872 "lsr r12, r12, #24\n\t"
23873#else
23874 "uxtb r12, r8, ror #16\n\t"
23875#endif
23876#else
23877 "ubfx r12, r8, #16, #8\n\t"
23878#endif
23879 "eor r4, r4, lr, lsl #24\n\t"
23880 "lsr lr, r9, #24\n\t"
23881 "ldrb r7, [r2, r7]\n\t"
23882 "ldrb lr, [r2, lr]\n\t"
23883 "ldrb r5, [r2, r5]\n\t"
23884 "ldrb r12, [r2, r12]\n\t"
23885#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23886#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23887 "lsl r6, r11, #24\n\t"
23888 "lsr r6, r6, #24\n\t"
23889#else
23890 "uxtb r6, r11\n\t"
23891#endif
23892#else
23893 "ubfx r6, r11, #0, #8\n\t"
23894#endif
23895 "eor r5, r5, r7, lsl #8\n\t"
23896#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23897#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23898 "lsl r7, r8, #16\n\t"
23899 "lsr r7, r7, #24\n\t"
23900#else
23901 "uxtb r7, r8, ror #8\n\t"
23902#endif
23903#else
23904 "ubfx r7, r8, #8, #8\n\t"
23905#endif
23906 "eor r5, r5, r12, lsl #16\n\t"
23907#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23908#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23909 "lsl r12, r9, #8\n\t"
23910 "lsr r12, r12, #24\n\t"
23911#else
23912 "uxtb r12, r9, ror #16\n\t"
23913#endif
23914#else
23915 "ubfx r12, r9, #16, #8\n\t"
23916#endif
23917 "eor r5, r5, lr, lsl #24\n\t"
23918 "lsr lr, r10, #24\n\t"
23919 "ldrb r7, [r2, r7]\n\t"
23920 "ldrb lr, [r2, lr]\n\t"
23921 "ldrb r6, [r2, r6]\n\t"
23922 "ldrb r12, [r2, r12]\n\t"
23923 "lsr r11, r11, #24\n\t"
23924 "eor r6, r6, r7, lsl #8\n\t"
23925#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23926#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23927 "lsl r7, r8, #24\n\t"
23928 "lsr r7, r7, #24\n\t"
23929#else
23930 "uxtb r7, r8\n\t"
23931#endif
23932#else
23933 "ubfx r7, r8, #0, #8\n\t"
23934#endif
23935 "eor r6, r6, r12, lsl #16\n\t"
23936#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23937#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23938 "lsl r12, r9, #16\n\t"
23939 "lsr r12, r12, #24\n\t"
23940#else
23941 "uxtb r12, r9, ror #8\n\t"
23942#endif
23943#else
23944 "ubfx r12, r9, #8, #8\n\t"
23945#endif
23946 "eor r6, r6, lr, lsl #24\n\t"
23947#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23948#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23949 "lsl lr, r10, #8\n\t"
23950 "lsr lr, lr, #24\n\t"
23951#else
23952 "uxtb lr, r10, ror #16\n\t"
23953#endif
23954#else
23955 "ubfx lr, r10, #16, #8\n\t"
23956#endif
23957 "ldrb r11, [r2, r11]\n\t"
23958 "ldrb r12, [r2, r12]\n\t"
23959 "ldrb r7, [r2, r7]\n\t"
23960 "ldrb lr, [r2, lr]\n\t"
23961 "eor r12, r12, r11, lsl #16\n\t"
23962 "ldm %[ks], {r8, r9, r10, r11}\n\t"
23963 "eor r7, r7, r12, lsl #8\n\t"
23964 "eor r7, r7, lr, lsl #16\n\t"
23965 /* XOR in Key Schedule */
23966 "eor r4, r4, r8\n\t"
23967 "eor r5, r5, r9\n\t"
23968 "eor r6, r6, r10\n\t"
23969 "eor r7, r7, r11\n\t"
23970#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
23971 "ldr lr, [sp, #16]\n\t"
23972#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
23973 "eor r8, r4, r4, ror #16\n\t"
23974 "eor r9, r5, r5, ror #16\n\t"
23975 "eor r10, r6, r6, ror #16\n\t"
23976 "eor r11, r7, r7, ror #16\n\t"
23977 "bic r8, r8, #0xff0000\n\t"
23978 "bic r9, r9, #0xff0000\n\t"
23979 "bic r10, r10, #0xff0000\n\t"
23980 "bic r11, r11, #0xff0000\n\t"
23981 "ror r4, r4, #8\n\t"
23982 "ror r5, r5, #8\n\t"
23983 "ror r6, r6, #8\n\t"
23984 "ror r7, r7, #8\n\t"
23985 "eor r4, r4, r8, lsr #8\n\t"
23986 "eor r5, r5, r9, lsr #8\n\t"
23987 "eor r6, r6, r10, lsr #8\n\t"
23988 "eor r7, r7, r11, lsr #8\n\t"
23989#else
23990 "rev r4, r4\n\t"
23991 "rev r5, r5\n\t"
23992 "rev r6, r6\n\t"
23993 "rev r7, r7\n\t"
23994#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
23995#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
23996 "ldr r8, [lr, #16]\n\t"
23997 "ldr r9, [lr, #20]\n\t"
23998#else
23999 "ldrd r8, r9, [lr, #16]\n\t"
24000#endif
24001#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24002 "ldr r10, [lr, #24]\n\t"
24003 "ldr r11, [lr, #28]\n\t"
24004#else
24005 "ldrd r10, r11, [lr, #24]\n\t"
24006#endif
24007 "pop {r1, r12, lr}\n\t"
24008 "ldr %[ks], [sp]\n\t"
24009 "eor r4, r4, r8\n\t"
24010 "eor r5, r5, r9\n\t"
24011 "eor r6, r6, r10\n\t"
24012 "eor r7, r7, r11\n\t"
24013 "str r4, [%[out]]\n\t"
24014 "str r5, [%[out], #4]\n\t"
24015 "str r6, [%[out], #8]\n\t"
24016 "str r7, [%[out], #12]\n\t"
24017 "subs r12, r12, #16\n\t"
24018 "add lr, lr, #16\n\t"
24019 "add %[out], %[out], #16\n\t"
24020 "bne L_AES_CBC_decrypt_loop_block_128_%=\n\t"
24021 "b L_AES_CBC_decrypt_end_%=\n\t"
24022 "\n"
24023 "L_AES_CBC_decrypt_end_odd_%=:\n\t"
24024 "ldr r4, [sp, #4]\n\t"
24025#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24026 "ldr r8, [r4, #16]\n\t"
24027 "ldr r9, [r4, #20]\n\t"
24028#else
24029 "ldrd r8, r9, [r4, #16]\n\t"
24030#endif
24031#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24032 "ldr r10, [r4, #24]\n\t"
24033 "ldr r11, [r4, #28]\n\t"
24034#else
24035 "ldrd r10, r11, [r4, #24]\n\t"
24036#endif
24037#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24038 "stm r4, {r8, r9}\n\t"
24039#else
24040 "strd r8, r9, [r4]\n\t"
24041#endif
24042#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24043 "str r10, [r4, #8]\n\t"
24044 "str r11, [r4, #12]\n\t"
24045#else
24046 "strd r10, r11, [r4, #8]\n\t"
24047#endif
24048 "\n"
24049 "L_AES_CBC_decrypt_end_%=:\n\t"
24050 "pop {%[ks]-r4}\n\t"
24051 "pop {%[nr], %[iv]}\n\t"
24052 "pop {%[L_AES_ARM32_td_ecb], %[L_AES_ARM32_cbc_td4]}\n\t"
24053#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24054 : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
24055 [nr] "+r" (nr), [iv] "+r" (iv),
24056 [L_AES_ARM32_td_ecb] "+r" (L_AES_ARM32_td_ecb_c),
24057 [L_AES_ARM32_cbc_td4] "+r" (L_AES_ARM32_cbc_td4_c)
24058 :
24059#else
24060 :
24061 : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
24062 [nr] "r" (nr), [iv] "r" (iv),
24063 [L_AES_ARM32_td_ecb] "r" (L_AES_ARM32_td_ecb_c),
24064 [L_AES_ARM32_cbc_td4] "r" (L_AES_ARM32_cbc_td4_c)
24065#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
24066 : "memory", "cc", "r6", "r7", "r8", "r9", "r10", "r11"
24067 );
24068}
24069
24070#endif /* HAVE_AES_CBC */
24071#endif /* WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER || HAVE_AES_CBC
24072 * HAVE_AES_ECB */
24073#endif /* HAVE_AES_DECRYPT */
24074#ifdef HAVE_AESGCM
24075XALIGNED(8) static const word32 L_GCM_gmult_len_r[] = {
24076 0x00000000, 0x1c200000, 0x38400000, 0x24600000,
24077 0x70800000, 0x6ca00000, 0x48c00000, 0x54e00000,
24078 0xe1000000, 0xfd200000, 0xd9400000, 0xc5600000,
24079 0x91800000, 0x8da00000, 0xa9c00000, 0xb5e00000,
24080};
24081
24082void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p,
24083 const unsigned char* data_p, unsigned long len_p);
24084#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24085WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x_p,
24086 const unsigned char** m_p, const unsigned char* data_p, unsigned long len_p)
24087#else
24088WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x,
24089 const unsigned char** m, const unsigned char* data, unsigned long len)
24090#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
24091{
24092#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24093 register unsigned char* x __asm__ ("r0") = (unsigned char*)x_p;
24094 register const unsigned char** m __asm__ ("r1") =
24095 (const unsigned char**)m_p;
24096 register const unsigned char* data __asm__ ("r2") =
24097 (const unsigned char*)data_p;
24098 register unsigned long len __asm__ ("r3") = (unsigned long)len_p;
24099 register word32* L_GCM_gmult_len_r_c __asm__ ("r12") =
24100 (word32*)&L_GCM_gmult_len_r;
24101#else
24102 register word32* L_GCM_gmult_len_r_c = (word32*)&L_GCM_gmult_len_r;
24103#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
24104
24105 __asm__ __volatile__ (
24106 "push {%[L_GCM_gmult_len_r]}\n\t"
24107 "mov lr, %[L_GCM_gmult_len_r]\n\t"
24108 "\n"
24109 "L_GCM_gmult_len_start_block_%=:\n\t"
24110 "push {r3}\n\t"
24111 "ldr r12, [r0, #12]\n\t"
24112 "ldr %[len], [r2, #12]\n\t"
24113 "eor r12, r12, %[len]\n\t"
24114 "lsr %[len], r12, #24\n\t"
24115 "and %[len], %[len], #15\n\t"
24116 "add %[len], %[m], %[len], lsl #4\n\t"
24117 "ldm %[len], {r8, r9, r10, r11}\n\t"
24118 "lsr r6, r10, #4\n\t"
24119 "and %[len], r11, #15\n\t"
24120 "lsr r11, r11, #4\n\t"
24121 "lsr r4, r12, #28\n\t"
24122 "eor r11, r11, r10, lsl #28\n\t"
24123 "ldr %[len], [lr, r3, lsl #2]\n\t"
24124 "add r4, %[m], r4, lsl #4\n\t"
24125 "eor r10, r6, r9, lsl #28\n\t"
24126 "lsr r9, r9, #4\n\t"
24127 "ldm r4, {r4, r5, r6, r7}\n\t"
24128 "eor r9, r9, r8, lsl #28\n\t"
24129 "eor r8, %[len], r8, lsr #4\n\t"
24130 "eor r8, r8, r4\n\t"
24131 "eor r9, r9, r5\n\t"
24132 "eor r10, r10, r6\n\t"
24133 "eor r11, r11, r7\n\t"
24134 "lsr r6, r10, #4\n\t"
24135 "and %[len], r11, #15\n\t"
24136 "lsr r11, r11, #4\n\t"
24137 "lsr r4, r12, #16\n\t"
24138 "eor r11, r11, r10, lsl #28\n\t"
24139 "and r4, r4, #15\n\t"
24140 "ldr %[len], [lr, r3, lsl #2]\n\t"
24141 "add r4, %[m], r4, lsl #4\n\t"
24142 "eor r10, r6, r9, lsl #28\n\t"
24143 "lsr r9, r9, #4\n\t"
24144 "ldm r4, {r4, r5, r6, r7}\n\t"
24145 "eor r9, r9, r8, lsl #28\n\t"
24146 "eor r8, %[len], r8, lsr #4\n\t"
24147 "eor r8, r8, r4\n\t"
24148 "eor r9, r9, r5\n\t"
24149 "eor r10, r10, r6\n\t"
24150 "eor r11, r11, r7\n\t"
24151 "lsr r6, r10, #4\n\t"
24152 "and %[len], r11, #15\n\t"
24153 "lsr r11, r11, #4\n\t"
24154 "lsr r4, r12, #20\n\t"
24155 "eor r11, r11, r10, lsl #28\n\t"
24156 "and r4, r4, #15\n\t"
24157 "ldr %[len], [lr, r3, lsl #2]\n\t"
24158 "add r4, %[m], r4, lsl #4\n\t"
24159 "eor r10, r6, r9, lsl #28\n\t"
24160 "lsr r9, r9, #4\n\t"
24161 "ldm r4, {r4, r5, r6, r7}\n\t"
24162 "eor r9, r9, r8, lsl #28\n\t"
24163 "eor r8, %[len], r8, lsr #4\n\t"
24164 "eor r8, r8, r4\n\t"
24165 "eor r9, r9, r5\n\t"
24166 "eor r10, r10, r6\n\t"
24167 "eor r11, r11, r7\n\t"
24168 "lsr r6, r10, #4\n\t"
24169 "and %[len], r11, #15\n\t"
24170 "lsr r11, r11, #4\n\t"
24171 "lsr r4, r12, #8\n\t"
24172 "eor r11, r11, r10, lsl #28\n\t"
24173 "and r4, r4, #15\n\t"
24174 "ldr %[len], [lr, r3, lsl #2]\n\t"
24175 "add r4, %[m], r4, lsl #4\n\t"
24176 "eor r10, r6, r9, lsl #28\n\t"
24177 "lsr r9, r9, #4\n\t"
24178 "ldm r4, {r4, r5, r6, r7}\n\t"
24179 "eor r9, r9, r8, lsl #28\n\t"
24180 "eor r8, %[len], r8, lsr #4\n\t"
24181 "eor r8, r8, r4\n\t"
24182 "eor r9, r9, r5\n\t"
24183 "eor r10, r10, r6\n\t"
24184 "eor r11, r11, r7\n\t"
24185 "lsr r6, r10, #4\n\t"
24186 "and %[len], r11, #15\n\t"
24187 "lsr r11, r11, #4\n\t"
24188 "lsr r4, r12, #12\n\t"
24189 "eor r11, r11, r10, lsl #28\n\t"
24190 "and r4, r4, #15\n\t"
24191 "ldr %[len], [lr, r3, lsl #2]\n\t"
24192 "add r4, %[m], r4, lsl #4\n\t"
24193 "eor r10, r6, r9, lsl #28\n\t"
24194 "lsr r9, r9, #4\n\t"
24195 "ldm r4, {r4, r5, r6, r7}\n\t"
24196 "eor r9, r9, r8, lsl #28\n\t"
24197 "eor r8, %[len], r8, lsr #4\n\t"
24198 "eor r8, r8, r4\n\t"
24199 "eor r9, r9, r5\n\t"
24200 "eor r10, r10, r6\n\t"
24201 "eor r11, r11, r7\n\t"
24202 "lsr r6, r10, #4\n\t"
24203 "and %[len], r11, #15\n\t"
24204 "lsr r11, r11, #4\n\t"
24205 "and r4, r12, #15\n\t"
24206 "eor r11, r11, r10, lsl #28\n\t"
24207 "ldr %[len], [lr, r3, lsl #2]\n\t"
24208 "add r4, %[m], r4, lsl #4\n\t"
24209 "eor r10, r6, r9, lsl #28\n\t"
24210 "lsr r9, r9, #4\n\t"
24211 "ldm r4, {r4, r5, r6, r7}\n\t"
24212 "eor r9, r9, r8, lsl #28\n\t"
24213 "eor r8, %[len], r8, lsr #4\n\t"
24214 "eor r8, r8, r4\n\t"
24215 "eor r9, r9, r5\n\t"
24216 "eor r10, r10, r6\n\t"
24217 "eor r11, r11, r7\n\t"
24218 "lsr r6, r10, #4\n\t"
24219 "and %[len], r11, #15\n\t"
24220 "lsr r11, r11, #4\n\t"
24221 "lsr r4, r12, #4\n\t"
24222 "eor r11, r11, r10, lsl #28\n\t"
24223 "and r4, r4, #15\n\t"
24224 "ldr %[len], [lr, r3, lsl #2]\n\t"
24225 "add r4, %[m], r4, lsl #4\n\t"
24226 "eor r10, r6, r9, lsl #28\n\t"
24227 "lsr r9, r9, #4\n\t"
24228 "ldm r4, {r4, r5, r6, r7}\n\t"
24229 "eor r9, r9, r8, lsl #28\n\t"
24230 "eor r8, %[len], r8, lsr #4\n\t"
24231 "eor r8, r8, r4\n\t"
24232 "eor r9, r9, r5\n\t"
24233 "eor r10, r10, r6\n\t"
24234 "eor r11, r11, r7\n\t"
24235 "lsr r6, r10, #4\n\t"
24236 "and %[len], r11, #15\n\t"
24237 "lsr r11, r11, #4\n\t"
24238 "eor r11, r11, r10, lsl #28\n\t"
24239 "ldr %[len], [lr, r3, lsl #2]\n\t"
24240 "eor r10, r6, r9, lsl #28\n\t"
24241 "lsr r9, r9, #4\n\t"
24242 "eor r9, r9, r8, lsl #28\n\t"
24243 "eor r8, %[len], r8, lsr #4\n\t"
24244 "ldr r12, [r0, #8]\n\t"
24245 "ldr %[len], [r2, #8]\n\t"
24246 "eor r12, r12, %[len]\n\t"
24247 "lsr %[len], r12, #24\n\t"
24248 "and %[len], %[len], #15\n\t"
24249 "add %[len], %[m], %[len], lsl #4\n\t"
24250 "ldm %[len], {r4, r5, r6, r7}\n\t"
24251 "eor r8, r8, r4\n\t"
24252 "eor r9, r9, r5\n\t"
24253 "eor r10, r10, r6\n\t"
24254 "eor r11, r11, r7\n\t"
24255 "lsr r6, r10, #4\n\t"
24256 "and %[len], r11, #15\n\t"
24257 "lsr r11, r11, #4\n\t"
24258 "lsr r4, r12, #28\n\t"
24259 "eor r11, r11, r10, lsl #28\n\t"
24260 "ldr %[len], [lr, r3, lsl #2]\n\t"
24261 "add r4, %[m], r4, lsl #4\n\t"
24262 "eor r10, r6, r9, lsl #28\n\t"
24263 "lsr r9, r9, #4\n\t"
24264 "ldm r4, {r4, r5, r6, r7}\n\t"
24265 "eor r9, r9, r8, lsl #28\n\t"
24266 "eor r8, %[len], r8, lsr #4\n\t"
24267 "eor r8, r8, r4\n\t"
24268 "eor r9, r9, r5\n\t"
24269 "eor r10, r10, r6\n\t"
24270 "eor r11, r11, r7\n\t"
24271 "lsr r6, r10, #4\n\t"
24272 "and %[len], r11, #15\n\t"
24273 "lsr r11, r11, #4\n\t"
24274 "lsr r4, r12, #16\n\t"
24275 "eor r11, r11, r10, lsl #28\n\t"
24276 "and r4, r4, #15\n\t"
24277 "ldr %[len], [lr, r3, lsl #2]\n\t"
24278 "add r4, %[m], r4, lsl #4\n\t"
24279 "eor r10, r6, r9, lsl #28\n\t"
24280 "lsr r9, r9, #4\n\t"
24281 "ldm r4, {r4, r5, r6, r7}\n\t"
24282 "eor r9, r9, r8, lsl #28\n\t"
24283 "eor r8, %[len], r8, lsr #4\n\t"
24284 "eor r8, r8, r4\n\t"
24285 "eor r9, r9, r5\n\t"
24286 "eor r10, r10, r6\n\t"
24287 "eor r11, r11, r7\n\t"
24288 "lsr r6, r10, #4\n\t"
24289 "and %[len], r11, #15\n\t"
24290 "lsr r11, r11, #4\n\t"
24291 "lsr r4, r12, #20\n\t"
24292 "eor r11, r11, r10, lsl #28\n\t"
24293 "and r4, r4, #15\n\t"
24294 "ldr %[len], [lr, r3, lsl #2]\n\t"
24295 "add r4, %[m], r4, lsl #4\n\t"
24296 "eor r10, r6, r9, lsl #28\n\t"
24297 "lsr r9, r9, #4\n\t"
24298 "ldm r4, {r4, r5, r6, r7}\n\t"
24299 "eor r9, r9, r8, lsl #28\n\t"
24300 "eor r8, %[len], r8, lsr #4\n\t"
24301 "eor r8, r8, r4\n\t"
24302 "eor r9, r9, r5\n\t"
24303 "eor r10, r10, r6\n\t"
24304 "eor r11, r11, r7\n\t"
24305 "lsr r6, r10, #4\n\t"
24306 "and %[len], r11, #15\n\t"
24307 "lsr r11, r11, #4\n\t"
24308 "lsr r4, r12, #8\n\t"
24309 "eor r11, r11, r10, lsl #28\n\t"
24310 "and r4, r4, #15\n\t"
24311 "ldr %[len], [lr, r3, lsl #2]\n\t"
24312 "add r4, %[m], r4, lsl #4\n\t"
24313 "eor r10, r6, r9, lsl #28\n\t"
24314 "lsr r9, r9, #4\n\t"
24315 "ldm r4, {r4, r5, r6, r7}\n\t"
24316 "eor r9, r9, r8, lsl #28\n\t"
24317 "eor r8, %[len], r8, lsr #4\n\t"
24318 "eor r8, r8, r4\n\t"
24319 "eor r9, r9, r5\n\t"
24320 "eor r10, r10, r6\n\t"
24321 "eor r11, r11, r7\n\t"
24322 "lsr r6, r10, #4\n\t"
24323 "and %[len], r11, #15\n\t"
24324 "lsr r11, r11, #4\n\t"
24325 "lsr r4, r12, #12\n\t"
24326 "eor r11, r11, r10, lsl #28\n\t"
24327 "and r4, r4, #15\n\t"
24328 "ldr %[len], [lr, r3, lsl #2]\n\t"
24329 "add r4, %[m], r4, lsl #4\n\t"
24330 "eor r10, r6, r9, lsl #28\n\t"
24331 "lsr r9, r9, #4\n\t"
24332 "ldm r4, {r4, r5, r6, r7}\n\t"
24333 "eor r9, r9, r8, lsl #28\n\t"
24334 "eor r8, %[len], r8, lsr #4\n\t"
24335 "eor r8, r8, r4\n\t"
24336 "eor r9, r9, r5\n\t"
24337 "eor r10, r10, r6\n\t"
24338 "eor r11, r11, r7\n\t"
24339 "lsr r6, r10, #4\n\t"
24340 "and %[len], r11, #15\n\t"
24341 "lsr r11, r11, #4\n\t"
24342 "and r4, r12, #15\n\t"
24343 "eor r11, r11, r10, lsl #28\n\t"
24344 "ldr %[len], [lr, r3, lsl #2]\n\t"
24345 "add r4, %[m], r4, lsl #4\n\t"
24346 "eor r10, r6, r9, lsl #28\n\t"
24347 "lsr r9, r9, #4\n\t"
24348 "ldm r4, {r4, r5, r6, r7}\n\t"
24349 "eor r9, r9, r8, lsl #28\n\t"
24350 "eor r8, %[len], r8, lsr #4\n\t"
24351 "eor r8, r8, r4\n\t"
24352 "eor r9, r9, r5\n\t"
24353 "eor r10, r10, r6\n\t"
24354 "eor r11, r11, r7\n\t"
24355 "lsr r6, r10, #4\n\t"
24356 "and %[len], r11, #15\n\t"
24357 "lsr r11, r11, #4\n\t"
24358 "lsr r4, r12, #4\n\t"
24359 "eor r11, r11, r10, lsl #28\n\t"
24360 "and r4, r4, #15\n\t"
24361 "ldr %[len], [lr, r3, lsl #2]\n\t"
24362 "add r4, %[m], r4, lsl #4\n\t"
24363 "eor r10, r6, r9, lsl #28\n\t"
24364 "lsr r9, r9, #4\n\t"
24365 "ldm r4, {r4, r5, r6, r7}\n\t"
24366 "eor r9, r9, r8, lsl #28\n\t"
24367 "eor r8, %[len], r8, lsr #4\n\t"
24368 "eor r8, r8, r4\n\t"
24369 "eor r9, r9, r5\n\t"
24370 "eor r10, r10, r6\n\t"
24371 "eor r11, r11, r7\n\t"
24372 "lsr r6, r10, #4\n\t"
24373 "and %[len], r11, #15\n\t"
24374 "lsr r11, r11, #4\n\t"
24375 "eor r11, r11, r10, lsl #28\n\t"
24376 "ldr %[len], [lr, r3, lsl #2]\n\t"
24377 "eor r10, r6, r9, lsl #28\n\t"
24378 "lsr r9, r9, #4\n\t"
24379 "eor r9, r9, r8, lsl #28\n\t"
24380 "eor r8, %[len], r8, lsr #4\n\t"
24381 "ldr r12, [r0, #4]\n\t"
24382 "ldr %[len], [r2, #4]\n\t"
24383 "eor r12, r12, %[len]\n\t"
24384 "lsr %[len], r12, #24\n\t"
24385 "and %[len], %[len], #15\n\t"
24386 "add %[len], %[m], %[len], lsl #4\n\t"
24387 "ldm %[len], {r4, r5, r6, r7}\n\t"
24388 "eor r8, r8, r4\n\t"
24389 "eor r9, r9, r5\n\t"
24390 "eor r10, r10, r6\n\t"
24391 "eor r11, r11, r7\n\t"
24392 "lsr r6, r10, #4\n\t"
24393 "and %[len], r11, #15\n\t"
24394 "lsr r11, r11, #4\n\t"
24395 "lsr r4, r12, #28\n\t"
24396 "eor r11, r11, r10, lsl #28\n\t"
24397 "ldr %[len], [lr, r3, lsl #2]\n\t"
24398 "add r4, %[m], r4, lsl #4\n\t"
24399 "eor r10, r6, r9, lsl #28\n\t"
24400 "lsr r9, r9, #4\n\t"
24401 "ldm r4, {r4, r5, r6, r7}\n\t"
24402 "eor r9, r9, r8, lsl #28\n\t"
24403 "eor r8, %[len], r8, lsr #4\n\t"
24404 "eor r8, r8, r4\n\t"
24405 "eor r9, r9, r5\n\t"
24406 "eor r10, r10, r6\n\t"
24407 "eor r11, r11, r7\n\t"
24408 "lsr r6, r10, #4\n\t"
24409 "and %[len], r11, #15\n\t"
24410 "lsr r11, r11, #4\n\t"
24411 "lsr r4, r12, #16\n\t"
24412 "eor r11, r11, r10, lsl #28\n\t"
24413 "and r4, r4, #15\n\t"
24414 "ldr %[len], [lr, r3, lsl #2]\n\t"
24415 "add r4, %[m], r4, lsl #4\n\t"
24416 "eor r10, r6, r9, lsl #28\n\t"
24417 "lsr r9, r9, #4\n\t"
24418 "ldm r4, {r4, r5, r6, r7}\n\t"
24419 "eor r9, r9, r8, lsl #28\n\t"
24420 "eor r8, %[len], r8, lsr #4\n\t"
24421 "eor r8, r8, r4\n\t"
24422 "eor r9, r9, r5\n\t"
24423 "eor r10, r10, r6\n\t"
24424 "eor r11, r11, r7\n\t"
24425 "lsr r6, r10, #4\n\t"
24426 "and %[len], r11, #15\n\t"
24427 "lsr r11, r11, #4\n\t"
24428 "lsr r4, r12, #20\n\t"
24429 "eor r11, r11, r10, lsl #28\n\t"
24430 "and r4, r4, #15\n\t"
24431 "ldr %[len], [lr, r3, lsl #2]\n\t"
24432 "add r4, %[m], r4, lsl #4\n\t"
24433 "eor r10, r6, r9, lsl #28\n\t"
24434 "lsr r9, r9, #4\n\t"
24435 "ldm r4, {r4, r5, r6, r7}\n\t"
24436 "eor r9, r9, r8, lsl #28\n\t"
24437 "eor r8, %[len], r8, lsr #4\n\t"
24438 "eor r8, r8, r4\n\t"
24439 "eor r9, r9, r5\n\t"
24440 "eor r10, r10, r6\n\t"
24441 "eor r11, r11, r7\n\t"
24442 "lsr r6, r10, #4\n\t"
24443 "and %[len], r11, #15\n\t"
24444 "lsr r11, r11, #4\n\t"
24445 "lsr r4, r12, #8\n\t"
24446 "eor r11, r11, r10, lsl #28\n\t"
24447 "and r4, r4, #15\n\t"
24448 "ldr %[len], [lr, r3, lsl #2]\n\t"
24449 "add r4, %[m], r4, lsl #4\n\t"
24450 "eor r10, r6, r9, lsl #28\n\t"
24451 "lsr r9, r9, #4\n\t"
24452 "ldm r4, {r4, r5, r6, r7}\n\t"
24453 "eor r9, r9, r8, lsl #28\n\t"
24454 "eor r8, %[len], r8, lsr #4\n\t"
24455 "eor r8, r8, r4\n\t"
24456 "eor r9, r9, r5\n\t"
24457 "eor r10, r10, r6\n\t"
24458 "eor r11, r11, r7\n\t"
24459 "lsr r6, r10, #4\n\t"
24460 "and %[len], r11, #15\n\t"
24461 "lsr r11, r11, #4\n\t"
24462 "lsr r4, r12, #12\n\t"
24463 "eor r11, r11, r10, lsl #28\n\t"
24464 "and r4, r4, #15\n\t"
24465 "ldr %[len], [lr, r3, lsl #2]\n\t"
24466 "add r4, %[m], r4, lsl #4\n\t"
24467 "eor r10, r6, r9, lsl #28\n\t"
24468 "lsr r9, r9, #4\n\t"
24469 "ldm r4, {r4, r5, r6, r7}\n\t"
24470 "eor r9, r9, r8, lsl #28\n\t"
24471 "eor r8, %[len], r8, lsr #4\n\t"
24472 "eor r8, r8, r4\n\t"
24473 "eor r9, r9, r5\n\t"
24474 "eor r10, r10, r6\n\t"
24475 "eor r11, r11, r7\n\t"
24476 "lsr r6, r10, #4\n\t"
24477 "and %[len], r11, #15\n\t"
24478 "lsr r11, r11, #4\n\t"
24479 "and r4, r12, #15\n\t"
24480 "eor r11, r11, r10, lsl #28\n\t"
24481 "ldr %[len], [lr, r3, lsl #2]\n\t"
24482 "add r4, %[m], r4, lsl #4\n\t"
24483 "eor r10, r6, r9, lsl #28\n\t"
24484 "lsr r9, r9, #4\n\t"
24485 "ldm r4, {r4, r5, r6, r7}\n\t"
24486 "eor r9, r9, r8, lsl #28\n\t"
24487 "eor r8, %[len], r8, lsr #4\n\t"
24488 "eor r8, r8, r4\n\t"
24489 "eor r9, r9, r5\n\t"
24490 "eor r10, r10, r6\n\t"
24491 "eor r11, r11, r7\n\t"
24492 "lsr r6, r10, #4\n\t"
24493 "and %[len], r11, #15\n\t"
24494 "lsr r11, r11, #4\n\t"
24495 "lsr r4, r12, #4\n\t"
24496 "eor r11, r11, r10, lsl #28\n\t"
24497 "and r4, r4, #15\n\t"
24498 "ldr %[len], [lr, r3, lsl #2]\n\t"
24499 "add r4, %[m], r4, lsl #4\n\t"
24500 "eor r10, r6, r9, lsl #28\n\t"
24501 "lsr r9, r9, #4\n\t"
24502 "ldm r4, {r4, r5, r6, r7}\n\t"
24503 "eor r9, r9, r8, lsl #28\n\t"
24504 "eor r8, %[len], r8, lsr #4\n\t"
24505 "eor r8, r8, r4\n\t"
24506 "eor r9, r9, r5\n\t"
24507 "eor r10, r10, r6\n\t"
24508 "eor r11, r11, r7\n\t"
24509 "lsr r6, r10, #4\n\t"
24510 "and %[len], r11, #15\n\t"
24511 "lsr r11, r11, #4\n\t"
24512 "eor r11, r11, r10, lsl #28\n\t"
24513 "ldr %[len], [lr, r3, lsl #2]\n\t"
24514 "eor r10, r6, r9, lsl #28\n\t"
24515 "lsr r9, r9, #4\n\t"
24516 "eor r9, r9, r8, lsl #28\n\t"
24517 "eor r8, %[len], r8, lsr #4\n\t"
24518 "ldr r12, [r0]\n\t"
24519 "ldr %[len], [r2]\n\t"
24520 "eor r12, r12, %[len]\n\t"
24521 "lsr %[len], r12, #24\n\t"
24522 "and %[len], %[len], #15\n\t"
24523 "add %[len], %[m], %[len], lsl #4\n\t"
24524 "ldm %[len], {r4, r5, r6, r7}\n\t"
24525 "eor r8, r8, r4\n\t"
24526 "eor r9, r9, r5\n\t"
24527 "eor r10, r10, r6\n\t"
24528 "eor r11, r11, r7\n\t"
24529 "lsr r6, r10, #4\n\t"
24530 "and %[len], r11, #15\n\t"
24531 "lsr r11, r11, #4\n\t"
24532 "lsr r4, r12, #28\n\t"
24533 "eor r11, r11, r10, lsl #28\n\t"
24534 "ldr %[len], [lr, r3, lsl #2]\n\t"
24535 "add r4, %[m], r4, lsl #4\n\t"
24536 "eor r10, r6, r9, lsl #28\n\t"
24537 "lsr r9, r9, #4\n\t"
24538 "ldm r4, {r4, r5, r6, r7}\n\t"
24539 "eor r9, r9, r8, lsl #28\n\t"
24540 "eor r8, %[len], r8, lsr #4\n\t"
24541 "eor r8, r8, r4\n\t"
24542 "eor r9, r9, r5\n\t"
24543 "eor r10, r10, r6\n\t"
24544 "eor r11, r11, r7\n\t"
24545 "lsr r6, r10, #4\n\t"
24546 "and %[len], r11, #15\n\t"
24547 "lsr r11, r11, #4\n\t"
24548 "lsr r4, r12, #16\n\t"
24549 "eor r11, r11, r10, lsl #28\n\t"
24550 "and r4, r4, #15\n\t"
24551 "ldr %[len], [lr, r3, lsl #2]\n\t"
24552 "add r4, %[m], r4, lsl #4\n\t"
24553 "eor r10, r6, r9, lsl #28\n\t"
24554 "lsr r9, r9, #4\n\t"
24555 "ldm r4, {r4, r5, r6, r7}\n\t"
24556 "eor r9, r9, r8, lsl #28\n\t"
24557 "eor r8, %[len], r8, lsr #4\n\t"
24558 "eor r8, r8, r4\n\t"
24559 "eor r9, r9, r5\n\t"
24560 "eor r10, r10, r6\n\t"
24561 "eor r11, r11, r7\n\t"
24562 "lsr r6, r10, #4\n\t"
24563 "and %[len], r11, #15\n\t"
24564 "lsr r11, r11, #4\n\t"
24565 "lsr r4, r12, #20\n\t"
24566 "eor r11, r11, r10, lsl #28\n\t"
24567 "and r4, r4, #15\n\t"
24568 "ldr %[len], [lr, r3, lsl #2]\n\t"
24569 "add r4, %[m], r4, lsl #4\n\t"
24570 "eor r10, r6, r9, lsl #28\n\t"
24571 "lsr r9, r9, #4\n\t"
24572 "ldm r4, {r4, r5, r6, r7}\n\t"
24573 "eor r9, r9, r8, lsl #28\n\t"
24574 "eor r8, %[len], r8, lsr #4\n\t"
24575 "eor r8, r8, r4\n\t"
24576 "eor r9, r9, r5\n\t"
24577 "eor r10, r10, r6\n\t"
24578 "eor r11, r11, r7\n\t"
24579 "lsr r6, r10, #4\n\t"
24580 "and %[len], r11, #15\n\t"
24581 "lsr r11, r11, #4\n\t"
24582 "lsr r4, r12, #8\n\t"
24583 "eor r11, r11, r10, lsl #28\n\t"
24584 "and r4, r4, #15\n\t"
24585 "ldr %[len], [lr, r3, lsl #2]\n\t"
24586 "add r4, %[m], r4, lsl #4\n\t"
24587 "eor r10, r6, r9, lsl #28\n\t"
24588 "lsr r9, r9, #4\n\t"
24589 "ldm r4, {r4, r5, r6, r7}\n\t"
24590 "eor r9, r9, r8, lsl #28\n\t"
24591 "eor r8, %[len], r8, lsr #4\n\t"
24592 "eor r8, r8, r4\n\t"
24593 "eor r9, r9, r5\n\t"
24594 "eor r10, r10, r6\n\t"
24595 "eor r11, r11, r7\n\t"
24596 "lsr r6, r10, #4\n\t"
24597 "and %[len], r11, #15\n\t"
24598 "lsr r11, r11, #4\n\t"
24599 "lsr r4, r12, #12\n\t"
24600 "eor r11, r11, r10, lsl #28\n\t"
24601 "and r4, r4, #15\n\t"
24602 "ldr %[len], [lr, r3, lsl #2]\n\t"
24603 "add r4, %[m], r4, lsl #4\n\t"
24604 "eor r10, r6, r9, lsl #28\n\t"
24605 "lsr r9, r9, #4\n\t"
24606 "ldm r4, {r4, r5, r6, r7}\n\t"
24607 "eor r9, r9, r8, lsl #28\n\t"
24608 "eor r8, %[len], r8, lsr #4\n\t"
24609 "eor r8, r8, r4\n\t"
24610 "eor r9, r9, r5\n\t"
24611 "eor r10, r10, r6\n\t"
24612 "eor r11, r11, r7\n\t"
24613 "lsr r6, r10, #4\n\t"
24614 "and %[len], r11, #15\n\t"
24615 "lsr r11, r11, #4\n\t"
24616 "and r4, r12, #15\n\t"
24617 "eor r11, r11, r10, lsl #28\n\t"
24618 "ldr %[len], [lr, r3, lsl #2]\n\t"
24619 "add r4, %[m], r4, lsl #4\n\t"
24620 "eor r10, r6, r9, lsl #28\n\t"
24621 "lsr r9, r9, #4\n\t"
24622 "ldm r4, {r4, r5, r6, r7}\n\t"
24623 "eor r9, r9, r8, lsl #28\n\t"
24624 "eor r8, %[len], r8, lsr #4\n\t"
24625 "eor r8, r8, r4\n\t"
24626 "eor r9, r9, r5\n\t"
24627 "eor r10, r10, r6\n\t"
24628 "eor r11, r11, r7\n\t"
24629 "lsr r6, r10, #4\n\t"
24630 "and %[len], r11, #15\n\t"
24631 "lsr r11, r11, #4\n\t"
24632 "lsr r4, r12, #4\n\t"
24633 "eor r11, r11, r10, lsl #28\n\t"
24634 "and r4, r4, #15\n\t"
24635 "ldr %[len], [lr, r3, lsl #2]\n\t"
24636 "add r4, %[m], r4, lsl #4\n\t"
24637 "eor r10, r6, r9, lsl #28\n\t"
24638 "lsr r9, r9, #4\n\t"
24639 "ldm r4, {r4, r5, r6, r7}\n\t"
24640 "eor r9, r9, r8, lsl #28\n\t"
24641 "eor r8, %[len], r8, lsr #4\n\t"
24642 "eor r8, r8, r4\n\t"
24643 "eor r9, r9, r5\n\t"
24644 "eor r10, r10, r6\n\t"
24645 "eor r11, r11, r7\n\t"
24646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24647 /* REV r8, r8 */
24648 "eor %[len], r8, r8, ror #16\n\t"
24649 "bic %[len], %[len], #0xff0000\n\t"
24650 "ror r8, r8, #8\n\t"
24651 "eor r8, r8, %[len], lsr #8\n\t"
24652 /* REV r9, r9 */
24653 "eor %[len], r9, r9, ror #16\n\t"
24654 "bic %[len], %[len], #0xff0000\n\t"
24655 "ror r9, r9, #8\n\t"
24656 "eor r9, r9, %[len], lsr #8\n\t"
24657 /* REV r10, r10 */
24658 "eor %[len], r10, r10, ror #16\n\t"
24659 "bic %[len], %[len], #0xff0000\n\t"
24660 "ror r10, r10, #8\n\t"
24661 "eor r10, r10, %[len], lsr #8\n\t"
24662 /* REV r11, r11 */
24663 "eor %[len], r11, r11, ror #16\n\t"
24664 "bic %[len], %[len], #0xff0000\n\t"
24665 "ror r11, r11, #8\n\t"
24666 "eor r11, r11, %[len], lsr #8\n\t"
24667#else
24668 "rev r8, r8\n\t"
24669 "rev r9, r9\n\t"
24670 "rev r10, r10\n\t"
24671 "rev r11, r11\n\t"
24672#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
24673 "stm %[x], {r8, r9, r10, r11}\n\t"
24674 "pop {r3}\n\t"
24675 "subs %[len], %[len], #16\n\t"
24676 "add %[data], %[data], #16\n\t"
24677 "bne L_GCM_gmult_len_start_block_%=\n\t"
24678 "pop {%[L_GCM_gmult_len_r]}\n\t"
24679#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24680 : [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len),
24681 [L_GCM_gmult_len_r] "+r" (L_GCM_gmult_len_r_c)
24682 :
24683#else
24684 :
24685 : [x] "r" (x), [m] "r" (m), [data] "r" (data), [len] "r" (len),
24686 [L_GCM_gmult_len_r] "r" (L_GCM_gmult_len_r_c)
24687#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
24688 : "memory", "cc", "lr", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
24689 "r11"
24690 );
24691}
24692
24693static const word32* L_AES_ARM32_te_gcm = L_AES_ARM32_te_data;
24694void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p,
24695 unsigned long len_p, const unsigned char* ks_p, int nr_p,
24696 unsigned char* ctr_p);
24697#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24698WC_OMIT_FRAME_POINTER void AES_GCM_encrypt(const unsigned char* in_p,
24699 unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
24700 int nr_p, unsigned char* ctr_p)
24701#else
24702WC_OMIT_FRAME_POINTER void AES_GCM_encrypt(const unsigned char* in,
24703 unsigned char* out, unsigned long len, const unsigned char* ks, int nr,
24704 unsigned char* ctr)
24705#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
24706{
24707#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24708 register const unsigned char* in __asm__ ("r0") =
24709 (const unsigned char*)in_p;
24710 register unsigned char* out __asm__ ("r1") = (unsigned char*)out_p;
24711 register unsigned long len __asm__ ("r2") = (unsigned long)len_p;
24712 register const unsigned char* ks __asm__ ("r3") =
24713 (const unsigned char*)ks_p;
24714 register int nr __asm__ ("r12") = (int)nr_p;
24715 register unsigned char* ctr __asm__ ("lr") = (unsigned char*)ctr_p;
24716 register word32* L_AES_ARM32_te_gcm_c __asm__ ("r4") =
24717 (word32*)L_AES_ARM32_te_gcm;
24718#else
24719 register word32* L_AES_ARM32_te_gcm_c = (word32*)L_AES_ARM32_te_gcm;
24720#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
24721
24722 __asm__ __volatile__ (
24723 "push {%[L_AES_ARM32_te_gcm]}\n\t"
24724 "push {%[nr], %[ctr]}\n\t"
24725 "ldr r12, [sp]\n\t"
24726 "ldr r8, [sp, #4]\n\t"
24727 "mov lr, %[in]\n\t"
24728 "ldr r0, [sp, #8]\n\t"
24729 "ldm r8, {r4, r5, r6, r7}\n\t"
24730#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24731 "eor r10, r4, r4, ror #16\n\t"
24732 "eor r11, r5, r5, ror #16\n\t"
24733 "bic r10, r10, #0xff0000\n\t"
24734 "bic r11, r11, #0xff0000\n\t"
24735 "ror r4, r4, #8\n\t"
24736 "ror r5, r5, #8\n\t"
24737 "eor r4, r4, r10, lsr #8\n\t"
24738 "eor r5, r5, r11, lsr #8\n\t"
24739 "eor r10, r6, r6, ror #16\n\t"
24740 "eor r11, r7, r7, ror #16\n\t"
24741 "bic r10, r10, #0xff0000\n\t"
24742 "bic r11, r11, #0xff0000\n\t"
24743 "ror r6, r6, #8\n\t"
24744 "ror r7, r7, #8\n\t"
24745 "eor r6, r6, r10, lsr #8\n\t"
24746 "eor r7, r7, r11, lsr #8\n\t"
24747#else
24748 "rev r4, r4\n\t"
24749 "rev r5, r5\n\t"
24750 "rev r6, r6\n\t"
24751 "rev r7, r7\n\t"
24752#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
24753 "stm r8, {r4, r5, r6, r7}\n\t"
24754 "push {%[ks], r8}\n\t"
24755 "cmp r12, #10\n\t"
24756 "beq L_AES_GCM_encrypt_start_block_128_%=\n\t"
24757 "cmp r12, #12\n\t"
24758 "beq L_AES_GCM_encrypt_start_block_192_%=\n\t"
24759 "\n"
24760 "L_AES_GCM_encrypt_loop_block_256_%=:\n\t"
24761 "push {r1, %[len], lr}\n\t"
24762 "ldr lr, [sp, #16]\n\t"
24763 "add r7, r7, #1\n\t"
24764 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
24765 "str r7, [lr, #12]\n\t"
24766 /* Round: 0 - XOR in key schedule */
24767 "eor r4, r4, r8\n\t"
24768 "eor r5, r5, r9\n\t"
24769 "eor r6, r6, r10\n\t"
24770 "eor r7, r7, r11\n\t"
24771 "mov r1, #6\n\t"
24772#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
24773 "bl AES_encrypt_block\n\t"
24774#else
24775 "\n"
24776 "L_AES_GCM_encrypt_block_nr_256_%=:\n\t"
24777#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24778#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24779 "lsl r8, r5, #8\n\t"
24780 "lsr r8, r8, #24\n\t"
24781#else
24782 "uxtb r8, r5, ror #16\n\t"
24783#endif
24784#else
24785 "ubfx r8, r5, #16, #8\n\t"
24786#endif
24787 "lsr r11, r4, #24\n\t"
24788#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24789#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24790 "lsl lr, r6, #16\n\t"
24791 "lsr lr, lr, #24\n\t"
24792#else
24793 "uxtb lr, r6, ror #8\n\t"
24794#endif
24795#else
24796 "ubfx lr, r6, #8, #8\n\t"
24797#endif
24798#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24799#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24800 "lsl r2, r7, #24\n\t"
24801 "lsr r2, r2, #24\n\t"
24802#else
24803 "uxtb r2, r7\n\t"
24804#endif
24805#else
24806 "ubfx r2, r7, #0, #8\n\t"
24807#endif
24808 "ldr r8, [r0, r8, lsl #2]\n\t"
24809 "ldr r11, [r0, r11, lsl #2]\n\t"
24810 "ldr lr, [r0, lr, lsl #2]\n\t"
24811 "ldr r2, [r0, r2, lsl #2]\n\t"
24812#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24813#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24814 "lsl r9, r6, #8\n\t"
24815 "lsr r9, r9, #24\n\t"
24816#else
24817 "uxtb r9, r6, ror #16\n\t"
24818#endif
24819#else
24820 "ubfx r9, r6, #16, #8\n\t"
24821#endif
24822 "eor r8, r8, r11, ror #24\n\t"
24823 "lsr r11, r5, #24\n\t"
24824 "eor r8, r8, lr, ror #8\n\t"
24825#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24826#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24827 "lsl lr, r7, #16\n\t"
24828 "lsr lr, lr, #24\n\t"
24829#else
24830 "uxtb lr, r7, ror #8\n\t"
24831#endif
24832#else
24833 "ubfx lr, r7, #8, #8\n\t"
24834#endif
24835 "eor r8, r8, r2, ror #16\n\t"
24836#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24837#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24838 "lsl r2, r4, #24\n\t"
24839 "lsr r2, r2, #24\n\t"
24840#else
24841 "uxtb r2, r4\n\t"
24842#endif
24843#else
24844 "ubfx r2, r4, #0, #8\n\t"
24845#endif
24846 "ldr r9, [r0, r9, lsl #2]\n\t"
24847 "ldr r11, [r0, r11, lsl #2]\n\t"
24848 "ldr lr, [r0, lr, lsl #2]\n\t"
24849 "ldr r2, [r0, r2, lsl #2]\n\t"
24850#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24851#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24852 "lsl r10, r7, #8\n\t"
24853 "lsr r10, r10, #24\n\t"
24854#else
24855 "uxtb r10, r7, ror #16\n\t"
24856#endif
24857#else
24858 "ubfx r10, r7, #16, #8\n\t"
24859#endif
24860 "eor r9, r9, r11, ror #24\n\t"
24861 "lsr r11, r6, #24\n\t"
24862 "eor r9, r9, lr, ror #8\n\t"
24863#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24864#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24865 "lsl lr, r4, #16\n\t"
24866 "lsr lr, lr, #24\n\t"
24867#else
24868 "uxtb lr, r4, ror #8\n\t"
24869#endif
24870#else
24871 "ubfx lr, r4, #8, #8\n\t"
24872#endif
24873 "eor r9, r9, r2, ror #16\n\t"
24874#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24875#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24876 "lsl r2, r5, #24\n\t"
24877 "lsr r2, r2, #24\n\t"
24878#else
24879 "uxtb r2, r5\n\t"
24880#endif
24881#else
24882 "ubfx r2, r5, #0, #8\n\t"
24883#endif
24884 "ldr r10, [r0, r10, lsl #2]\n\t"
24885 "ldr r11, [r0, r11, lsl #2]\n\t"
24886 "ldr lr, [r0, lr, lsl #2]\n\t"
24887 "ldr r2, [r0, r2, lsl #2]\n\t"
24888#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24889#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24890 "lsl r6, r6, #24\n\t"
24891 "lsr r6, r6, #24\n\t"
24892#else
24893 "uxtb r6, r6\n\t"
24894#endif
24895#else
24896 "ubfx r6, r6, #0, #8\n\t"
24897#endif
24898 "eor r10, r10, r11, ror #24\n\t"
24899#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24900#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24901 "lsl r11, r4, #8\n\t"
24902 "lsr r11, r11, #24\n\t"
24903#else
24904 "uxtb r11, r4, ror #16\n\t"
24905#endif
24906#else
24907 "ubfx r11, r4, #16, #8\n\t"
24908#endif
24909 "eor r10, r10, lr, ror #8\n\t"
24910 "lsr lr, r7, #24\n\t"
24911 "eor r10, r10, r2, ror #16\n\t"
24912#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24913#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24914 "lsl r2, r5, #16\n\t"
24915 "lsr r2, r2, #24\n\t"
24916#else
24917 "uxtb r2, r5, ror #8\n\t"
24918#endif
24919#else
24920 "ubfx r2, r5, #8, #8\n\t"
24921#endif
24922 "ldr r6, [r0, r6, lsl #2]\n\t"
24923 "ldr lr, [r0, lr, lsl #2]\n\t"
24924 "ldr r11, [r0, r11, lsl #2]\n\t"
24925 "ldr r2, [r0, r2, lsl #2]\n\t"
24926 "eor lr, lr, r6, ror #24\n\t"
24927 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
24928 "eor r11, r11, lr, ror #24\n\t"
24929 "eor r11, r11, r2, ror #8\n\t"
24930 /* XOR in Key Schedule */
24931 "eor r8, r8, r4\n\t"
24932 "eor r9, r9, r5\n\t"
24933 "eor r10, r10, r6\n\t"
24934 "eor r11, r11, r7\n\t"
24935#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24936#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24937 "lsl r4, r9, #8\n\t"
24938 "lsr r4, r4, #24\n\t"
24939#else
24940 "uxtb r4, r9, ror #16\n\t"
24941#endif
24942#else
24943 "ubfx r4, r9, #16, #8\n\t"
24944#endif
24945 "lsr r7, r8, #24\n\t"
24946#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24947#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24948 "lsl lr, r10, #16\n\t"
24949 "lsr lr, lr, #24\n\t"
24950#else
24951 "uxtb lr, r10, ror #8\n\t"
24952#endif
24953#else
24954 "ubfx lr, r10, #8, #8\n\t"
24955#endif
24956#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24957#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24958 "lsl r2, r11, #24\n\t"
24959 "lsr r2, r2, #24\n\t"
24960#else
24961 "uxtb r2, r11\n\t"
24962#endif
24963#else
24964 "ubfx r2, r11, #0, #8\n\t"
24965#endif
24966 "ldr r4, [r0, r4, lsl #2]\n\t"
24967 "ldr r7, [r0, r7, lsl #2]\n\t"
24968 "ldr lr, [r0, lr, lsl #2]\n\t"
24969 "ldr r2, [r0, r2, lsl #2]\n\t"
24970#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24971#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24972 "lsl r5, r10, #8\n\t"
24973 "lsr r5, r5, #24\n\t"
24974#else
24975 "uxtb r5, r10, ror #16\n\t"
24976#endif
24977#else
24978 "ubfx r5, r10, #16, #8\n\t"
24979#endif
24980 "eor r4, r4, r7, ror #24\n\t"
24981 "lsr r7, r9, #24\n\t"
24982 "eor r4, r4, lr, ror #8\n\t"
24983#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24984#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24985 "lsl lr, r11, #16\n\t"
24986 "lsr lr, lr, #24\n\t"
24987#else
24988 "uxtb lr, r11, ror #8\n\t"
24989#endif
24990#else
24991 "ubfx lr, r11, #8, #8\n\t"
24992#endif
24993 "eor r4, r4, r2, ror #16\n\t"
24994#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
24995#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
24996 "lsl r2, r8, #24\n\t"
24997 "lsr r2, r2, #24\n\t"
24998#else
24999 "uxtb r2, r8\n\t"
25000#endif
25001#else
25002 "ubfx r2, r8, #0, #8\n\t"
25003#endif
25004 "ldr r5, [r0, r5, lsl #2]\n\t"
25005 "ldr r7, [r0, r7, lsl #2]\n\t"
25006 "ldr lr, [r0, lr, lsl #2]\n\t"
25007 "ldr r2, [r0, r2, lsl #2]\n\t"
25008#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25009#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25010 "lsl r6, r11, #8\n\t"
25011 "lsr r6, r6, #24\n\t"
25012#else
25013 "uxtb r6, r11, ror #16\n\t"
25014#endif
25015#else
25016 "ubfx r6, r11, #16, #8\n\t"
25017#endif
25018 "eor r5, r5, r7, ror #24\n\t"
25019 "lsr r7, r10, #24\n\t"
25020 "eor r5, r5, lr, ror #8\n\t"
25021#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25022#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25023 "lsl lr, r8, #16\n\t"
25024 "lsr lr, lr, #24\n\t"
25025#else
25026 "uxtb lr, r8, ror #8\n\t"
25027#endif
25028#else
25029 "ubfx lr, r8, #8, #8\n\t"
25030#endif
25031 "eor r5, r5, r2, ror #16\n\t"
25032#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25033#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25034 "lsl r2, r9, #24\n\t"
25035 "lsr r2, r2, #24\n\t"
25036#else
25037 "uxtb r2, r9\n\t"
25038#endif
25039#else
25040 "ubfx r2, r9, #0, #8\n\t"
25041#endif
25042 "ldr r6, [r0, r6, lsl #2]\n\t"
25043 "ldr r7, [r0, r7, lsl #2]\n\t"
25044 "ldr lr, [r0, lr, lsl #2]\n\t"
25045 "ldr r2, [r0, r2, lsl #2]\n\t"
25046#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25047#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25048 "lsl r10, r10, #24\n\t"
25049 "lsr r10, r10, #24\n\t"
25050#else
25051 "uxtb r10, r10\n\t"
25052#endif
25053#else
25054 "ubfx r10, r10, #0, #8\n\t"
25055#endif
25056 "eor r6, r6, r7, ror #24\n\t"
25057#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25058#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25059 "lsl r7, r8, #8\n\t"
25060 "lsr r7, r7, #24\n\t"
25061#else
25062 "uxtb r7, r8, ror #16\n\t"
25063#endif
25064#else
25065 "ubfx r7, r8, #16, #8\n\t"
25066#endif
25067 "eor r6, r6, lr, ror #8\n\t"
25068 "lsr lr, r11, #24\n\t"
25069 "eor r6, r6, r2, ror #16\n\t"
25070#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25071#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25072 "lsl r2, r9, #16\n\t"
25073 "lsr r2, r2, #24\n\t"
25074#else
25075 "uxtb r2, r9, ror #8\n\t"
25076#endif
25077#else
25078 "ubfx r2, r9, #8, #8\n\t"
25079#endif
25080 "ldr r10, [r0, r10, lsl #2]\n\t"
25081 "ldr lr, [r0, lr, lsl #2]\n\t"
25082 "ldr r7, [r0, r7, lsl #2]\n\t"
25083 "ldr r2, [r0, r2, lsl #2]\n\t"
25084 "eor lr, lr, r10, ror #24\n\t"
25085 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
25086 "eor r7, r7, lr, ror #24\n\t"
25087 "eor r7, r7, r2, ror #8\n\t"
25088 /* XOR in Key Schedule */
25089 "eor r4, r4, r8\n\t"
25090 "eor r5, r5, r9\n\t"
25091 "eor r6, r6, r10\n\t"
25092 "eor r7, r7, r11\n\t"
25093 "subs r1, r1, #1\n\t"
25094 "bne L_AES_GCM_encrypt_block_nr_256_%=\n\t"
25095#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25096#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25097 "lsl r8, r5, #8\n\t"
25098 "lsr r8, r8, #24\n\t"
25099#else
25100 "uxtb r8, r5, ror #16\n\t"
25101#endif
25102#else
25103 "ubfx r8, r5, #16, #8\n\t"
25104#endif
25105 "lsr r11, r4, #24\n\t"
25106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25107#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25108 "lsl lr, r6, #16\n\t"
25109 "lsr lr, lr, #24\n\t"
25110#else
25111 "uxtb lr, r6, ror #8\n\t"
25112#endif
25113#else
25114 "ubfx lr, r6, #8, #8\n\t"
25115#endif
25116#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25117#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25118 "lsl r2, r7, #24\n\t"
25119 "lsr r2, r2, #24\n\t"
25120#else
25121 "uxtb r2, r7\n\t"
25122#endif
25123#else
25124 "ubfx r2, r7, #0, #8\n\t"
25125#endif
25126 "ldr r8, [r0, r8, lsl #2]\n\t"
25127 "ldr r11, [r0, r11, lsl #2]\n\t"
25128 "ldr lr, [r0, lr, lsl #2]\n\t"
25129 "ldr r2, [r0, r2, lsl #2]\n\t"
25130#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25131#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25132 "lsl r9, r6, #8\n\t"
25133 "lsr r9, r9, #24\n\t"
25134#else
25135 "uxtb r9, r6, ror #16\n\t"
25136#endif
25137#else
25138 "ubfx r9, r6, #16, #8\n\t"
25139#endif
25140 "eor r8, r8, r11, ror #24\n\t"
25141 "lsr r11, r5, #24\n\t"
25142 "eor r8, r8, lr, ror #8\n\t"
25143#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25144#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25145 "lsl lr, r7, #16\n\t"
25146 "lsr lr, lr, #24\n\t"
25147#else
25148 "uxtb lr, r7, ror #8\n\t"
25149#endif
25150#else
25151 "ubfx lr, r7, #8, #8\n\t"
25152#endif
25153 "eor r8, r8, r2, ror #16\n\t"
25154#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25155#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25156 "lsl r2, r4, #24\n\t"
25157 "lsr r2, r2, #24\n\t"
25158#else
25159 "uxtb r2, r4\n\t"
25160#endif
25161#else
25162 "ubfx r2, r4, #0, #8\n\t"
25163#endif
25164 "ldr r9, [r0, r9, lsl #2]\n\t"
25165 "ldr r11, [r0, r11, lsl #2]\n\t"
25166 "ldr lr, [r0, lr, lsl #2]\n\t"
25167 "ldr r2, [r0, r2, lsl #2]\n\t"
25168#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25169#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25170 "lsl r10, r7, #8\n\t"
25171 "lsr r10, r10, #24\n\t"
25172#else
25173 "uxtb r10, r7, ror #16\n\t"
25174#endif
25175#else
25176 "ubfx r10, r7, #16, #8\n\t"
25177#endif
25178 "eor r9, r9, r11, ror #24\n\t"
25179 "lsr r11, r6, #24\n\t"
25180 "eor r9, r9, lr, ror #8\n\t"
25181#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25182#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25183 "lsl lr, r4, #16\n\t"
25184 "lsr lr, lr, #24\n\t"
25185#else
25186 "uxtb lr, r4, ror #8\n\t"
25187#endif
25188#else
25189 "ubfx lr, r4, #8, #8\n\t"
25190#endif
25191 "eor r9, r9, r2, ror #16\n\t"
25192#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25193#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25194 "lsl r2, r5, #24\n\t"
25195 "lsr r2, r2, #24\n\t"
25196#else
25197 "uxtb r2, r5\n\t"
25198#endif
25199#else
25200 "ubfx r2, r5, #0, #8\n\t"
25201#endif
25202 "ldr r10, [r0, r10, lsl #2]\n\t"
25203 "ldr r11, [r0, r11, lsl #2]\n\t"
25204 "ldr lr, [r0, lr, lsl #2]\n\t"
25205 "ldr r2, [r0, r2, lsl #2]\n\t"
25206#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25207#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25208 "lsl r6, r6, #24\n\t"
25209 "lsr r6, r6, #24\n\t"
25210#else
25211 "uxtb r6, r6\n\t"
25212#endif
25213#else
25214 "ubfx r6, r6, #0, #8\n\t"
25215#endif
25216 "eor r10, r10, r11, ror #24\n\t"
25217#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25218#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25219 "lsl r11, r4, #8\n\t"
25220 "lsr r11, r11, #24\n\t"
25221#else
25222 "uxtb r11, r4, ror #16\n\t"
25223#endif
25224#else
25225 "ubfx r11, r4, #16, #8\n\t"
25226#endif
25227 "eor r10, r10, lr, ror #8\n\t"
25228 "lsr lr, r7, #24\n\t"
25229 "eor r10, r10, r2, ror #16\n\t"
25230#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25231#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25232 "lsl r2, r5, #16\n\t"
25233 "lsr r2, r2, #24\n\t"
25234#else
25235 "uxtb r2, r5, ror #8\n\t"
25236#endif
25237#else
25238 "ubfx r2, r5, #8, #8\n\t"
25239#endif
25240 "ldr r6, [r0, r6, lsl #2]\n\t"
25241 "ldr lr, [r0, lr, lsl #2]\n\t"
25242 "ldr r11, [r0, r11, lsl #2]\n\t"
25243 "ldr r2, [r0, r2, lsl #2]\n\t"
25244 "eor lr, lr, r6, ror #24\n\t"
25245 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
25246 "eor r11, r11, lr, ror #24\n\t"
25247 "eor r11, r11, r2, ror #8\n\t"
25248 /* XOR in Key Schedule */
25249 "eor r8, r8, r4\n\t"
25250 "eor r9, r9, r5\n\t"
25251 "eor r10, r10, r6\n\t"
25252 "eor r11, r11, r7\n\t"
25253#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25254#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25255 "lsl r4, r11, #24\n\t"
25256 "lsr r4, r4, #24\n\t"
25257#else
25258 "uxtb r4, r11\n\t"
25259#endif
25260#else
25261 "ubfx r4, r11, #0, #8\n\t"
25262#endif
25263#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25264#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25265 "lsl r7, r10, #16\n\t"
25266 "lsr r7, r7, #24\n\t"
25267#else
25268 "uxtb r7, r10, ror #8\n\t"
25269#endif
25270#else
25271 "ubfx r7, r10, #8, #8\n\t"
25272#endif
25273#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25274#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25275 "lsl lr, r9, #8\n\t"
25276 "lsr lr, lr, #24\n\t"
25277#else
25278 "uxtb lr, r9, ror #16\n\t"
25279#endif
25280#else
25281 "ubfx lr, r9, #16, #8\n\t"
25282#endif
25283 "lsr r2, r8, #24\n\t"
25284 "ldrb r4, [r0, r4, lsl #2]\n\t"
25285 "ldrb r7, [r0, r7, lsl #2]\n\t"
25286 "ldrb lr, [r0, lr, lsl #2]\n\t"
25287 "ldrb r2, [r0, r2, lsl #2]\n\t"
25288#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25289#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25290 "lsl r5, r8, #24\n\t"
25291 "lsr r5, r5, #24\n\t"
25292#else
25293 "uxtb r5, r8\n\t"
25294#endif
25295#else
25296 "ubfx r5, r8, #0, #8\n\t"
25297#endif
25298 "eor r4, r4, r7, lsl #8\n\t"
25299#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25300#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25301 "lsl r7, r11, #16\n\t"
25302 "lsr r7, r7, #24\n\t"
25303#else
25304 "uxtb r7, r11, ror #8\n\t"
25305#endif
25306#else
25307 "ubfx r7, r11, #8, #8\n\t"
25308#endif
25309 "eor r4, r4, lr, lsl #16\n\t"
25310#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25311#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25312 "lsl lr, r10, #8\n\t"
25313 "lsr lr, lr, #24\n\t"
25314#else
25315 "uxtb lr, r10, ror #16\n\t"
25316#endif
25317#else
25318 "ubfx lr, r10, #16, #8\n\t"
25319#endif
25320 "eor r4, r4, r2, lsl #24\n\t"
25321 "lsr r2, r9, #24\n\t"
25322 "ldrb r5, [r0, r5, lsl #2]\n\t"
25323 "ldrb r7, [r0, r7, lsl #2]\n\t"
25324 "ldrb lr, [r0, lr, lsl #2]\n\t"
25325 "ldrb r2, [r0, r2, lsl #2]\n\t"
25326#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25327#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25328 "lsl r6, r9, #24\n\t"
25329 "lsr r6, r6, #24\n\t"
25330#else
25331 "uxtb r6, r9\n\t"
25332#endif
25333#else
25334 "ubfx r6, r9, #0, #8\n\t"
25335#endif
25336 "eor r5, r5, r7, lsl #8\n\t"
25337#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25338#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25339 "lsl r7, r8, #16\n\t"
25340 "lsr r7, r7, #24\n\t"
25341#else
25342 "uxtb r7, r8, ror #8\n\t"
25343#endif
25344#else
25345 "ubfx r7, r8, #8, #8\n\t"
25346#endif
25347 "eor r5, r5, lr, lsl #16\n\t"
25348#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25349#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25350 "lsl lr, r11, #8\n\t"
25351 "lsr lr, lr, #24\n\t"
25352#else
25353 "uxtb lr, r11, ror #16\n\t"
25354#endif
25355#else
25356 "ubfx lr, r11, #16, #8\n\t"
25357#endif
25358 "eor r5, r5, r2, lsl #24\n\t"
25359 "lsr r2, r10, #24\n\t"
25360 "ldrb r6, [r0, r6, lsl #2]\n\t"
25361 "ldrb r7, [r0, r7, lsl #2]\n\t"
25362 "ldrb lr, [r0, lr, lsl #2]\n\t"
25363 "ldrb r2, [r0, r2, lsl #2]\n\t"
25364 "lsr r11, r11, #24\n\t"
25365 "eor r6, r6, r7, lsl #8\n\t"
25366#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25367#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25368 "lsl r7, r10, #24\n\t"
25369 "lsr r7, r7, #24\n\t"
25370#else
25371 "uxtb r7, r10\n\t"
25372#endif
25373#else
25374 "ubfx r7, r10, #0, #8\n\t"
25375#endif
25376 "eor r6, r6, lr, lsl #16\n\t"
25377#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25378#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25379 "lsl lr, r9, #16\n\t"
25380 "lsr lr, lr, #24\n\t"
25381#else
25382 "uxtb lr, r9, ror #8\n\t"
25383#endif
25384#else
25385 "ubfx lr, r9, #8, #8\n\t"
25386#endif
25387 "eor r6, r6, r2, lsl #24\n\t"
25388#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25389#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25390 "lsl r2, r8, #8\n\t"
25391 "lsr r2, r2, #24\n\t"
25392#else
25393 "uxtb r2, r8, ror #16\n\t"
25394#endif
25395#else
25396 "ubfx r2, r8, #16, #8\n\t"
25397#endif
25398 "ldrb r11, [r0, r11, lsl #2]\n\t"
25399 "ldrb r7, [r0, r7, lsl #2]\n\t"
25400 "ldrb lr, [r0, lr, lsl #2]\n\t"
25401 "ldrb r2, [r0, r2, lsl #2]\n\t"
25402 "eor lr, lr, r11, lsl #16\n\t"
25403 "ldm %[ks], {r8, r9, r10, r11}\n\t"
25404 "eor r7, r7, lr, lsl #8\n\t"
25405 "eor r7, r7, r2, lsl #16\n\t"
25406 /* XOR in Key Schedule */
25407 "eor r4, r4, r8\n\t"
25408 "eor r5, r5, r9\n\t"
25409 "eor r6, r6, r10\n\t"
25410 "eor r7, r7, r11\n\t"
25411#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
25412 "pop {r1, %[len], lr}\n\t"
25413 "ldr %[ks], [sp]\n\t"
25414#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25415 "eor r8, r4, r4, ror #16\n\t"
25416 "eor r9, r5, r5, ror #16\n\t"
25417 "eor r10, r6, r6, ror #16\n\t"
25418 "eor r11, r7, r7, ror #16\n\t"
25419 "bic r8, r8, #0xff0000\n\t"
25420 "bic r9, r9, #0xff0000\n\t"
25421 "bic r10, r10, #0xff0000\n\t"
25422 "bic r11, r11, #0xff0000\n\t"
25423 "ror r4, r4, #8\n\t"
25424 "ror r5, r5, #8\n\t"
25425 "ror r6, r6, #8\n\t"
25426 "ror r7, r7, #8\n\t"
25427 "eor r4, r4, r8, lsr #8\n\t"
25428 "eor r5, r5, r9, lsr #8\n\t"
25429 "eor r6, r6, r10, lsr #8\n\t"
25430 "eor r7, r7, r11, lsr #8\n\t"
25431#else
25432 "rev r4, r4\n\t"
25433 "rev r5, r5\n\t"
25434 "rev r6, r6\n\t"
25435 "rev r7, r7\n\t"
25436#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
25437 "ldr r8, [lr]\n\t"
25438 "ldr r9, [lr, #4]\n\t"
25439 "ldr r10, [lr, #8]\n\t"
25440 "ldr r11, [lr, #12]\n\t"
25441 "eor r4, r4, r8\n\t"
25442 "eor r5, r5, r9\n\t"
25443 "eor r6, r6, r10\n\t"
25444 "eor r7, r7, r11\n\t"
25445 "ldr r8, [sp, #4]\n\t"
25446 "str r4, [%[out]]\n\t"
25447 "str r5, [%[out], #4]\n\t"
25448 "str r6, [%[out], #8]\n\t"
25449 "str r7, [%[out], #12]\n\t"
25450 "ldm r8, {r4, r5, r6, r7}\n\t"
25451 "subs %[len], %[len], #16\n\t"
25452 "add lr, lr, #16\n\t"
25453 "add %[out], %[out], #16\n\t"
25454 "bne L_AES_GCM_encrypt_loop_block_256_%=\n\t"
25455 "b L_AES_GCM_encrypt_end_%=\n\t"
25456 "\n"
25457 "L_AES_GCM_encrypt_start_block_192_%=:\n\t"
25458 "\n"
25459 "L_AES_GCM_encrypt_loop_block_192_%=:\n\t"
25460 "push {r1, %[len], lr}\n\t"
25461 "ldr lr, [sp, #16]\n\t"
25462 "add r7, r7, #1\n\t"
25463 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
25464 "str r7, [lr, #12]\n\t"
25465 /* Round: 0 - XOR in key schedule */
25466 "eor r4, r4, r8\n\t"
25467 "eor r5, r5, r9\n\t"
25468 "eor r6, r6, r10\n\t"
25469 "eor r7, r7, r11\n\t"
25470 "mov r1, #5\n\t"
25471#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
25472 "bl AES_encrypt_block\n\t"
25473#else
25474 "\n"
25475 "L_AES_GCM_encrypt_block_nr_192_%=:\n\t"
25476#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25477#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25478 "lsl r8, r5, #8\n\t"
25479 "lsr r8, r8, #24\n\t"
25480#else
25481 "uxtb r8, r5, ror #16\n\t"
25482#endif
25483#else
25484 "ubfx r8, r5, #16, #8\n\t"
25485#endif
25486 "lsr r11, r4, #24\n\t"
25487#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25488#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25489 "lsl lr, r6, #16\n\t"
25490 "lsr lr, lr, #24\n\t"
25491#else
25492 "uxtb lr, r6, ror #8\n\t"
25493#endif
25494#else
25495 "ubfx lr, r6, #8, #8\n\t"
25496#endif
25497#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25498#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25499 "lsl r2, r7, #24\n\t"
25500 "lsr r2, r2, #24\n\t"
25501#else
25502 "uxtb r2, r7\n\t"
25503#endif
25504#else
25505 "ubfx r2, r7, #0, #8\n\t"
25506#endif
25507 "ldr r8, [r0, r8, lsl #2]\n\t"
25508 "ldr r11, [r0, r11, lsl #2]\n\t"
25509 "ldr lr, [r0, lr, lsl #2]\n\t"
25510 "ldr r2, [r0, r2, lsl #2]\n\t"
25511#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25512#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25513 "lsl r9, r6, #8\n\t"
25514 "lsr r9, r9, #24\n\t"
25515#else
25516 "uxtb r9, r6, ror #16\n\t"
25517#endif
25518#else
25519 "ubfx r9, r6, #16, #8\n\t"
25520#endif
25521 "eor r8, r8, r11, ror #24\n\t"
25522 "lsr r11, r5, #24\n\t"
25523 "eor r8, r8, lr, ror #8\n\t"
25524#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25525#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25526 "lsl lr, r7, #16\n\t"
25527 "lsr lr, lr, #24\n\t"
25528#else
25529 "uxtb lr, r7, ror #8\n\t"
25530#endif
25531#else
25532 "ubfx lr, r7, #8, #8\n\t"
25533#endif
25534 "eor r8, r8, r2, ror #16\n\t"
25535#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25536#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25537 "lsl r2, r4, #24\n\t"
25538 "lsr r2, r2, #24\n\t"
25539#else
25540 "uxtb r2, r4\n\t"
25541#endif
25542#else
25543 "ubfx r2, r4, #0, #8\n\t"
25544#endif
25545 "ldr r9, [r0, r9, lsl #2]\n\t"
25546 "ldr r11, [r0, r11, lsl #2]\n\t"
25547 "ldr lr, [r0, lr, lsl #2]\n\t"
25548 "ldr r2, [r0, r2, lsl #2]\n\t"
25549#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25550#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25551 "lsl r10, r7, #8\n\t"
25552 "lsr r10, r10, #24\n\t"
25553#else
25554 "uxtb r10, r7, ror #16\n\t"
25555#endif
25556#else
25557 "ubfx r10, r7, #16, #8\n\t"
25558#endif
25559 "eor r9, r9, r11, ror #24\n\t"
25560 "lsr r11, r6, #24\n\t"
25561 "eor r9, r9, lr, ror #8\n\t"
25562#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25563#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25564 "lsl lr, r4, #16\n\t"
25565 "lsr lr, lr, #24\n\t"
25566#else
25567 "uxtb lr, r4, ror #8\n\t"
25568#endif
25569#else
25570 "ubfx lr, r4, #8, #8\n\t"
25571#endif
25572 "eor r9, r9, r2, ror #16\n\t"
25573#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25574#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25575 "lsl r2, r5, #24\n\t"
25576 "lsr r2, r2, #24\n\t"
25577#else
25578 "uxtb r2, r5\n\t"
25579#endif
25580#else
25581 "ubfx r2, r5, #0, #8\n\t"
25582#endif
25583 "ldr r10, [r0, r10, lsl #2]\n\t"
25584 "ldr r11, [r0, r11, lsl #2]\n\t"
25585 "ldr lr, [r0, lr, lsl #2]\n\t"
25586 "ldr r2, [r0, r2, lsl #2]\n\t"
25587#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25588#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25589 "lsl r6, r6, #24\n\t"
25590 "lsr r6, r6, #24\n\t"
25591#else
25592 "uxtb r6, r6\n\t"
25593#endif
25594#else
25595 "ubfx r6, r6, #0, #8\n\t"
25596#endif
25597 "eor r10, r10, r11, ror #24\n\t"
25598#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25599#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25600 "lsl r11, r4, #8\n\t"
25601 "lsr r11, r11, #24\n\t"
25602#else
25603 "uxtb r11, r4, ror #16\n\t"
25604#endif
25605#else
25606 "ubfx r11, r4, #16, #8\n\t"
25607#endif
25608 "eor r10, r10, lr, ror #8\n\t"
25609 "lsr lr, r7, #24\n\t"
25610 "eor r10, r10, r2, ror #16\n\t"
25611#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25612#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25613 "lsl r2, r5, #16\n\t"
25614 "lsr r2, r2, #24\n\t"
25615#else
25616 "uxtb r2, r5, ror #8\n\t"
25617#endif
25618#else
25619 "ubfx r2, r5, #8, #8\n\t"
25620#endif
25621 "ldr r6, [r0, r6, lsl #2]\n\t"
25622 "ldr lr, [r0, lr, lsl #2]\n\t"
25623 "ldr r11, [r0, r11, lsl #2]\n\t"
25624 "ldr r2, [r0, r2, lsl #2]\n\t"
25625 "eor lr, lr, r6, ror #24\n\t"
25626 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
25627 "eor r11, r11, lr, ror #24\n\t"
25628 "eor r11, r11, r2, ror #8\n\t"
25629 /* XOR in Key Schedule */
25630 "eor r8, r8, r4\n\t"
25631 "eor r9, r9, r5\n\t"
25632 "eor r10, r10, r6\n\t"
25633 "eor r11, r11, r7\n\t"
25634#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25635#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25636 "lsl r4, r9, #8\n\t"
25637 "lsr r4, r4, #24\n\t"
25638#else
25639 "uxtb r4, r9, ror #16\n\t"
25640#endif
25641#else
25642 "ubfx r4, r9, #16, #8\n\t"
25643#endif
25644 "lsr r7, r8, #24\n\t"
25645#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25646#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25647 "lsl lr, r10, #16\n\t"
25648 "lsr lr, lr, #24\n\t"
25649#else
25650 "uxtb lr, r10, ror #8\n\t"
25651#endif
25652#else
25653 "ubfx lr, r10, #8, #8\n\t"
25654#endif
25655#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25656#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25657 "lsl r2, r11, #24\n\t"
25658 "lsr r2, r2, #24\n\t"
25659#else
25660 "uxtb r2, r11\n\t"
25661#endif
25662#else
25663 "ubfx r2, r11, #0, #8\n\t"
25664#endif
25665 "ldr r4, [r0, r4, lsl #2]\n\t"
25666 "ldr r7, [r0, r7, lsl #2]\n\t"
25667 "ldr lr, [r0, lr, lsl #2]\n\t"
25668 "ldr r2, [r0, r2, lsl #2]\n\t"
25669#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25670#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25671 "lsl r5, r10, #8\n\t"
25672 "lsr r5, r5, #24\n\t"
25673#else
25674 "uxtb r5, r10, ror #16\n\t"
25675#endif
25676#else
25677 "ubfx r5, r10, #16, #8\n\t"
25678#endif
25679 "eor r4, r4, r7, ror #24\n\t"
25680 "lsr r7, r9, #24\n\t"
25681 "eor r4, r4, lr, ror #8\n\t"
25682#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25683#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25684 "lsl lr, r11, #16\n\t"
25685 "lsr lr, lr, #24\n\t"
25686#else
25687 "uxtb lr, r11, ror #8\n\t"
25688#endif
25689#else
25690 "ubfx lr, r11, #8, #8\n\t"
25691#endif
25692 "eor r4, r4, r2, ror #16\n\t"
25693#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25694#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25695 "lsl r2, r8, #24\n\t"
25696 "lsr r2, r2, #24\n\t"
25697#else
25698 "uxtb r2, r8\n\t"
25699#endif
25700#else
25701 "ubfx r2, r8, #0, #8\n\t"
25702#endif
25703 "ldr r5, [r0, r5, lsl #2]\n\t"
25704 "ldr r7, [r0, r7, lsl #2]\n\t"
25705 "ldr lr, [r0, lr, lsl #2]\n\t"
25706 "ldr r2, [r0, r2, lsl #2]\n\t"
25707#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25708#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25709 "lsl r6, r11, #8\n\t"
25710 "lsr r6, r6, #24\n\t"
25711#else
25712 "uxtb r6, r11, ror #16\n\t"
25713#endif
25714#else
25715 "ubfx r6, r11, #16, #8\n\t"
25716#endif
25717 "eor r5, r5, r7, ror #24\n\t"
25718 "lsr r7, r10, #24\n\t"
25719 "eor r5, r5, lr, ror #8\n\t"
25720#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25721#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25722 "lsl lr, r8, #16\n\t"
25723 "lsr lr, lr, #24\n\t"
25724#else
25725 "uxtb lr, r8, ror #8\n\t"
25726#endif
25727#else
25728 "ubfx lr, r8, #8, #8\n\t"
25729#endif
25730 "eor r5, r5, r2, ror #16\n\t"
25731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25733 "lsl r2, r9, #24\n\t"
25734 "lsr r2, r2, #24\n\t"
25735#else
25736 "uxtb r2, r9\n\t"
25737#endif
25738#else
25739 "ubfx r2, r9, #0, #8\n\t"
25740#endif
25741 "ldr r6, [r0, r6, lsl #2]\n\t"
25742 "ldr r7, [r0, r7, lsl #2]\n\t"
25743 "ldr lr, [r0, lr, lsl #2]\n\t"
25744 "ldr r2, [r0, r2, lsl #2]\n\t"
25745#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25746#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25747 "lsl r10, r10, #24\n\t"
25748 "lsr r10, r10, #24\n\t"
25749#else
25750 "uxtb r10, r10\n\t"
25751#endif
25752#else
25753 "ubfx r10, r10, #0, #8\n\t"
25754#endif
25755 "eor r6, r6, r7, ror #24\n\t"
25756#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25757#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25758 "lsl r7, r8, #8\n\t"
25759 "lsr r7, r7, #24\n\t"
25760#else
25761 "uxtb r7, r8, ror #16\n\t"
25762#endif
25763#else
25764 "ubfx r7, r8, #16, #8\n\t"
25765#endif
25766 "eor r6, r6, lr, ror #8\n\t"
25767 "lsr lr, r11, #24\n\t"
25768 "eor r6, r6, r2, ror #16\n\t"
25769#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25770#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25771 "lsl r2, r9, #16\n\t"
25772 "lsr r2, r2, #24\n\t"
25773#else
25774 "uxtb r2, r9, ror #8\n\t"
25775#endif
25776#else
25777 "ubfx r2, r9, #8, #8\n\t"
25778#endif
25779 "ldr r10, [r0, r10, lsl #2]\n\t"
25780 "ldr lr, [r0, lr, lsl #2]\n\t"
25781 "ldr r7, [r0, r7, lsl #2]\n\t"
25782 "ldr r2, [r0, r2, lsl #2]\n\t"
25783 "eor lr, lr, r10, ror #24\n\t"
25784 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
25785 "eor r7, r7, lr, ror #24\n\t"
25786 "eor r7, r7, r2, ror #8\n\t"
25787 /* XOR in Key Schedule */
25788 "eor r4, r4, r8\n\t"
25789 "eor r5, r5, r9\n\t"
25790 "eor r6, r6, r10\n\t"
25791 "eor r7, r7, r11\n\t"
25792 "subs r1, r1, #1\n\t"
25793 "bne L_AES_GCM_encrypt_block_nr_192_%=\n\t"
25794#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25795#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25796 "lsl r8, r5, #8\n\t"
25797 "lsr r8, r8, #24\n\t"
25798#else
25799 "uxtb r8, r5, ror #16\n\t"
25800#endif
25801#else
25802 "ubfx r8, r5, #16, #8\n\t"
25803#endif
25804 "lsr r11, r4, #24\n\t"
25805#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25806#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25807 "lsl lr, r6, #16\n\t"
25808 "lsr lr, lr, #24\n\t"
25809#else
25810 "uxtb lr, r6, ror #8\n\t"
25811#endif
25812#else
25813 "ubfx lr, r6, #8, #8\n\t"
25814#endif
25815#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25816#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25817 "lsl r2, r7, #24\n\t"
25818 "lsr r2, r2, #24\n\t"
25819#else
25820 "uxtb r2, r7\n\t"
25821#endif
25822#else
25823 "ubfx r2, r7, #0, #8\n\t"
25824#endif
25825 "ldr r8, [r0, r8, lsl #2]\n\t"
25826 "ldr r11, [r0, r11, lsl #2]\n\t"
25827 "ldr lr, [r0, lr, lsl #2]\n\t"
25828 "ldr r2, [r0, r2, lsl #2]\n\t"
25829#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25830#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25831 "lsl r9, r6, #8\n\t"
25832 "lsr r9, r9, #24\n\t"
25833#else
25834 "uxtb r9, r6, ror #16\n\t"
25835#endif
25836#else
25837 "ubfx r9, r6, #16, #8\n\t"
25838#endif
25839 "eor r8, r8, r11, ror #24\n\t"
25840 "lsr r11, r5, #24\n\t"
25841 "eor r8, r8, lr, ror #8\n\t"
25842#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25843#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25844 "lsl lr, r7, #16\n\t"
25845 "lsr lr, lr, #24\n\t"
25846#else
25847 "uxtb lr, r7, ror #8\n\t"
25848#endif
25849#else
25850 "ubfx lr, r7, #8, #8\n\t"
25851#endif
25852 "eor r8, r8, r2, ror #16\n\t"
25853#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25854#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25855 "lsl r2, r4, #24\n\t"
25856 "lsr r2, r2, #24\n\t"
25857#else
25858 "uxtb r2, r4\n\t"
25859#endif
25860#else
25861 "ubfx r2, r4, #0, #8\n\t"
25862#endif
25863 "ldr r9, [r0, r9, lsl #2]\n\t"
25864 "ldr r11, [r0, r11, lsl #2]\n\t"
25865 "ldr lr, [r0, lr, lsl #2]\n\t"
25866 "ldr r2, [r0, r2, lsl #2]\n\t"
25867#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25868#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25869 "lsl r10, r7, #8\n\t"
25870 "lsr r10, r10, #24\n\t"
25871#else
25872 "uxtb r10, r7, ror #16\n\t"
25873#endif
25874#else
25875 "ubfx r10, r7, #16, #8\n\t"
25876#endif
25877 "eor r9, r9, r11, ror #24\n\t"
25878 "lsr r11, r6, #24\n\t"
25879 "eor r9, r9, lr, ror #8\n\t"
25880#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25881#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25882 "lsl lr, r4, #16\n\t"
25883 "lsr lr, lr, #24\n\t"
25884#else
25885 "uxtb lr, r4, ror #8\n\t"
25886#endif
25887#else
25888 "ubfx lr, r4, #8, #8\n\t"
25889#endif
25890 "eor r9, r9, r2, ror #16\n\t"
25891#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25892#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25893 "lsl r2, r5, #24\n\t"
25894 "lsr r2, r2, #24\n\t"
25895#else
25896 "uxtb r2, r5\n\t"
25897#endif
25898#else
25899 "ubfx r2, r5, #0, #8\n\t"
25900#endif
25901 "ldr r10, [r0, r10, lsl #2]\n\t"
25902 "ldr r11, [r0, r11, lsl #2]\n\t"
25903 "ldr lr, [r0, lr, lsl #2]\n\t"
25904 "ldr r2, [r0, r2, lsl #2]\n\t"
25905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25906#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25907 "lsl r6, r6, #24\n\t"
25908 "lsr r6, r6, #24\n\t"
25909#else
25910 "uxtb r6, r6\n\t"
25911#endif
25912#else
25913 "ubfx r6, r6, #0, #8\n\t"
25914#endif
25915 "eor r10, r10, r11, ror #24\n\t"
25916#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25917#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25918 "lsl r11, r4, #8\n\t"
25919 "lsr r11, r11, #24\n\t"
25920#else
25921 "uxtb r11, r4, ror #16\n\t"
25922#endif
25923#else
25924 "ubfx r11, r4, #16, #8\n\t"
25925#endif
25926 "eor r10, r10, lr, ror #8\n\t"
25927 "lsr lr, r7, #24\n\t"
25928 "eor r10, r10, r2, ror #16\n\t"
25929#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25930#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25931 "lsl r2, r5, #16\n\t"
25932 "lsr r2, r2, #24\n\t"
25933#else
25934 "uxtb r2, r5, ror #8\n\t"
25935#endif
25936#else
25937 "ubfx r2, r5, #8, #8\n\t"
25938#endif
25939 "ldr r6, [r0, r6, lsl #2]\n\t"
25940 "ldr lr, [r0, lr, lsl #2]\n\t"
25941 "ldr r11, [r0, r11, lsl #2]\n\t"
25942 "ldr r2, [r0, r2, lsl #2]\n\t"
25943 "eor lr, lr, r6, ror #24\n\t"
25944 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
25945 "eor r11, r11, lr, ror #24\n\t"
25946 "eor r11, r11, r2, ror #8\n\t"
25947 /* XOR in Key Schedule */
25948 "eor r8, r8, r4\n\t"
25949 "eor r9, r9, r5\n\t"
25950 "eor r10, r10, r6\n\t"
25951 "eor r11, r11, r7\n\t"
25952#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25953#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25954 "lsl r4, r11, #24\n\t"
25955 "lsr r4, r4, #24\n\t"
25956#else
25957 "uxtb r4, r11\n\t"
25958#endif
25959#else
25960 "ubfx r4, r11, #0, #8\n\t"
25961#endif
25962#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25964 "lsl r7, r10, #16\n\t"
25965 "lsr r7, r7, #24\n\t"
25966#else
25967 "uxtb r7, r10, ror #8\n\t"
25968#endif
25969#else
25970 "ubfx r7, r10, #8, #8\n\t"
25971#endif
25972#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25973#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25974 "lsl lr, r9, #8\n\t"
25975 "lsr lr, lr, #24\n\t"
25976#else
25977 "uxtb lr, r9, ror #16\n\t"
25978#endif
25979#else
25980 "ubfx lr, r9, #16, #8\n\t"
25981#endif
25982 "lsr r2, r8, #24\n\t"
25983 "ldrb r4, [r0, r4, lsl #2]\n\t"
25984 "ldrb r7, [r0, r7, lsl #2]\n\t"
25985 "ldrb lr, [r0, lr, lsl #2]\n\t"
25986 "ldrb r2, [r0, r2, lsl #2]\n\t"
25987#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25988#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
25989 "lsl r5, r8, #24\n\t"
25990 "lsr r5, r5, #24\n\t"
25991#else
25992 "uxtb r5, r8\n\t"
25993#endif
25994#else
25995 "ubfx r5, r8, #0, #8\n\t"
25996#endif
25997 "eor r4, r4, r7, lsl #8\n\t"
25998#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
25999#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26000 "lsl r7, r11, #16\n\t"
26001 "lsr r7, r7, #24\n\t"
26002#else
26003 "uxtb r7, r11, ror #8\n\t"
26004#endif
26005#else
26006 "ubfx r7, r11, #8, #8\n\t"
26007#endif
26008 "eor r4, r4, lr, lsl #16\n\t"
26009#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26010#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26011 "lsl lr, r10, #8\n\t"
26012 "lsr lr, lr, #24\n\t"
26013#else
26014 "uxtb lr, r10, ror #16\n\t"
26015#endif
26016#else
26017 "ubfx lr, r10, #16, #8\n\t"
26018#endif
26019 "eor r4, r4, r2, lsl #24\n\t"
26020 "lsr r2, r9, #24\n\t"
26021 "ldrb r5, [r0, r5, lsl #2]\n\t"
26022 "ldrb r7, [r0, r7, lsl #2]\n\t"
26023 "ldrb lr, [r0, lr, lsl #2]\n\t"
26024 "ldrb r2, [r0, r2, lsl #2]\n\t"
26025#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26026#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26027 "lsl r6, r9, #24\n\t"
26028 "lsr r6, r6, #24\n\t"
26029#else
26030 "uxtb r6, r9\n\t"
26031#endif
26032#else
26033 "ubfx r6, r9, #0, #8\n\t"
26034#endif
26035 "eor r5, r5, r7, lsl #8\n\t"
26036#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26037#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26038 "lsl r7, r8, #16\n\t"
26039 "lsr r7, r7, #24\n\t"
26040#else
26041 "uxtb r7, r8, ror #8\n\t"
26042#endif
26043#else
26044 "ubfx r7, r8, #8, #8\n\t"
26045#endif
26046 "eor r5, r5, lr, lsl #16\n\t"
26047#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26048#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26049 "lsl lr, r11, #8\n\t"
26050 "lsr lr, lr, #24\n\t"
26051#else
26052 "uxtb lr, r11, ror #16\n\t"
26053#endif
26054#else
26055 "ubfx lr, r11, #16, #8\n\t"
26056#endif
26057 "eor r5, r5, r2, lsl #24\n\t"
26058 "lsr r2, r10, #24\n\t"
26059 "ldrb r6, [r0, r6, lsl #2]\n\t"
26060 "ldrb r7, [r0, r7, lsl #2]\n\t"
26061 "ldrb lr, [r0, lr, lsl #2]\n\t"
26062 "ldrb r2, [r0, r2, lsl #2]\n\t"
26063 "lsr r11, r11, #24\n\t"
26064 "eor r6, r6, r7, lsl #8\n\t"
26065#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26066#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26067 "lsl r7, r10, #24\n\t"
26068 "lsr r7, r7, #24\n\t"
26069#else
26070 "uxtb r7, r10\n\t"
26071#endif
26072#else
26073 "ubfx r7, r10, #0, #8\n\t"
26074#endif
26075 "eor r6, r6, lr, lsl #16\n\t"
26076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26077#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26078 "lsl lr, r9, #16\n\t"
26079 "lsr lr, lr, #24\n\t"
26080#else
26081 "uxtb lr, r9, ror #8\n\t"
26082#endif
26083#else
26084 "ubfx lr, r9, #8, #8\n\t"
26085#endif
26086 "eor r6, r6, r2, lsl #24\n\t"
26087#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26088#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26089 "lsl r2, r8, #8\n\t"
26090 "lsr r2, r2, #24\n\t"
26091#else
26092 "uxtb r2, r8, ror #16\n\t"
26093#endif
26094#else
26095 "ubfx r2, r8, #16, #8\n\t"
26096#endif
26097 "ldrb r11, [r0, r11, lsl #2]\n\t"
26098 "ldrb r7, [r0, r7, lsl #2]\n\t"
26099 "ldrb lr, [r0, lr, lsl #2]\n\t"
26100 "ldrb r2, [r0, r2, lsl #2]\n\t"
26101 "eor lr, lr, r11, lsl #16\n\t"
26102 "ldm %[ks], {r8, r9, r10, r11}\n\t"
26103 "eor r7, r7, lr, lsl #8\n\t"
26104 "eor r7, r7, r2, lsl #16\n\t"
26105 /* XOR in Key Schedule */
26106 "eor r4, r4, r8\n\t"
26107 "eor r5, r5, r9\n\t"
26108 "eor r6, r6, r10\n\t"
26109 "eor r7, r7, r11\n\t"
26110#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
26111 "pop {r1, %[len], lr}\n\t"
26112 "ldr %[ks], [sp]\n\t"
26113#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26114 "eor r8, r4, r4, ror #16\n\t"
26115 "eor r9, r5, r5, ror #16\n\t"
26116 "eor r10, r6, r6, ror #16\n\t"
26117 "eor r11, r7, r7, ror #16\n\t"
26118 "bic r8, r8, #0xff0000\n\t"
26119 "bic r9, r9, #0xff0000\n\t"
26120 "bic r10, r10, #0xff0000\n\t"
26121 "bic r11, r11, #0xff0000\n\t"
26122 "ror r4, r4, #8\n\t"
26123 "ror r5, r5, #8\n\t"
26124 "ror r6, r6, #8\n\t"
26125 "ror r7, r7, #8\n\t"
26126 "eor r4, r4, r8, lsr #8\n\t"
26127 "eor r5, r5, r9, lsr #8\n\t"
26128 "eor r6, r6, r10, lsr #8\n\t"
26129 "eor r7, r7, r11, lsr #8\n\t"
26130#else
26131 "rev r4, r4\n\t"
26132 "rev r5, r5\n\t"
26133 "rev r6, r6\n\t"
26134 "rev r7, r7\n\t"
26135#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
26136 "ldr r8, [lr]\n\t"
26137 "ldr r9, [lr, #4]\n\t"
26138 "ldr r10, [lr, #8]\n\t"
26139 "ldr r11, [lr, #12]\n\t"
26140 "eor r4, r4, r8\n\t"
26141 "eor r5, r5, r9\n\t"
26142 "eor r6, r6, r10\n\t"
26143 "eor r7, r7, r11\n\t"
26144 "ldr r8, [sp, #4]\n\t"
26145 "str r4, [%[out]]\n\t"
26146 "str r5, [%[out], #4]\n\t"
26147 "str r6, [%[out], #8]\n\t"
26148 "str r7, [%[out], #12]\n\t"
26149 "ldm r8, {r4, r5, r6, r7}\n\t"
26150 "subs %[len], %[len], #16\n\t"
26151 "add lr, lr, #16\n\t"
26152 "add %[out], %[out], #16\n\t"
26153 "bne L_AES_GCM_encrypt_loop_block_192_%=\n\t"
26154 "b L_AES_GCM_encrypt_end_%=\n\t"
26155 "\n"
26156 "L_AES_GCM_encrypt_start_block_128_%=:\n\t"
26157 "\n"
26158 "L_AES_GCM_encrypt_loop_block_128_%=:\n\t"
26159 "push {r1, %[len], lr}\n\t"
26160 "ldr lr, [sp, #16]\n\t"
26161 "add r7, r7, #1\n\t"
26162 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
26163 "str r7, [lr, #12]\n\t"
26164 /* Round: 0 - XOR in key schedule */
26165 "eor r4, r4, r8\n\t"
26166 "eor r5, r5, r9\n\t"
26167 "eor r6, r6, r10\n\t"
26168 "eor r7, r7, r11\n\t"
26169 "mov r1, #4\n\t"
26170#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
26171 "bl AES_encrypt_block\n\t"
26172#else
26173 "\n"
26174 "L_AES_GCM_encrypt_block_nr_128_%=:\n\t"
26175#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26176#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26177 "lsl r8, r5, #8\n\t"
26178 "lsr r8, r8, #24\n\t"
26179#else
26180 "uxtb r8, r5, ror #16\n\t"
26181#endif
26182#else
26183 "ubfx r8, r5, #16, #8\n\t"
26184#endif
26185 "lsr r11, r4, #24\n\t"
26186#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26188 "lsl lr, r6, #16\n\t"
26189 "lsr lr, lr, #24\n\t"
26190#else
26191 "uxtb lr, r6, ror #8\n\t"
26192#endif
26193#else
26194 "ubfx lr, r6, #8, #8\n\t"
26195#endif
26196#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26197#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26198 "lsl r2, r7, #24\n\t"
26199 "lsr r2, r2, #24\n\t"
26200#else
26201 "uxtb r2, r7\n\t"
26202#endif
26203#else
26204 "ubfx r2, r7, #0, #8\n\t"
26205#endif
26206 "ldr r8, [r0, r8, lsl #2]\n\t"
26207 "ldr r11, [r0, r11, lsl #2]\n\t"
26208 "ldr lr, [r0, lr, lsl #2]\n\t"
26209 "ldr r2, [r0, r2, lsl #2]\n\t"
26210#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26211#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26212 "lsl r9, r6, #8\n\t"
26213 "lsr r9, r9, #24\n\t"
26214#else
26215 "uxtb r9, r6, ror #16\n\t"
26216#endif
26217#else
26218 "ubfx r9, r6, #16, #8\n\t"
26219#endif
26220 "eor r8, r8, r11, ror #24\n\t"
26221 "lsr r11, r5, #24\n\t"
26222 "eor r8, r8, lr, ror #8\n\t"
26223#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26224#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26225 "lsl lr, r7, #16\n\t"
26226 "lsr lr, lr, #24\n\t"
26227#else
26228 "uxtb lr, r7, ror #8\n\t"
26229#endif
26230#else
26231 "ubfx lr, r7, #8, #8\n\t"
26232#endif
26233 "eor r8, r8, r2, ror #16\n\t"
26234#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26235#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26236 "lsl r2, r4, #24\n\t"
26237 "lsr r2, r2, #24\n\t"
26238#else
26239 "uxtb r2, r4\n\t"
26240#endif
26241#else
26242 "ubfx r2, r4, #0, #8\n\t"
26243#endif
26244 "ldr r9, [r0, r9, lsl #2]\n\t"
26245 "ldr r11, [r0, r11, lsl #2]\n\t"
26246 "ldr lr, [r0, lr, lsl #2]\n\t"
26247 "ldr r2, [r0, r2, lsl #2]\n\t"
26248#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26249#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26250 "lsl r10, r7, #8\n\t"
26251 "lsr r10, r10, #24\n\t"
26252#else
26253 "uxtb r10, r7, ror #16\n\t"
26254#endif
26255#else
26256 "ubfx r10, r7, #16, #8\n\t"
26257#endif
26258 "eor r9, r9, r11, ror #24\n\t"
26259 "lsr r11, r6, #24\n\t"
26260 "eor r9, r9, lr, ror #8\n\t"
26261#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26262#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26263 "lsl lr, r4, #16\n\t"
26264 "lsr lr, lr, #24\n\t"
26265#else
26266 "uxtb lr, r4, ror #8\n\t"
26267#endif
26268#else
26269 "ubfx lr, r4, #8, #8\n\t"
26270#endif
26271 "eor r9, r9, r2, ror #16\n\t"
26272#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26273#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26274 "lsl r2, r5, #24\n\t"
26275 "lsr r2, r2, #24\n\t"
26276#else
26277 "uxtb r2, r5\n\t"
26278#endif
26279#else
26280 "ubfx r2, r5, #0, #8\n\t"
26281#endif
26282 "ldr r10, [r0, r10, lsl #2]\n\t"
26283 "ldr r11, [r0, r11, lsl #2]\n\t"
26284 "ldr lr, [r0, lr, lsl #2]\n\t"
26285 "ldr r2, [r0, r2, lsl #2]\n\t"
26286#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26287#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26288 "lsl r6, r6, #24\n\t"
26289 "lsr r6, r6, #24\n\t"
26290#else
26291 "uxtb r6, r6\n\t"
26292#endif
26293#else
26294 "ubfx r6, r6, #0, #8\n\t"
26295#endif
26296 "eor r10, r10, r11, ror #24\n\t"
26297#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26298#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26299 "lsl r11, r4, #8\n\t"
26300 "lsr r11, r11, #24\n\t"
26301#else
26302 "uxtb r11, r4, ror #16\n\t"
26303#endif
26304#else
26305 "ubfx r11, r4, #16, #8\n\t"
26306#endif
26307 "eor r10, r10, lr, ror #8\n\t"
26308 "lsr lr, r7, #24\n\t"
26309 "eor r10, r10, r2, ror #16\n\t"
26310#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26311#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26312 "lsl r2, r5, #16\n\t"
26313 "lsr r2, r2, #24\n\t"
26314#else
26315 "uxtb r2, r5, ror #8\n\t"
26316#endif
26317#else
26318 "ubfx r2, r5, #8, #8\n\t"
26319#endif
26320 "ldr r6, [r0, r6, lsl #2]\n\t"
26321 "ldr lr, [r0, lr, lsl #2]\n\t"
26322 "ldr r11, [r0, r11, lsl #2]\n\t"
26323 "ldr r2, [r0, r2, lsl #2]\n\t"
26324 "eor lr, lr, r6, ror #24\n\t"
26325 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
26326 "eor r11, r11, lr, ror #24\n\t"
26327 "eor r11, r11, r2, ror #8\n\t"
26328 /* XOR in Key Schedule */
26329 "eor r8, r8, r4\n\t"
26330 "eor r9, r9, r5\n\t"
26331 "eor r10, r10, r6\n\t"
26332 "eor r11, r11, r7\n\t"
26333#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26334#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26335 "lsl r4, r9, #8\n\t"
26336 "lsr r4, r4, #24\n\t"
26337#else
26338 "uxtb r4, r9, ror #16\n\t"
26339#endif
26340#else
26341 "ubfx r4, r9, #16, #8\n\t"
26342#endif
26343 "lsr r7, r8, #24\n\t"
26344#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26345#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26346 "lsl lr, r10, #16\n\t"
26347 "lsr lr, lr, #24\n\t"
26348#else
26349 "uxtb lr, r10, ror #8\n\t"
26350#endif
26351#else
26352 "ubfx lr, r10, #8, #8\n\t"
26353#endif
26354#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26355#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26356 "lsl r2, r11, #24\n\t"
26357 "lsr r2, r2, #24\n\t"
26358#else
26359 "uxtb r2, r11\n\t"
26360#endif
26361#else
26362 "ubfx r2, r11, #0, #8\n\t"
26363#endif
26364 "ldr r4, [r0, r4, lsl #2]\n\t"
26365 "ldr r7, [r0, r7, lsl #2]\n\t"
26366 "ldr lr, [r0, lr, lsl #2]\n\t"
26367 "ldr r2, [r0, r2, lsl #2]\n\t"
26368#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26369#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26370 "lsl r5, r10, #8\n\t"
26371 "lsr r5, r5, #24\n\t"
26372#else
26373 "uxtb r5, r10, ror #16\n\t"
26374#endif
26375#else
26376 "ubfx r5, r10, #16, #8\n\t"
26377#endif
26378 "eor r4, r4, r7, ror #24\n\t"
26379 "lsr r7, r9, #24\n\t"
26380 "eor r4, r4, lr, ror #8\n\t"
26381#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26382#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26383 "lsl lr, r11, #16\n\t"
26384 "lsr lr, lr, #24\n\t"
26385#else
26386 "uxtb lr, r11, ror #8\n\t"
26387#endif
26388#else
26389 "ubfx lr, r11, #8, #8\n\t"
26390#endif
26391 "eor r4, r4, r2, ror #16\n\t"
26392#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26393#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26394 "lsl r2, r8, #24\n\t"
26395 "lsr r2, r2, #24\n\t"
26396#else
26397 "uxtb r2, r8\n\t"
26398#endif
26399#else
26400 "ubfx r2, r8, #0, #8\n\t"
26401#endif
26402 "ldr r5, [r0, r5, lsl #2]\n\t"
26403 "ldr r7, [r0, r7, lsl #2]\n\t"
26404 "ldr lr, [r0, lr, lsl #2]\n\t"
26405 "ldr r2, [r0, r2, lsl #2]\n\t"
26406#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26407#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26408 "lsl r6, r11, #8\n\t"
26409 "lsr r6, r6, #24\n\t"
26410#else
26411 "uxtb r6, r11, ror #16\n\t"
26412#endif
26413#else
26414 "ubfx r6, r11, #16, #8\n\t"
26415#endif
26416 "eor r5, r5, r7, ror #24\n\t"
26417 "lsr r7, r10, #24\n\t"
26418 "eor r5, r5, lr, ror #8\n\t"
26419#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26420#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26421 "lsl lr, r8, #16\n\t"
26422 "lsr lr, lr, #24\n\t"
26423#else
26424 "uxtb lr, r8, ror #8\n\t"
26425#endif
26426#else
26427 "ubfx lr, r8, #8, #8\n\t"
26428#endif
26429 "eor r5, r5, r2, ror #16\n\t"
26430#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26431#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26432 "lsl r2, r9, #24\n\t"
26433 "lsr r2, r2, #24\n\t"
26434#else
26435 "uxtb r2, r9\n\t"
26436#endif
26437#else
26438 "ubfx r2, r9, #0, #8\n\t"
26439#endif
26440 "ldr r6, [r0, r6, lsl #2]\n\t"
26441 "ldr r7, [r0, r7, lsl #2]\n\t"
26442 "ldr lr, [r0, lr, lsl #2]\n\t"
26443 "ldr r2, [r0, r2, lsl #2]\n\t"
26444#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26445#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26446 "lsl r10, r10, #24\n\t"
26447 "lsr r10, r10, #24\n\t"
26448#else
26449 "uxtb r10, r10\n\t"
26450#endif
26451#else
26452 "ubfx r10, r10, #0, #8\n\t"
26453#endif
26454 "eor r6, r6, r7, ror #24\n\t"
26455#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26456#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26457 "lsl r7, r8, #8\n\t"
26458 "lsr r7, r7, #24\n\t"
26459#else
26460 "uxtb r7, r8, ror #16\n\t"
26461#endif
26462#else
26463 "ubfx r7, r8, #16, #8\n\t"
26464#endif
26465 "eor r6, r6, lr, ror #8\n\t"
26466 "lsr lr, r11, #24\n\t"
26467 "eor r6, r6, r2, ror #16\n\t"
26468#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26469#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26470 "lsl r2, r9, #16\n\t"
26471 "lsr r2, r2, #24\n\t"
26472#else
26473 "uxtb r2, r9, ror #8\n\t"
26474#endif
26475#else
26476 "ubfx r2, r9, #8, #8\n\t"
26477#endif
26478 "ldr r10, [r0, r10, lsl #2]\n\t"
26479 "ldr lr, [r0, lr, lsl #2]\n\t"
26480 "ldr r7, [r0, r7, lsl #2]\n\t"
26481 "ldr r2, [r0, r2, lsl #2]\n\t"
26482 "eor lr, lr, r10, ror #24\n\t"
26483 "ldm %[ks]!, {r8, r9, r10, r11}\n\t"
26484 "eor r7, r7, lr, ror #24\n\t"
26485 "eor r7, r7, r2, ror #8\n\t"
26486 /* XOR in Key Schedule */
26487 "eor r4, r4, r8\n\t"
26488 "eor r5, r5, r9\n\t"
26489 "eor r6, r6, r10\n\t"
26490 "eor r7, r7, r11\n\t"
26491 "subs r1, r1, #1\n\t"
26492 "bne L_AES_GCM_encrypt_block_nr_128_%=\n\t"
26493#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26494#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26495 "lsl r8, r5, #8\n\t"
26496 "lsr r8, r8, #24\n\t"
26497#else
26498 "uxtb r8, r5, ror #16\n\t"
26499#endif
26500#else
26501 "ubfx r8, r5, #16, #8\n\t"
26502#endif
26503 "lsr r11, r4, #24\n\t"
26504#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26505#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26506 "lsl lr, r6, #16\n\t"
26507 "lsr lr, lr, #24\n\t"
26508#else
26509 "uxtb lr, r6, ror #8\n\t"
26510#endif
26511#else
26512 "ubfx lr, r6, #8, #8\n\t"
26513#endif
26514#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26515#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26516 "lsl r2, r7, #24\n\t"
26517 "lsr r2, r2, #24\n\t"
26518#else
26519 "uxtb r2, r7\n\t"
26520#endif
26521#else
26522 "ubfx r2, r7, #0, #8\n\t"
26523#endif
26524 "ldr r8, [r0, r8, lsl #2]\n\t"
26525 "ldr r11, [r0, r11, lsl #2]\n\t"
26526 "ldr lr, [r0, lr, lsl #2]\n\t"
26527 "ldr r2, [r0, r2, lsl #2]\n\t"
26528#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26529#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26530 "lsl r9, r6, #8\n\t"
26531 "lsr r9, r9, #24\n\t"
26532#else
26533 "uxtb r9, r6, ror #16\n\t"
26534#endif
26535#else
26536 "ubfx r9, r6, #16, #8\n\t"
26537#endif
26538 "eor r8, r8, r11, ror #24\n\t"
26539 "lsr r11, r5, #24\n\t"
26540 "eor r8, r8, lr, ror #8\n\t"
26541#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26542#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26543 "lsl lr, r7, #16\n\t"
26544 "lsr lr, lr, #24\n\t"
26545#else
26546 "uxtb lr, r7, ror #8\n\t"
26547#endif
26548#else
26549 "ubfx lr, r7, #8, #8\n\t"
26550#endif
26551 "eor r8, r8, r2, ror #16\n\t"
26552#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26553#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26554 "lsl r2, r4, #24\n\t"
26555 "lsr r2, r2, #24\n\t"
26556#else
26557 "uxtb r2, r4\n\t"
26558#endif
26559#else
26560 "ubfx r2, r4, #0, #8\n\t"
26561#endif
26562 "ldr r9, [r0, r9, lsl #2]\n\t"
26563 "ldr r11, [r0, r11, lsl #2]\n\t"
26564 "ldr lr, [r0, lr, lsl #2]\n\t"
26565 "ldr r2, [r0, r2, lsl #2]\n\t"
26566#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26567#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26568 "lsl r10, r7, #8\n\t"
26569 "lsr r10, r10, #24\n\t"
26570#else
26571 "uxtb r10, r7, ror #16\n\t"
26572#endif
26573#else
26574 "ubfx r10, r7, #16, #8\n\t"
26575#endif
26576 "eor r9, r9, r11, ror #24\n\t"
26577 "lsr r11, r6, #24\n\t"
26578 "eor r9, r9, lr, ror #8\n\t"
26579#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26580#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26581 "lsl lr, r4, #16\n\t"
26582 "lsr lr, lr, #24\n\t"
26583#else
26584 "uxtb lr, r4, ror #8\n\t"
26585#endif
26586#else
26587 "ubfx lr, r4, #8, #8\n\t"
26588#endif
26589 "eor r9, r9, r2, ror #16\n\t"
26590#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26591#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26592 "lsl r2, r5, #24\n\t"
26593 "lsr r2, r2, #24\n\t"
26594#else
26595 "uxtb r2, r5\n\t"
26596#endif
26597#else
26598 "ubfx r2, r5, #0, #8\n\t"
26599#endif
26600 "ldr r10, [r0, r10, lsl #2]\n\t"
26601 "ldr r11, [r0, r11, lsl #2]\n\t"
26602 "ldr lr, [r0, lr, lsl #2]\n\t"
26603 "ldr r2, [r0, r2, lsl #2]\n\t"
26604#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26605#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26606 "lsl r6, r6, #24\n\t"
26607 "lsr r6, r6, #24\n\t"
26608#else
26609 "uxtb r6, r6\n\t"
26610#endif
26611#else
26612 "ubfx r6, r6, #0, #8\n\t"
26613#endif
26614 "eor r10, r10, r11, ror #24\n\t"
26615#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26616#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26617 "lsl r11, r4, #8\n\t"
26618 "lsr r11, r11, #24\n\t"
26619#else
26620 "uxtb r11, r4, ror #16\n\t"
26621#endif
26622#else
26623 "ubfx r11, r4, #16, #8\n\t"
26624#endif
26625 "eor r10, r10, lr, ror #8\n\t"
26626 "lsr lr, r7, #24\n\t"
26627 "eor r10, r10, r2, ror #16\n\t"
26628#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26629#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26630 "lsl r2, r5, #16\n\t"
26631 "lsr r2, r2, #24\n\t"
26632#else
26633 "uxtb r2, r5, ror #8\n\t"
26634#endif
26635#else
26636 "ubfx r2, r5, #8, #8\n\t"
26637#endif
26638 "ldr r6, [r0, r6, lsl #2]\n\t"
26639 "ldr lr, [r0, lr, lsl #2]\n\t"
26640 "ldr r11, [r0, r11, lsl #2]\n\t"
26641 "ldr r2, [r0, r2, lsl #2]\n\t"
26642 "eor lr, lr, r6, ror #24\n\t"
26643 "ldm %[ks]!, {r4, r5, r6, r7}\n\t"
26644 "eor r11, r11, lr, ror #24\n\t"
26645 "eor r11, r11, r2, ror #8\n\t"
26646 /* XOR in Key Schedule */
26647 "eor r8, r8, r4\n\t"
26648 "eor r9, r9, r5\n\t"
26649 "eor r10, r10, r6\n\t"
26650 "eor r11, r11, r7\n\t"
26651#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26652#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26653 "lsl r4, r11, #24\n\t"
26654 "lsr r4, r4, #24\n\t"
26655#else
26656 "uxtb r4, r11\n\t"
26657#endif
26658#else
26659 "ubfx r4, r11, #0, #8\n\t"
26660#endif
26661#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26662#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26663 "lsl r7, r10, #16\n\t"
26664 "lsr r7, r7, #24\n\t"
26665#else
26666 "uxtb r7, r10, ror #8\n\t"
26667#endif
26668#else
26669 "ubfx r7, r10, #8, #8\n\t"
26670#endif
26671#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26672#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26673 "lsl lr, r9, #8\n\t"
26674 "lsr lr, lr, #24\n\t"
26675#else
26676 "uxtb lr, r9, ror #16\n\t"
26677#endif
26678#else
26679 "ubfx lr, r9, #16, #8\n\t"
26680#endif
26681 "lsr r2, r8, #24\n\t"
26682 "ldrb r4, [r0, r4, lsl #2]\n\t"
26683 "ldrb r7, [r0, r7, lsl #2]\n\t"
26684 "ldrb lr, [r0, lr, lsl #2]\n\t"
26685 "ldrb r2, [r0, r2, lsl #2]\n\t"
26686#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26687#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26688 "lsl r5, r8, #24\n\t"
26689 "lsr r5, r5, #24\n\t"
26690#else
26691 "uxtb r5, r8\n\t"
26692#endif
26693#else
26694 "ubfx r5, r8, #0, #8\n\t"
26695#endif
26696 "eor r4, r4, r7, lsl #8\n\t"
26697#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26698#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26699 "lsl r7, r11, #16\n\t"
26700 "lsr r7, r7, #24\n\t"
26701#else
26702 "uxtb r7, r11, ror #8\n\t"
26703#endif
26704#else
26705 "ubfx r7, r11, #8, #8\n\t"
26706#endif
26707 "eor r4, r4, lr, lsl #16\n\t"
26708#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26709#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26710 "lsl lr, r10, #8\n\t"
26711 "lsr lr, lr, #24\n\t"
26712#else
26713 "uxtb lr, r10, ror #16\n\t"
26714#endif
26715#else
26716 "ubfx lr, r10, #16, #8\n\t"
26717#endif
26718 "eor r4, r4, r2, lsl #24\n\t"
26719 "lsr r2, r9, #24\n\t"
26720 "ldrb r5, [r0, r5, lsl #2]\n\t"
26721 "ldrb r7, [r0, r7, lsl #2]\n\t"
26722 "ldrb lr, [r0, lr, lsl #2]\n\t"
26723 "ldrb r2, [r0, r2, lsl #2]\n\t"
26724#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26725#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26726 "lsl r6, r9, #24\n\t"
26727 "lsr r6, r6, #24\n\t"
26728#else
26729 "uxtb r6, r9\n\t"
26730#endif
26731#else
26732 "ubfx r6, r9, #0, #8\n\t"
26733#endif
26734 "eor r5, r5, r7, lsl #8\n\t"
26735#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26736#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26737 "lsl r7, r8, #16\n\t"
26738 "lsr r7, r7, #24\n\t"
26739#else
26740 "uxtb r7, r8, ror #8\n\t"
26741#endif
26742#else
26743 "ubfx r7, r8, #8, #8\n\t"
26744#endif
26745 "eor r5, r5, lr, lsl #16\n\t"
26746#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26747#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26748 "lsl lr, r11, #8\n\t"
26749 "lsr lr, lr, #24\n\t"
26750#else
26751 "uxtb lr, r11, ror #16\n\t"
26752#endif
26753#else
26754 "ubfx lr, r11, #16, #8\n\t"
26755#endif
26756 "eor r5, r5, r2, lsl #24\n\t"
26757 "lsr r2, r10, #24\n\t"
26758 "ldrb r6, [r0, r6, lsl #2]\n\t"
26759 "ldrb r7, [r0, r7, lsl #2]\n\t"
26760 "ldrb lr, [r0, lr, lsl #2]\n\t"
26761 "ldrb r2, [r0, r2, lsl #2]\n\t"
26762 "lsr r11, r11, #24\n\t"
26763 "eor r6, r6, r7, lsl #8\n\t"
26764#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26765#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26766 "lsl r7, r10, #24\n\t"
26767 "lsr r7, r7, #24\n\t"
26768#else
26769 "uxtb r7, r10\n\t"
26770#endif
26771#else
26772 "ubfx r7, r10, #0, #8\n\t"
26773#endif
26774 "eor r6, r6, lr, lsl #16\n\t"
26775#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26776#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26777 "lsl lr, r9, #16\n\t"
26778 "lsr lr, lr, #24\n\t"
26779#else
26780 "uxtb lr, r9, ror #8\n\t"
26781#endif
26782#else
26783 "ubfx lr, r9, #8, #8\n\t"
26784#endif
26785 "eor r6, r6, r2, lsl #24\n\t"
26786#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
26787#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26788 "lsl r2, r8, #8\n\t"
26789 "lsr r2, r2, #24\n\t"
26790#else
26791 "uxtb r2, r8, ror #16\n\t"
26792#endif
26793#else
26794 "ubfx r2, r8, #16, #8\n\t"
26795#endif
26796 "ldrb r11, [r0, r11, lsl #2]\n\t"
26797 "ldrb r7, [r0, r7, lsl #2]\n\t"
26798 "ldrb lr, [r0, lr, lsl #2]\n\t"
26799 "ldrb r2, [r0, r2, lsl #2]\n\t"
26800 "eor lr, lr, r11, lsl #16\n\t"
26801 "ldm %[ks], {r8, r9, r10, r11}\n\t"
26802 "eor r7, r7, lr, lsl #8\n\t"
26803 "eor r7, r7, r2, lsl #16\n\t"
26804 /* XOR in Key Schedule */
26805 "eor r4, r4, r8\n\t"
26806 "eor r5, r5, r9\n\t"
26807 "eor r6, r6, r10\n\t"
26808 "eor r7, r7, r11\n\t"
26809#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
26810 "pop {r1, %[len], lr}\n\t"
26811 "ldr %[ks], [sp]\n\t"
26812#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26813 "eor r8, r4, r4, ror #16\n\t"
26814 "eor r9, r5, r5, ror #16\n\t"
26815 "eor r10, r6, r6, ror #16\n\t"
26816 "eor r11, r7, r7, ror #16\n\t"
26817 "bic r8, r8, #0xff0000\n\t"
26818 "bic r9, r9, #0xff0000\n\t"
26819 "bic r10, r10, #0xff0000\n\t"
26820 "bic r11, r11, #0xff0000\n\t"
26821 "ror r4, r4, #8\n\t"
26822 "ror r5, r5, #8\n\t"
26823 "ror r6, r6, #8\n\t"
26824 "ror r7, r7, #8\n\t"
26825 "eor r4, r4, r8, lsr #8\n\t"
26826 "eor r5, r5, r9, lsr #8\n\t"
26827 "eor r6, r6, r10, lsr #8\n\t"
26828 "eor r7, r7, r11, lsr #8\n\t"
26829#else
26830 "rev r4, r4\n\t"
26831 "rev r5, r5\n\t"
26832 "rev r6, r6\n\t"
26833 "rev r7, r7\n\t"
26834#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
26835 "ldr r8, [lr]\n\t"
26836 "ldr r9, [lr, #4]\n\t"
26837 "ldr r10, [lr, #8]\n\t"
26838 "ldr r11, [lr, #12]\n\t"
26839 "eor r4, r4, r8\n\t"
26840 "eor r5, r5, r9\n\t"
26841 "eor r6, r6, r10\n\t"
26842 "eor r7, r7, r11\n\t"
26843 "ldr r8, [sp, #4]\n\t"
26844 "str r4, [%[out]]\n\t"
26845 "str r5, [%[out], #4]\n\t"
26846 "str r6, [%[out], #8]\n\t"
26847 "str r7, [%[out], #12]\n\t"
26848 "ldm r8, {r4, r5, r6, r7}\n\t"
26849 "subs %[len], %[len], #16\n\t"
26850 "add lr, lr, #16\n\t"
26851 "add %[out], %[out], #16\n\t"
26852 "bne L_AES_GCM_encrypt_loop_block_128_%=\n\t"
26853 "\n"
26854 "L_AES_GCM_encrypt_end_%=:\n\t"
26855 "pop {%[ks], r8}\n\t"
26856#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
26857 "eor r10, r4, r4, ror #16\n\t"
26858 "eor r11, r5, r5, ror #16\n\t"
26859 "bic r10, r10, #0xff0000\n\t"
26860 "bic r11, r11, #0xff0000\n\t"
26861 "ror r4, r4, #8\n\t"
26862 "ror r5, r5, #8\n\t"
26863 "eor r4, r4, r10, lsr #8\n\t"
26864 "eor r5, r5, r11, lsr #8\n\t"
26865 "eor r10, r6, r6, ror #16\n\t"
26866 "eor r11, r7, r7, ror #16\n\t"
26867 "bic r10, r10, #0xff0000\n\t"
26868 "bic r11, r11, #0xff0000\n\t"
26869 "ror r6, r6, #8\n\t"
26870 "ror r7, r7, #8\n\t"
26871 "eor r6, r6, r10, lsr #8\n\t"
26872 "eor r7, r7, r11, lsr #8\n\t"
26873#else
26874 "rev r4, r4\n\t"
26875 "rev r5, r5\n\t"
26876 "rev r6, r6\n\t"
26877 "rev r7, r7\n\t"
26878#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
26879 "stm r8, {r4, r5, r6, r7}\n\t"
26880 "pop {%[nr], %[ctr]}\n\t"
26881 "pop {%[L_AES_ARM32_te_gcm]}\n\t"
26882#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
26883 : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
26884 [nr] "+r" (nr), [ctr] "+r" (ctr),
26885 [L_AES_ARM32_te_gcm] "+r" (L_AES_ARM32_te_gcm_c)
26886 :
26887#else
26888 :
26889 : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
26890 [nr] "r" (nr), [ctr] "r" (ctr),
26891 [L_AES_ARM32_te_gcm] "r" (L_AES_ARM32_te_gcm_c)
26892#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
26893 : "memory", "cc", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
26894 );
26895}
26896
26897#endif /* HAVE_AESGCM */
26898#endif /* !WOLFSSL_ARMASM_NO_HW_CRYPTO */
26899#endif /* !NO_AES */
26900#endif /* !__aarch64__ && !WOLFSSL_ARMASM_THUMB2 */
26901#endif /* WOLFSSL_ARMASM */
26902
26903#endif /* WOLFSSL_ARMASM_INLINE */