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
luajit/dynasm/dasm_x86.lua
raw
1------------------------------------------------------------------------------
2-- DynASM x86/x64 module.
3--
4-- Copyright (C) 2005-2026 Mike Pall. All rights reserved.
5-- See dynasm.lua for full copyright notice.
6------------------------------------------------------------------------------
7
8local x64 = x64
9
10-- Module information:
11local _info = {
12 arch = x64 and "x64" or "x86",
13 description = "DynASM x86/x64 module",
14 version = "1.5.0",
15 vernum = 10500,
16 release = "2021-05-02",
17 author = "Mike Pall",
18 license = "MIT",
19}
20
21-- Exported glue functions for the arch-specific module.
22local _M = { _info = _info }
23
24-- Cache library functions.
25local type, tonumber, pairs, ipairs = type, tonumber, pairs, ipairs
26local assert, unpack, setmetatable = assert, unpack or table.unpack, setmetatable
27local _s = string
28local sub, format, byte, char = _s.sub, _s.format, _s.byte, _s.char
29local find, match, gmatch, gsub = _s.find, _s.match, _s.gmatch, _s.gsub
30local concat, sort, remove = table.concat, table.sort, table.remove
31local bit = bit or require("bit")
32local band, bxor, shl, shr = bit.band, bit.bxor, bit.lshift, bit.rshift
33
34-- Inherited tables and callbacks.
35local g_opt, g_arch
36local wline, werror, wfatal, wwarn
37
38-- Action name list.
39-- CHECK: Keep this in sync with the C code!
40local action_names = {
41 -- int arg, 1 buffer pos:
42 "DISP", "IMM_S", "IMM_B", "IMM_W", "IMM_D", "IMM_WB", "IMM_DB",
43 -- action arg (1 byte), int arg, 1 buffer pos (reg/num):
44 "VREG", "SPACE",
45 -- ptrdiff_t arg, 1 buffer pos (address): !x64
46 "SETLABEL", "REL_A",
47 -- action arg (1 byte) or int arg, 2 buffer pos (link, offset):
48 "REL_LG", "REL_PC",
49 -- action arg (1 byte) or int arg, 1 buffer pos (link):
50 "IMM_LG", "IMM_PC",
51 -- action arg (1 byte) or int arg, 1 buffer pos (offset):
52 "LABEL_LG", "LABEL_PC",
53 -- action arg (1 byte), 1 buffer pos (offset):
54 "ALIGN",
55 -- action args (2 bytes), no buffer pos.
56 "EXTERN",
57 -- action arg (1 byte), no buffer pos.
58 "ESC",
59 -- no action arg, no buffer pos.
60 "MARK",
61 -- action arg (1 byte), no buffer pos, terminal action:
62 "SECTION",
63 -- no args, no buffer pos, terminal action:
64 "STOP"
65}
66
67-- Maximum number of section buffer positions for dasm_put().
68-- CHECK: Keep this in sync with the C code!
69local maxsecpos = 25 -- Keep this low, to avoid excessively long C lines.
70
71-- Action name -> action number (dynamically generated below).
72local map_action = {}
73-- First action number. Everything below does not need to be escaped.
74local actfirst = 256-#action_names
75
76-- Action list buffer and string (only used to remove dupes).
77local actlist = {}
78local actstr = ""
79
80-- Argument list for next dasm_put(). Start with offset 0 into action list.
81local actargs = { 0 }
82
83-- Current number of section buffer positions for dasm_put().
84local secpos = 1
85
86-- VREG kind encodings, pre-shifted by 5 bits.
87local map_vreg = {
88 ["modrm.rm.m"] = 0x00,
89 ["modrm.rm.r"] = 0x20,
90 ["opcode"] = 0x20,
91 ["sib.base"] = 0x20,
92 ["sib.index"] = 0x40,
93 ["modrm.reg"] = 0x80,
94 ["vex.v"] = 0xa0,
95 ["imm.hi"] = 0xc0,
96}
97
98-- Current number of VREG actions contributing to REX/VEX shrinkage.
99local vreg_shrink_count = 0
100
101------------------------------------------------------------------------------
102
103-- Compute action numbers for action names.
104for n,name in ipairs(action_names) do
105 local num = actfirst + n - 1
106 map_action[name] = num
107end
108
109-- Dump action names and numbers.
110local function dumpactions(out)
111 out:write("DynASM encoding engine action codes:\n")
112 for n,name in ipairs(action_names) do
113 local num = map_action[name]
114 out:write(format(" %-10s %02X %d\n", name, num, num))
115 end
116 out:write("\n")
117end
118
119-- Write action list buffer as a huge static C array.
120local function writeactions(out, name)
121 local nn = #actlist
122 local last = actlist[nn] or 255
123 actlist[nn] = nil -- Remove last byte.
124 if nn == 0 then nn = 1 end
125 out:write("static const unsigned char ", name, "[", nn, "] = {\n")
126 local s = " "
127 for n,b in ipairs(actlist) do
128 s = s..b..","
129 if #s >= 75 then
130 assert(out:write(s, "\n"))
131 s = " "
132 end
133 end
134 out:write(s, last, "\n};\n\n") -- Add last byte back.
135end
136
137------------------------------------------------------------------------------
138
139-- Add byte to action list.
140local function wputxb(n)
141 assert(n >= 0 and n <= 255 and n % 1 == 0, "byte out of range")
142 actlist[#actlist+1] = n
143end
144
145-- Add action to list with optional arg. Advance buffer pos, too.
146local function waction(action, a, num)
147 wputxb(assert(map_action[action], "bad action name `"..action.."'"))
148 if a then actargs[#actargs+1] = a end
149 if a or num then secpos = secpos + (num or 1) end
150end
151
152-- Optionally add a VREG action.
153local function wvreg(kind, vreg, psz, sk, defer)
154 if not vreg then return end
155 waction("VREG", vreg)
156 local b = assert(map_vreg[kind], "bad vreg kind `"..vreg.."'")
157 if b < (sk or 0) then
158 vreg_shrink_count = vreg_shrink_count + 1
159 end
160 if not defer then
161 b = b + vreg_shrink_count * 8
162 vreg_shrink_count = 0
163 end
164 wputxb(b + (psz or 0))
165end
166
167-- Add call to embedded DynASM C code.
168local function wcall(func, args)
169 wline(format("dasm_%s(Dst, %s);", func, concat(args, ", ")), true)
170end
171
172-- Delete duplicate action list chunks. A tad slow, but so what.
173local function dedupechunk(offset)
174 local al, as = actlist, actstr
175 local chunk = char(unpack(al, offset+1, #al))
176 local orig = find(as, chunk, 1, true)
177 if orig then
178 actargs[1] = orig-1 -- Replace with original offset.
179 for i=offset+1,#al do al[i] = nil end -- Kill dupe.
180 else
181 actstr = as..chunk
182 end
183end
184
185-- Flush action list (intervening C code or buffer pos overflow).
186local function wflush(term)
187 local offset = actargs[1]
188 if #actlist == offset then return end -- Nothing to flush.
189 if not term then waction("STOP") end -- Terminate action list.
190 dedupechunk(offset)
191 wcall("put", actargs) -- Add call to dasm_put().
192 actargs = { #actlist } -- Actionlist offset is 1st arg to next dasm_put().
193 secpos = 1 -- The actionlist offset occupies a buffer position, too.
194end
195
196-- Put escaped byte.
197local function wputb(n)
198 if n >= actfirst then waction("ESC") end -- Need to escape byte.
199 wputxb(n)
200end
201
202------------------------------------------------------------------------------
203
204-- Global label name -> global label number. With auto assignment on 1st use.
205local next_global = 10
206local map_global = setmetatable({}, { __index = function(t, name)
207 if not match(name, "^[%a_][%w_@]*$") then werror("bad global label") end
208 local n = next_global
209 if n > 246 then werror("too many global labels") end
210 next_global = n + 1
211 t[name] = n
212 return n
213end})
214
215-- Dump global labels.
216local function dumpglobals(out, lvl)
217 local t = {}
218 for name, n in pairs(map_global) do t[n] = name end
219 out:write("Global labels:\n")
220 for i=10,next_global-1 do
221 out:write(format(" %s\n", t[i]))
222 end
223 out:write("\n")
224end
225
226-- Write global label enum.
227local function writeglobals(out, prefix)
228 local t = {}
229 for name, n in pairs(map_global) do t[n] = name end
230 out:write("enum {\n")
231 for i=10,next_global-1 do
232 out:write(" ", prefix, gsub(t[i], "@.*", ""), ",\n")
233 end
234 out:write(" ", prefix, "_MAX\n};\n")
235end
236
237-- Write global label names.
238local function writeglobalnames(out, name)
239 local t = {}
240 for name, n in pairs(map_global) do t[n] = name end
241 out:write("static const char *const ", name, "[] = {\n")
242 for i=10,next_global-1 do
243 out:write(" \"", t[i], "\",\n")
244 end
245 out:write(" (const char *)0\n};\n")
246end
247
248------------------------------------------------------------------------------
249
250-- Extern label name -> extern label number. With auto assignment on 1st use.
251local next_extern = -1
252local map_extern = setmetatable({}, { __index = function(t, name)
253 -- No restrictions on the name for now.
254 local n = next_extern
255 if n < -256 then werror("too many extern labels") end
256 next_extern = n - 1
257 t[name] = n
258 return n
259end})
260
261-- Dump extern labels.
262local function dumpexterns(out, lvl)
263 local t = {}
264 for name, n in pairs(map_extern) do t[-n] = name end
265 out:write("Extern labels:\n")
266 for i=1,-next_extern-1 do
267 out:write(format(" %s\n", t[i]))
268 end
269 out:write("\n")
270end
271
272-- Write extern label names.
273local function writeexternnames(out, name)
274 local t = {}
275 for name, n in pairs(map_extern) do t[-n] = name end
276 out:write("static const char *const ", name, "[] = {\n")
277 for i=1,-next_extern-1 do
278 out:write(" \"", t[i], "\",\n")
279 end
280 out:write(" (const char *)0\n};\n")
281end
282
283------------------------------------------------------------------------------
284
285-- Arch-specific maps.
286local map_archdef = {} -- Ext. register name -> int. name.
287local map_reg_rev = {} -- Int. register name -> ext. name.
288local map_reg_num = {} -- Int. register name -> register number.
289local map_reg_opsize = {} -- Int. register name -> operand size.
290local map_reg_valid_base = {} -- Int. register name -> valid base register?
291local map_reg_valid_index = {} -- Int. register name -> valid index register?
292local map_reg_needrex = {} -- Int. register name -> need rex vs. no rex.
293local reg_list = {} -- Canonical list of int. register names.
294
295local map_type = {} -- Type name -> { ctype, reg }
296local ctypenum = 0 -- Type number (for _PTx macros).
297
298local addrsize = x64 and "q" or "d" -- Size for address operands.
299
300-- Helper functions to fill register maps.
301local function mkrmap(sz, cl, names)
302 local cname = format("@%s", sz)
303 reg_list[#reg_list+1] = cname
304 map_archdef[cl] = cname
305 map_reg_rev[cname] = cl
306 map_reg_num[cname] = -1
307 map_reg_opsize[cname] = sz
308 if sz == addrsize or sz == "d" then
309 map_reg_valid_base[cname] = true
310 map_reg_valid_index[cname] = true
311 end
312 if names then
313 for n,name in ipairs(names) do
314 local iname = format("@%s%x", sz, n-1)
315 reg_list[#reg_list+1] = iname
316 map_archdef[name] = iname
317 map_reg_rev[iname] = name
318 map_reg_num[iname] = n-1
319 map_reg_opsize[iname] = sz
320 if sz == "b" and n > 4 then map_reg_needrex[iname] = false end
321 if sz == addrsize or sz == "d" then
322 map_reg_valid_base[iname] = true
323 map_reg_valid_index[iname] = true
324 end
325 end
326 end
327 for i=0,(x64 and sz ~= "f") and 15 or 7 do
328 local needrex = sz == "b" and i > 3
329 local iname = format("@%s%x%s", sz, i, needrex and "R" or "")
330 if needrex then map_reg_needrex[iname] = true end
331 local name
332 if sz == "o" or sz == "y" then name = format("%s%d", cl, i)
333 elseif sz == "f" then name = format("st%d", i)
334 else name = format("r%d%s", i, sz == addrsize and "" or sz) end
335 map_archdef[name] = iname
336 if not map_reg_rev[iname] then
337 reg_list[#reg_list+1] = iname
338 map_reg_rev[iname] = name
339 map_reg_num[iname] = i
340 map_reg_opsize[iname] = sz
341 if sz == addrsize or sz == "d" then
342 map_reg_valid_base[iname] = true
343 map_reg_valid_index[iname] = true
344 end
345 end
346 end
347 reg_list[#reg_list+1] = ""
348end
349
350-- Integer registers (qword, dword, word and byte sized).
351if x64 then
352 mkrmap("q", "Rq", {"rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi"})
353end
354mkrmap("d", "Rd", {"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"})
355mkrmap("w", "Rw", {"ax", "cx", "dx", "bx", "sp", "bp", "si", "di"})
356mkrmap("b", "Rb", {"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"})
357map_reg_valid_index[map_archdef.esp] = false
358if x64 then map_reg_valid_index[map_archdef.rsp] = false end
359if x64 then map_reg_needrex[map_archdef.Rb] = true end
360map_archdef["Ra"] = "@"..addrsize
361
362-- FP registers (internally tword sized, but use "f" as operand size).
363mkrmap("f", "Rf")
364
365-- SSE registers (oword sized, but qword and dword accessible).
366mkrmap("o", "xmm")
367
368-- AVX registers (yword sized, but oword, qword and dword accessible).
369mkrmap("y", "ymm")
370
371-- Operand size prefixes to codes.
372local map_opsize = {
373 byte = "b", word = "w", dword = "d", qword = "q", oword = "o", yword = "y",
374 tword = "t", aword = addrsize,
375}
376
377-- Operand size code to number.
378local map_opsizenum = {
379 b = 1, w = 2, d = 4, q = 8, o = 16, y = 32, t = 10,
380}
381
382-- Operand size code to name.
383local map_opsizename = {
384 b = "byte", w = "word", d = "dword", q = "qword", o = "oword", y = "yword",
385 t = "tword", f = "fpword",
386}
387
388-- Valid index register scale factors.
389local map_xsc = {
390 ["1"] = 0, ["2"] = 1, ["4"] = 2, ["8"] = 3,
391}
392
393-- Condition codes.
394local map_cc = {
395 o = 0, no = 1, b = 2, nb = 3, e = 4, ne = 5, be = 6, nbe = 7,
396 s = 8, ns = 9, p = 10, np = 11, l = 12, nl = 13, le = 14, nle = 15,
397 c = 2, nae = 2, nc = 3, ae = 3, z = 4, nz = 5, na = 6, a = 7,
398 pe = 10, po = 11, nge = 12, ge = 13, ng = 14, g = 15,
399}
400
401
402-- Reverse defines for registers.
403function _M.revdef(s)
404 return gsub(s, "@%w+", map_reg_rev)
405end
406
407-- Dump register names and numbers
408local function dumpregs(out)
409 out:write("Register names, sizes and internal numbers:\n")
410 for _,reg in ipairs(reg_list) do
411 if reg == "" then
412 out:write("\n")
413 else
414 local name = map_reg_rev[reg]
415 local num = map_reg_num[reg]
416 local opsize = map_opsizename[map_reg_opsize[reg]]
417 out:write(format(" %-5s %-8s %s\n", name, opsize,
418 num < 0 and "(variable)" or num))
419 end
420 end
421end
422
423------------------------------------------------------------------------------
424
425-- Put action for label arg (IMM_LG, IMM_PC, REL_LG, REL_PC).
426local function wputlabel(aprefix, imm, num)
427 if type(imm) == "number" then
428 if imm < 0 then
429 waction("EXTERN")
430 wputxb(aprefix == "IMM_" and 0 or 1)
431 imm = -imm-1
432 else
433 waction(aprefix.."LG", nil, num);
434 end
435 wputxb(imm)
436 else
437 waction(aprefix.."PC", imm, num)
438 end
439end
440
441-- Put signed byte or arg.
442local function wputsbarg(n)
443 if type(n) == "number" then
444 if n < -128 or n > 127 then
445 werror("signed immediate byte out of range")
446 end
447 if n < 0 then n = n + 256 end
448 wputb(n)
449 else waction("IMM_S", n) end
450end
451
452-- Put unsigned byte or arg.
453local function wputbarg(n)
454 if type(n) == "number" then
455 if n < 0 or n > 255 then
456 werror("unsigned immediate byte out of range")
457 end
458 wputb(n)
459 else waction("IMM_B", n) end
460end
461
462-- Put unsigned word or arg.
463local function wputwarg(n)
464 if type(n) == "number" then
465 if shr(n, 16) ~= 0 then
466 werror("unsigned immediate word out of range")
467 end
468 wputb(band(n, 255)); wputb(shr(n, 8));
469 else waction("IMM_W", n) end
470end
471
472-- Put signed or unsigned dword or arg.
473local function wputdarg(n)
474 local tn = type(n)
475 if tn == "number" then
476 wputb(band(n, 255))
477 wputb(band(shr(n, 8), 255))
478 wputb(band(shr(n, 16), 255))
479 wputb(shr(n, 24))
480 elseif tn == "table" then
481 wputlabel("IMM_", n[1], 1)
482 else
483 waction("IMM_D", n)
484 end
485end
486
487-- Put signed or unsigned qword or arg.
488local function wputqarg(n)
489 local tn = type(n)
490 if tn == "number" then -- This is only used for numbers from -2^31..2^32-1.
491 wputb(band(n, 255))
492 wputb(band(shr(n, 8), 255))
493 wputb(band(shr(n, 16), 255))
494 wputb(shr(n, 24))
495 local sign = n < 0 and 255 or 0
496 wputb(sign); wputb(sign); wputb(sign); wputb(sign)
497 else
498 waction("IMM_D", format("(unsigned int)(%s)", n))
499 waction("IMM_D", format("(unsigned int)((unsigned long long)(%s)>>32)", n))
500 end
501end
502
503-- Put operand-size dependent number or arg (defaults to dword).
504local function wputszarg(sz, n)
505 if not sz or sz == "d" or sz == "q" then wputdarg(n)
506 elseif sz == "w" then wputwarg(n)
507 elseif sz == "b" then wputbarg(n)
508 elseif sz == "s" then wputsbarg(n)
509 else werror("bad operand size") end
510end
511
512-- Put multi-byte opcode with operand-size dependent modifications.
513local function wputop(sz, op, rex, vex, vregr, vregxb)
514 local psz, sk = 0, nil
515 if vex then
516 local tail
517 if vex.m == 1 and band(rex, 11) == 0 then
518 if x64 and vregxb then
519 sk = map_vreg["modrm.reg"]
520 else
521 wputb(0xc5)
522 tail = shl(bxor(band(rex, 4), 4), 5)
523 psz = 3
524 end
525 end
526 if not tail then
527 wputb(0xc4)
528 wputb(shl(bxor(band(rex, 7), 7), 5) + vex.m)
529 tail = shl(band(rex, 8), 4)
530 psz = 4
531 end
532 local reg, vreg = 0, nil
533 if vex.v then
534 reg = vex.v.reg
535 if not reg then werror("bad vex operand") end
536 if reg < 0 then reg = 0; vreg = vex.v.vreg end
537 end
538 if sz == "y" or vex.l then tail = tail + 4 end
539 wputb(tail + shl(bxor(reg, 15), 3) + vex.p)
540 wvreg("vex.v", vreg)
541 rex = 0
542 if op >= 256 then werror("bad vex opcode") end
543 else
544 if rex ~= 0 then
545 if not x64 then werror("bad operand size") end
546 elseif (vregr or vregxb) and x64 then
547 rex = 0x10
548 sk = map_vreg["vex.v"]
549 end
550 end
551 local r
552 if sz == "w" then wputb(102) end
553 -- Needs >32 bit numbers, but only for crc32 eax, word [ebx]
554 if op >= 4294967296 then r = op%4294967296 wputb((op-r)/4294967296) op = r end
555 if op >= 16777216 then wputb(shr(op, 24)); op = band(op, 0xffffff) end
556 if op >= 65536 then
557 if rex ~= 0 then
558 local opc3 = band(op, 0xffff00)
559 if opc3 == 0x0f3a00 or opc3 == 0x0f3800 then
560 wputb(64 + band(rex, 15)); rex = 0; psz = 2
561 end
562 end
563 wputb(shr(op, 16)); op = band(op, 0xffff); psz = psz + 1
564 end
565 if op >= 256 then
566 local b = shr(op, 8)
567 if b == 15 and rex ~= 0 then wputb(64 + band(rex, 15)); rex = 0; psz = 2 end
568 wputb(b); op = band(op, 255); psz = psz + 1
569 end
570 if rex ~= 0 then wputb(64 + band(rex, 15)); psz = 2 end
571 if sz == "b" then op = op - 1 end
572 wputb(op)
573 return psz, sk
574end
575
576-- Put ModRM or SIB formatted byte.
577local function wputmodrm(m, s, rm, vs, vrm)
578 assert(m < 4 and s < 16 and rm < 16, "bad modrm operands")
579 wputb(shl(m, 6) + shl(band(s, 7), 3) + band(rm, 7))
580end
581
582-- Put ModRM/SIB plus optional displacement.
583local function wputmrmsib(t, imark, s, vsreg, psz, sk)
584 local vreg, vxreg
585 local reg, xreg = t.reg, t.xreg
586 if reg and reg < 0 then reg = 0; vreg = t.vreg end
587 if xreg and xreg < 0 then xreg = 0; vxreg = t.vxreg end
588 if s < 0 then s = 0 end
589
590 -- Register mode.
591 if sub(t.mode, 1, 1) == "r" then
592 wputmodrm(3, s, reg)
593 wvreg("modrm.reg", vsreg, psz+1, sk, vreg)
594 wvreg("modrm.rm.r", vreg, psz+1, sk)
595 return
596 end
597
598 local disp = t.disp
599 local tdisp = type(disp)
600 -- No base register?
601 if not reg then
602 local riprel = false
603 if xreg then
604 -- Indexed mode with index register only.
605 -- [xreg*xsc+disp] -> (0, s, esp) (xsc, xreg, ebp)
606 wputmodrm(0, s, 4)
607 if imark == "I" then waction("MARK") end
608 wvreg("modrm.reg", vsreg, psz+1, sk, vxreg)
609 wputmodrm(t.xsc, xreg, 5)
610 wvreg("sib.index", vxreg, psz+2, sk)
611 else
612 -- Pure 32 bit displacement.
613 if x64 and tdisp ~= "table" then
614 wputmodrm(0, s, 4) -- [disp] -> (0, s, esp) (0, esp, ebp)
615 wvreg("modrm.reg", vsreg, psz+1, sk)
616 if imark == "I" then waction("MARK") end
617 wputmodrm(0, 4, 5)
618 else
619 riprel = x64
620 wputmodrm(0, s, 5) -- [disp|rip-label] -> (0, s, ebp)
621 wvreg("modrm.reg", vsreg, psz+1, sk)
622 if imark == "I" then waction("MARK") end
623 end
624 end
625 if riprel then -- Emit rip-relative displacement.
626 if match("UWSiI", imark) then
627 werror("NYI: rip-relative displacement followed by immediate")
628 end
629 -- The previous byte in the action buffer cannot be 0xe9 or 0x80-0x8f.
630 if disp[2] == "iPJ" then
631 waction("REL_A", disp[1])
632 else
633 wputlabel("REL_", disp[1], 2)
634 end
635 else
636 wputdarg(disp)
637 end
638 return
639 end
640
641 local m
642 if tdisp == "number" then -- Check displacement size at assembly time.
643 if disp == 0 and band(reg, 7) ~= 5 then -- [ebp] -> [ebp+0] (in SIB, too)
644 if not vreg then m = 0 end -- Force DISP to allow [Rd(5)] -> [ebp+0]
645 elseif disp >= -128 and disp <= 127 then m = 1
646 else m = 2 end
647 elseif tdisp == "table" then
648 m = 2
649 end
650
651 -- Index register present or esp as base register: need SIB encoding.
652 if xreg or band(reg, 7) == 4 then
653 wputmodrm(m or 2, s, 4) -- ModRM.
654 if m == nil or imark == "I" then waction("MARK") end
655 wvreg("modrm.reg", vsreg, psz+1, sk, vxreg or vreg)
656 wputmodrm(t.xsc or 0, xreg or 4, reg) -- SIB.
657 wvreg("sib.index", vxreg, psz+2, sk, vreg)
658 wvreg("sib.base", vreg, psz+2, sk)
659 else
660 wputmodrm(m or 2, s, reg) -- ModRM.
661 if (imark == "I" and (m == 1 or m == 2)) or
662 (m == nil and (vsreg or vreg)) then waction("MARK") end
663 wvreg("modrm.reg", vsreg, psz+1, sk, vreg)
664 wvreg("modrm.rm.m", vreg, psz+1, sk)
665 end
666
667 -- Put displacement.
668 if m == 1 then wputsbarg(disp)
669 elseif m == 2 then wputdarg(disp)
670 elseif m == nil then waction("DISP", disp) end
671end
672
673------------------------------------------------------------------------------
674
675-- Return human-readable operand mode string.
676local function opmodestr(op, args)
677 local m = {}
678 for i=1,#args do
679 local a = args[i]
680 m[#m+1] = sub(a.mode, 1, 1)..(a.opsize or "?")
681 end
682 return op.." "..concat(m, ",")
683end
684
685-- Convert number to valid integer or nil.
686local function toint(expr, isqword)
687 local n = tonumber(expr)
688 if n then
689 if n % 1 ~= 0 then
690 werror("not an integer number `"..expr.."'")
691 elseif isqword then
692 if n < -2147483648 or n > 2147483647 then
693 n = nil -- Handle it as an expression to avoid precision loss.
694 end
695 elseif n < -2147483648 or n > 4294967295 then
696 werror("bad integer number `"..expr.."'")
697 end
698 return n
699 end
700end
701
702-- Parse immediate expression.
703local function immexpr(expr)
704 -- &expr (pointer)
705 if sub(expr, 1, 1) == "&" then
706 return "iPJ", format("(ptrdiff_t)(%s)", sub(expr,2))
707 end
708
709 local prefix = sub(expr, 1, 2)
710 -- =>expr (pc label reference)
711 if prefix == "=>" then
712 return "iJ", sub(expr, 3)
713 end
714 -- ->name (global label reference)
715 if prefix == "->" then
716 return "iJ", map_global[sub(expr, 3)]
717 end
718
719 -- [<>][1-9] (local label reference)
720 local dir, lnum = match(expr, "^([<>])([1-9])$")
721 if dir then -- Fwd: 247-255, Bkwd: 1-9.
722 return "iJ", lnum + (dir == ">" and 246 or 0)
723 end
724
725 local extname = match(expr, "^extern%s+(%S+)$")
726 if extname then
727 return "iJ", map_extern[extname]
728 end
729
730 -- expr (interpreted as immediate)
731 return "iI", expr
732end
733
734-- Parse displacement expression: +-num, +-expr, +-opsize*num
735local function dispexpr(expr)
736 local disp = expr == "" and 0 or toint(expr)
737 if disp then return disp end
738 local c, dispt = match(expr, "^([+-])%s*(.+)$")
739 if c == "+" then
740 expr = dispt
741 elseif not c then
742 werror("bad displacement expression `"..expr.."'")
743 end
744 local opsize, tailops = match(dispt, "^(%w+)%s*%*%s*(.+)$")
745 local ops, imm = map_opsize[opsize], toint(tailops)
746 if ops and imm then
747 if c == "-" then imm = -imm end
748 return imm*map_opsizenum[ops]
749 end
750 local mode, iexpr = immexpr(dispt)
751 if mode == "iJ" or mode == "iPJ" then
752 if c == "-" then werror("cannot invert label reference") end
753 return { iexpr, mode }
754 end
755 return expr -- Need to return original signed expression.
756end
757
758-- Parse register or type expression.
759local function rtexpr(expr)
760 if not expr then return end
761 local tname, ovreg = match(expr, "^([%w_]+):(@[%w_]+)$")
762 local tp = map_type[tname or expr]
763 if tp then
764 local reg = ovreg or tp.reg
765 local rnum = map_reg_num[reg]
766 if not rnum then
767 werror("type `"..(tname or expr).."' needs a register override")
768 end
769 if not map_reg_valid_base[reg] then
770 werror("bad base register override `"..(map_reg_rev[reg] or reg).."'")
771 end
772 return reg, rnum, tp
773 end
774 return expr, map_reg_num[expr]
775end
776
777-- Parse operand and return { mode, opsize, reg, xreg, xsc, disp, imm }.
778local function parseoperand(param, isqword)
779 local t = {}
780
781 local expr = param
782 local opsize, tailops = match(param, "^(%w+)%s*(.+)$")
783 if opsize then
784 t.opsize = map_opsize[opsize]
785 if t.opsize then expr = tailops end
786 end
787
788 local br = match(expr, "^%[%s*(.-)%s*%]$")
789 repeat
790 if br then
791 t.mode = "xm"
792
793 -- [disp]
794 t.disp = toint(br)
795 if t.disp then
796 t.mode = x64 and "xm" or "xmO"
797 break
798 end
799
800 -- [reg...]
801 local tp
802 local reg, tailr = match(br, "^([@%w_:]+)%s*(.*)$")
803 reg, t.reg, tp = rtexpr(reg)
804 if not t.reg then
805 -- [expr]
806 t.mode = x64 and "xm" or "xmO"
807 t.disp = dispexpr("+"..br)
808 break
809 end
810
811 if t.reg == -1 then
812 t.vreg, tailr = match(tailr, "^(%b())(.*)$")
813 if not t.vreg then werror("bad variable register expression") end
814 end
815
816 -- [xreg*xsc] or [xreg*xsc+-disp] or [xreg*xsc+-expr]
817 local xsc, tailsc = match(tailr, "^%*%s*([1248])%s*(.*)$")
818 if xsc then
819 if not map_reg_valid_index[reg] then
820 werror("bad index register `"..map_reg_rev[reg].."'")
821 end
822 t.xsc = map_xsc[xsc]
823 t.xreg = t.reg
824 t.vxreg = t.vreg
825 t.reg = nil
826 t.vreg = nil
827 t.disp = dispexpr(tailsc)
828 break
829 end
830 if not map_reg_valid_base[reg] then
831 werror("bad base register `"..map_reg_rev[reg].."'")
832 end
833
834 -- [reg] or [reg+-disp]
835 t.disp = toint(tailr) or (tailr == "" and 0)
836 if t.disp then break end
837
838 -- [reg+xreg...]
839 local xreg, tailx = match(tailr, "^%+%s*([@%w_:]+)%s*(.*)$")
840 xreg, t.xreg, tp = rtexpr(xreg)
841 if not t.xreg then
842 -- [reg+-expr]
843 t.disp = dispexpr(tailr)
844 break
845 end
846 if not map_reg_valid_index[xreg] then
847 werror("bad index register `"..map_reg_rev[xreg].."'")
848 end
849
850 if t.xreg == -1 then
851 t.vxreg, tailx = match(tailx, "^(%b())(.*)$")
852 if not t.vxreg then werror("bad variable register expression") end
853 end
854
855 -- [reg+xreg*xsc...]
856 local xsc, tailsc = match(tailx, "^%*%s*([1248])%s*(.*)$")
857 if xsc then
858 t.xsc = map_xsc[xsc]
859 tailx = tailsc
860 end
861
862 -- [...] or [...+-disp] or [...+-expr]
863 t.disp = dispexpr(tailx)
864 else
865 -- imm or opsize*imm
866 local imm = toint(expr, isqword)
867 if not imm and sub(expr, 1, 1) == "*" and t.opsize then
868 imm = toint(sub(expr, 2))
869 if imm then
870 imm = imm * map_opsizenum[t.opsize]
871 t.opsize = nil
872 end
873 end
874 if imm then
875 if t.opsize then werror("bad operand size override") end
876 local m = "i"
877 if imm == 1 then m = m.."1" end
878 if imm >= 4294967168 and imm <= 4294967295 then imm = imm-4294967296 end
879 if imm >= -128 and imm <= 127 then m = m.."S" end
880 t.imm = imm
881 t.mode = m
882 break
883 end
884
885 local tp
886 local reg, tailr = match(expr, "^([@%w_:]+)%s*(.*)$")
887 reg, t.reg, tp = rtexpr(reg)
888 if t.reg then
889 if t.reg == -1 then
890 t.vreg, tailr = match(tailr, "^(%b())(.*)$")
891 if not t.vreg then werror("bad variable register expression") end
892 end
893 -- reg
894 if tailr == "" then
895 if t.opsize then werror("bad operand size override") end
896 t.opsize = map_reg_opsize[reg]
897 if t.opsize == "f" then
898 t.mode = t.reg == 0 and "fF" or "f"
899 else
900 if reg == "@w4" or (x64 and reg == "@d4") then
901 wwarn("bad idea, try again with `"..(x64 and "rsp'" or "esp'"))
902 end
903 t.mode = t.reg == 0 and "rmR" or (reg == "@b1" and "rmC" or "rm")
904 end
905 t.needrex = map_reg_needrex[reg]
906 break
907 end
908
909 -- type[idx], type[idx].field, type->field -> [reg+offset_expr]
910 if not tp then werror("bad operand `"..param.."'") end
911 t.mode = "xm"
912 t.disp = format(tp.ctypefmt, tailr)
913 else
914 t.mode, t.imm = immexpr(expr)
915 if sub(t.mode, -1) == "J" then
916 if t.opsize and t.opsize ~= addrsize then
917 werror("bad operand size override")
918 end
919 t.opsize = addrsize
920 end
921 end
922 end
923 until true
924 return t
925end
926
927------------------------------------------------------------------------------
928-- x86 Template String Description
929-- ===============================
930--
931-- Each template string is a list of [match:]pattern pairs,
932-- separated by "|". The first match wins. No match means a
933-- bad or unsupported combination of operand modes or sizes.
934--
935-- The match part and the ":" is omitted if the operation has
936-- no operands. Otherwise the first N characters are matched
937-- against the mode strings of each of the N operands.
938--
939-- The mode string for each operand type is (see parseoperand()):
940-- Integer register: "rm", +"R" for eax, ax, al, +"C" for cl
941-- FP register: "f", +"F" for st0
942-- Index operand: "xm", +"O" for [disp] (pure offset)
943-- Immediate: "i", +"S" for signed 8 bit, +"1" for 1,
944-- +"I" for arg, +"P" for pointer
945-- Any: +"J" for valid jump targets
946--
947-- So a match character "m" (mixed) matches both an integer register
948-- and an index operand (to be encoded with the ModRM/SIB scheme).
949-- But "r" matches only a register and "x" only an index operand
950-- (e.g. for FP memory access operations).
951--
952-- The operand size match string starts right after the mode match
953-- characters and ends before the ":". "dwb" or "qdwb" is assumed, if empty.
954-- The effective data size of the operation is matched against this list.
955--
956-- If only the regular "b", "w", "d", "q", "t" operand sizes are
957-- present, then all operands must be the same size. Unspecified sizes
958-- are ignored, but at least one operand must have a size or the pattern
959-- won't match (use the "byte", "word", "dword", "qword", "tword"
960-- operand size overrides. E.g.: mov dword [eax], 1).
961--
962-- If the list has a "1" or "2" prefix, the operand size is taken
963-- from the respective operand and any other operand sizes are ignored.
964-- If the list contains only ".", all operand sizes are ignored.
965-- If the list has a "/" prefix, the concatenated (mixed) operand sizes
966-- are compared to the match.
967--
968-- E.g. "rrdw" matches for either two dword registers or two word
969-- registers. "Fx2dq" matches an st0 operand plus an index operand
970-- pointing to a dword (float) or qword (double).
971--
972-- Every character after the ":" is part of the pattern string:
973-- Hex chars are accumulated to form the opcode (left to right).
974-- "n" disables the standard opcode mods
975-- (otherwise: -1 for "b", o16 prefix for "w", rex.w for "q")
976-- "X" Force REX.W.
977-- "r"/"R" adds the reg. number from the 1st/2nd operand to the opcode.
978-- "m"/"M" generates ModRM/SIB from the 1st/2nd operand.
979-- The spare 3 bits are either filled with the last hex digit or
980-- the result from a previous "r"/"R". The opcode is restored.
981-- "u" Use VEX encoding, vvvv unused.
982-- "v"/"V" Use VEX encoding, vvvv from 1st/2nd operand (the operand is
983-- removed from the list used by future characters).
984-- "w" Use VEX encoding, vvvv from 3rd operand.
985-- "L" Force VEX.L
986--
987-- All of the following characters force a flush of the opcode:
988-- "o"/"O" stores a pure 32 bit disp (offset) from the 1st/2nd operand.
989-- "s" stores a 4 bit immediate from the last register operand,
990-- followed by 4 zero bits.
991-- "S" stores a signed 8 bit immediate from the last operand.
992-- "U" stores an unsigned 8 bit immediate from the last operand.
993-- "W" stores an unsigned 16 bit immediate from the last operand.
994-- "i" stores an operand sized immediate from the last operand.
995-- "I" dito, but generates an action code to optionally modify
996-- the opcode (+2) for a signed 8 bit immediate.
997-- "J" generates one of the REL action codes from the last operand.
998--
999------------------------------------------------------------------------------
1000
1001-- Template strings for x86 instructions. Ordered by first opcode byte.
1002-- Unimplemented opcodes (deliberate omissions) are marked with *.
1003local map_op = {
1004 -- 00-05: add...
1005 -- 06: *push es
1006 -- 07: *pop es
1007 -- 08-0D: or...
1008 -- 0E: *push cs
1009 -- 0F: two byte opcode prefix
1010 -- 10-15: adc...
1011 -- 16: *push ss
1012 -- 17: *pop ss
1013 -- 18-1D: sbb...
1014 -- 1E: *push ds
1015 -- 1F: *pop ds
1016 -- 20-25: and...
1017 es_0 = "26",
1018 -- 27: *daa
1019 -- 28-2D: sub...
1020 cs_0 = "2E",
1021 -- 2F: *das
1022 -- 30-35: xor...
1023 ss_0 = "36",
1024 -- 37: *aaa
1025 -- 38-3D: cmp...
1026 ds_0 = "3E",
1027 -- 3F: *aas
1028 inc_1 = x64 and "m:FF0m" or "rdw:40r|m:FF0m",
1029 dec_1 = x64 and "m:FF1m" or "rdw:48r|m:FF1m",
1030 push_1 = (x64 and "rq:n50r|rw:50r|mq:nFF6m|mw:FF6m" or
1031 "rdw:50r|mdw:FF6m").."|S.:6AS|ib:n6Ai|i.:68i",
1032 pop_1 = x64 and "rq:n58r|rw:58r|mq:n8F0m|mw:8F0m" or "rdw:58r|mdw:8F0m",
1033 -- 60: *pusha, *pushad, *pushaw
1034 -- 61: *popa, *popad, *popaw
1035 -- 62: *bound rdw,x
1036 -- 63: x86: *arpl mw,rw
1037 movsxd_2 = x64 and "rm/qd:63rM",
1038 fs_0 = "64",
1039 gs_0 = "65",
1040 o16_0 = "66",
1041 a16_0 = not x64 and "67" or nil,
1042 a32_0 = x64 and "67",
1043 -- 68: push idw
1044 -- 69: imul rdw,mdw,idw
1045 -- 6A: push ib
1046 -- 6B: imul rdw,mdw,S
1047 -- 6C: *insb
1048 -- 6D: *insd, *insw
1049 -- 6E: *outsb
1050 -- 6F: *outsd, *outsw
1051 -- 70-7F: jcc lb
1052 -- 80: add... mb,i
1053 -- 81: add... mdw,i
1054 -- 82: *undefined
1055 -- 83: add... mdw,S
1056 test_2 = "mr:85Rm|rm:85rM|Ri:A9ri|mi:F70mi",
1057 -- 86: xchg rb,mb
1058 -- 87: xchg rdw,mdw
1059 -- 88: mov mb,r
1060 -- 89: mov mdw,r
1061 -- 8A: mov r,mb
1062 -- 8B: mov r,mdw
1063 -- 8C: *mov mdw,seg
1064 lea_2 = "rx1dq:8DrM",
1065 -- 8E: *mov seg,mdw
1066 -- 8F: pop mdw
1067 nop_0 = "90",
1068 xchg_2 = "Rrqdw:90R|rRqdw:90r|rm:87rM|mr:87Rm",
1069 cbw_0 = "6698",
1070 cwde_0 = "98",
1071 cdqe_0 = "4898",
1072 cwd_0 = "6699",
1073 cdq_0 = "99",
1074 cqo_0 = "4899",
1075 -- 9A: *call iw:idw
1076 wait_0 = "9B",
1077 fwait_0 = "9B",
1078 pushf_0 = "9C",
1079 pushfd_0 = not x64 and "9C",
1080 pushfq_0 = x64 and "9C",
1081 popf_0 = "9D",
1082 popfd_0 = not x64 and "9D",
1083 popfq_0 = x64 and "9D",
1084 sahf_0 = "9E",
1085 lahf_0 = "9F",
1086 mov_2 = "OR:A3o|RO:A1O|mr:89Rm|rm:8BrM|rib:nB0ri|ridw:B8ri|mi:C70mi",
1087 movsb_0 = "A4",
1088 movsw_0 = "66A5",
1089 movsd_0 = "A5",
1090 cmpsb_0 = "A6",
1091 cmpsw_0 = "66A7",
1092 cmpsd_0 = "A7",
1093 -- A8: test Rb,i
1094 -- A9: test Rdw,i
1095 stosb_0 = "AA",
1096 stosw_0 = "66AB",
1097 stosd_0 = "AB",
1098 lodsb_0 = "AC",
1099 lodsw_0 = "66AD",
1100 lodsd_0 = "AD",
1101 scasb_0 = "AE",
1102 scasw_0 = "66AF",
1103 scasd_0 = "AF",
1104 -- B0-B7: mov rb,i
1105 -- B8-BF: mov rdw,i
1106 -- C0: rol... mb,i
1107 -- C1: rol... mdw,i
1108 ret_1 = "i.:nC2W",
1109 ret_0 = "C3",
1110 -- C4: *les rdw,mq
1111 -- C5: *lds rdw,mq
1112 -- C6: mov mb,i
1113 -- C7: mov mdw,i
1114 -- C8: *enter iw,ib
1115 leave_0 = "C9",
1116 -- CA: *retf iw
1117 -- CB: *retf
1118 int3_0 = "CC",
1119 int_1 = "i.:nCDU",
1120 into_0 = "CE",
1121 -- CF: *iret
1122 -- D0: rol... mb,1
1123 -- D1: rol... mdw,1
1124 -- D2: rol... mb,cl
1125 -- D3: rol... mb,cl
1126 -- D4: *aam ib
1127 -- D5: *aad ib
1128 -- D6: *salc
1129 -- D7: *xlat
1130 -- D8-DF: floating point ops
1131 -- E0: *loopne
1132 -- E1: *loope
1133 -- E2: *loop
1134 -- E3: *jcxz, *jecxz
1135 -- E4: *in Rb,ib
1136 -- E5: *in Rdw,ib
1137 -- E6: *out ib,Rb
1138 -- E7: *out ib,Rdw
1139 call_1 = x64 and "mq:nFF2m|J.:E8nJ" or "md:FF2m|J.:E8J",
1140 jmp_1 = x64 and "mq:nFF4m|J.:E9nJ" or "md:FF4m|J.:E9J", -- short: EB
1141 -- EA: *jmp iw:idw
1142 -- EB: jmp ib
1143 -- EC: *in Rb,dx
1144 -- ED: *in Rdw,dx
1145 -- EE: *out dx,Rb
1146 -- EF: *out dx,Rdw
1147 lock_0 = "F0",
1148 int1_0 = "F1",
1149 repne_0 = "F2",
1150 repnz_0 = "F2",
1151 rep_0 = "F3",
1152 repe_0 = "F3",
1153 repz_0 = "F3",
1154 endbr32_0 = "F30F1EFB",
1155 endbr64_0 = "F30F1EFA",
1156 -- F4: *hlt
1157 cmc_0 = "F5",
1158 -- F6: test... mb,i; div... mb
1159 -- F7: test... mdw,i; div... mdw
1160 clc_0 = "F8",
1161 stc_0 = "F9",
1162 -- FA: *cli
1163 cld_0 = "FC",
1164 std_0 = "FD",
1165 -- FE: inc... mb
1166 -- FF: inc... mdw
1167
1168 -- misc ops
1169 not_1 = "m:F72m",
1170 neg_1 = "m:F73m",
1171 mul_1 = "m:F74m",
1172 imul_1 = "m:F75m",
1173 div_1 = "m:F76m",
1174 idiv_1 = "m:F77m",
1175
1176 imul_2 = "rmqdw:0FAFrM|rIqdw:69rmI|rSqdw:6BrmS|riqdw:69rmi",
1177 imul_3 = "rmIqdw:69rMI|rmSqdw:6BrMS|rmiqdw:69rMi",
1178
1179 movzx_2 = "rm/db:0FB6rM|rm/qb:|rm/wb:0FB6rM|rm/dw:0FB7rM|rm/qw:",
1180 movsx_2 = "rm/db:0FBErM|rm/qb:|rm/wb:0FBErM|rm/dw:0FBFrM|rm/qw:",
1181
1182 bswap_1 = "rqd:0FC8r",
1183 bsf_2 = "rmqdw:0FBCrM",
1184 bsr_2 = "rmqdw:0FBDrM",
1185 bt_2 = "mrqdw:0FA3Rm|miqdw:0FBA4mU",
1186 btc_2 = "mrqdw:0FBBRm|miqdw:0FBA7mU",
1187 btr_2 = "mrqdw:0FB3Rm|miqdw:0FBA6mU",
1188 bts_2 = "mrqdw:0FABRm|miqdw:0FBA5mU",
1189
1190 shld_3 = "mriqdw:0FA4RmU|mrC/qq:0FA5Rm|mrC/dd:|mrC/ww:",
1191 shrd_3 = "mriqdw:0FACRmU|mrC/qq:0FADRm|mrC/dd:|mrC/ww:",
1192
1193 rdtsc_0 = "0F31", -- P1+
1194 rdpmc_0 = "0F33", -- P6+
1195 cpuid_0 = "0FA2", -- P1+
1196
1197 -- floating point ops
1198 fst_1 = "ff:DDD0r|xd:D92m|xq:nDD2m",
1199 fstp_1 = "ff:DDD8r|xd:D93m|xq:nDD3m|xt:DB7m",
1200 fld_1 = "ff:D9C0r|xd:D90m|xq:nDD0m|xt:DB5m",
1201
1202 fpop_0 = "DDD8", -- Alias for fstp st0.
1203
1204 fist_1 = "xw:nDF2m|xd:DB2m",
1205 fistp_1 = "xw:nDF3m|xd:DB3m|xq:nDF7m",
1206 fild_1 = "xw:nDF0m|xd:DB0m|xq:nDF5m",
1207
1208 fxch_0 = "D9C9",
1209 fxch_1 = "ff:D9C8r",
1210 fxch_2 = "fFf:D9C8r|Fff:D9C8R",
1211
1212 fucom_1 = "ff:DDE0r",
1213 fucom_2 = "Fff:DDE0R",
1214 fucomp_1 = "ff:DDE8r",
1215 fucomp_2 = "Fff:DDE8R",
1216 fucomi_1 = "ff:DBE8r", -- P6+
1217 fucomi_2 = "Fff:DBE8R", -- P6+
1218 fucomip_1 = "ff:DFE8r", -- P6+
1219 fucomip_2 = "Fff:DFE8R", -- P6+
1220 fcomi_1 = "ff:DBF0r", -- P6+
1221 fcomi_2 = "Fff:DBF0R", -- P6+
1222 fcomip_1 = "ff:DFF0r", -- P6+
1223 fcomip_2 = "Fff:DFF0R", -- P6+
1224 fucompp_0 = "DAE9",
1225 fcompp_0 = "DED9",
1226
1227 fldenv_1 = "x.:D94m",
1228 fnstenv_1 = "x.:D96m",
1229 fstenv_1 = "x.:9BD96m",
1230 fldcw_1 = "xw:nD95m",
1231 fstcw_1 = "xw:n9BD97m",
1232 fnstcw_1 = "xw:nD97m",
1233 fstsw_1 = "Rw:n9BDFE0|xw:n9BDD7m",
1234 fnstsw_1 = "Rw:nDFE0|xw:nDD7m",
1235 fclex_0 = "9BDBE2",
1236 fnclex_0 = "DBE2",
1237
1238 fnop_0 = "D9D0",
1239 -- D9D1-D9DF: unassigned
1240
1241 fchs_0 = "D9E0",
1242 fabs_0 = "D9E1",
1243 -- D9E2: unassigned
1244 -- D9E3: unassigned
1245 ftst_0 = "D9E4",
1246 fxam_0 = "D9E5",
1247 -- D9E6: unassigned
1248 -- D9E7: unassigned
1249 fld1_0 = "D9E8",
1250 fldl2t_0 = "D9E9",
1251 fldl2e_0 = "D9EA",
1252 fldpi_0 = "D9EB",
1253 fldlg2_0 = "D9EC",
1254 fldln2_0 = "D9ED",
1255 fldz_0 = "D9EE",
1256 -- D9EF: unassigned
1257
1258 f2xm1_0 = "D9F0",
1259 fyl2x_0 = "D9F1",
1260 fptan_0 = "D9F2",
1261 fpatan_0 = "D9F3",
1262 fxtract_0 = "D9F4",
1263 fprem1_0 = "D9F5",
1264 fdecstp_0 = "D9F6",
1265 fincstp_0 = "D9F7",
1266 fprem_0 = "D9F8",
1267 fyl2xp1_0 = "D9F9",
1268 fsqrt_0 = "D9FA",
1269 fsincos_0 = "D9FB",
1270 frndint_0 = "D9FC",
1271 fscale_0 = "D9FD",
1272 fsin_0 = "D9FE",
1273 fcos_0 = "D9FF",
1274
1275 -- SSE, SSE2
1276 andnpd_2 = "rmo:660F55rM",
1277 andnps_2 = "rmo:0F55rM",
1278 andpd_2 = "rmo:660F54rM",
1279 andps_2 = "rmo:0F54rM",
1280 clflush_1 = "x.:0FAE7m",
1281 cmppd_3 = "rmio:660FC2rMU",
1282 cmpps_3 = "rmio:0FC2rMU",
1283 cmpsd_3 = "rrio:F20FC2rMU|rxi/oq:",
1284 cmpss_3 = "rrio:F30FC2rMU|rxi/od:",
1285 comisd_2 = "rro:660F2FrM|rx/oq:",
1286 comiss_2 = "rro:0F2FrM|rx/od:",
1287 cvtdq2pd_2 = "rro:F30FE6rM|rx/oq:",
1288 cvtdq2ps_2 = "rmo:0F5BrM",
1289 cvtpd2dq_2 = "rmo:F20FE6rM",
1290 cvtpd2ps_2 = "rmo:660F5ArM",
1291 cvtpi2pd_2 = "rx/oq:660F2ArM",
1292 cvtpi2ps_2 = "rx/oq:0F2ArM",
1293 cvtps2dq_2 = "rmo:660F5BrM",
1294 cvtps2pd_2 = "rro:0F5ArM|rx/oq:",
1295 cvtsd2si_2 = "rr/do:F20F2DrM|rr/qo:|rx/dq:|rxq:",
1296 cvtsd2ss_2 = "rro:F20F5ArM|rx/oq:",
1297 cvtsi2sd_2 = "rm/od:F20F2ArM|rm/oq:F20F2ArXM",
1298 cvtsi2ss_2 = "rm/od:F30F2ArM|rm/oq:F30F2ArXM",
1299 cvtss2sd_2 = "rro:F30F5ArM|rx/od:",
1300 cvtss2si_2 = "rr/do:F30F2DrM|rr/qo:|rxd:|rx/qd:",
1301 cvttpd2dq_2 = "rmo:660FE6rM",
1302 cvttps2dq_2 = "rmo:F30F5BrM",
1303 cvttsd2si_2 = "rr/do:F20F2CrM|rr/qo:|rx/dq:|rxq:",
1304 cvttss2si_2 = "rr/do:F30F2CrM|rr/qo:|rxd:|rx/qd:",
1305 fxsave_1 = "x.:0FAE0m",
1306 fxrstor_1 = "x.:0FAE1m",
1307 ldmxcsr_1 = "xd:0FAE2m",
1308 lfence_0 = "0FAEE8",
1309 maskmovdqu_2 = "rro:660FF7rM",
1310 mfence_0 = "0FAEF0",
1311 movapd_2 = "rmo:660F28rM|mro:660F29Rm",
1312 movaps_2 = "rmo:0F28rM|mro:0F29Rm",
1313 movd_2 = "rm/od:660F6ErM|rm/oq:660F6ErXM|mr/do:660F7ERm|mr/qo:",
1314 movdqa_2 = "rmo:660F6FrM|mro:660F7FRm",
1315 movdqu_2 = "rmo:F30F6FrM|mro:F30F7FRm",
1316 movhlps_2 = "rro:0F12rM",
1317 movhpd_2 = "rx/oq:660F16rM|xr/qo:n660F17Rm",
1318 movhps_2 = "rx/oq:0F16rM|xr/qo:n0F17Rm",
1319 movlhps_2 = "rro:0F16rM",
1320 movlpd_2 = "rx/oq:660F12rM|xr/qo:n660F13Rm",
1321 movlps_2 = "rx/oq:0F12rM|xr/qo:n0F13Rm",
1322 movmskpd_2 = "rr/do:660F50rM",
1323 movmskps_2 = "rr/do:0F50rM",
1324 movntdq_2 = "xro:660FE7Rm",
1325 movnti_2 = "xrqd:0FC3Rm",
1326 movntpd_2 = "xro:660F2BRm",
1327 movntps_2 = "xro:0F2BRm",
1328 movq_2 = "rro:F30F7ErM|rx/oq:|xr/qo:n660FD6Rm",
1329 movsd_2 = "rro:F20F10rM|rx/oq:|xr/qo:nF20F11Rm",
1330 movss_2 = "rro:F30F10rM|rx/od:|xr/do:F30F11Rm",
1331 movupd_2 = "rmo:660F10rM|mro:660F11Rm",
1332 movups_2 = "rmo:0F10rM|mro:0F11Rm",
1333 orpd_2 = "rmo:660F56rM",
1334 orps_2 = "rmo:0F56rM",
1335 pause_0 = "F390",
1336 pextrw_3 = "rri/do:660FC5rMU|xri/wo:660F3A15nRmU", -- Mem op: SSE4.1 only.
1337 pinsrw_3 = "rri/od:660FC4rMU|rxi/ow:",
1338 pmovmskb_2 = "rr/do:660FD7rM",
1339 prefetchnta_1 = "xb:n0F180m",
1340 prefetcht0_1 = "xb:n0F181m",
1341 prefetcht1_1 = "xb:n0F182m",
1342 prefetcht2_1 = "xb:n0F183m",
1343 pshufd_3 = "rmio:660F70rMU",
1344 pshufhw_3 = "rmio:F30F70rMU",
1345 pshuflw_3 = "rmio:F20F70rMU",
1346 pslld_2 = "rmo:660FF2rM|rio:660F726mU",
1347 pslldq_2 = "rio:660F737mU",
1348 psllq_2 = "rmo:660FF3rM|rio:660F736mU",
1349 psllw_2 = "rmo:660FF1rM|rio:660F716mU",
1350 psrad_2 = "rmo:660FE2rM|rio:660F724mU",
1351 psraw_2 = "rmo:660FE1rM|rio:660F714mU",
1352 psrld_2 = "rmo:660FD2rM|rio:660F722mU",
1353 psrldq_2 = "rio:660F733mU",
1354 psrlq_2 = "rmo:660FD3rM|rio:660F732mU",
1355 psrlw_2 = "rmo:660FD1rM|rio:660F712mU",
1356 rcpps_2 = "rmo:0F53rM",
1357 rcpss_2 = "rro:F30F53rM|rx/od:",
1358 rsqrtps_2 = "rmo:0F52rM",
1359 rsqrtss_2 = "rmo:F30F52rM",
1360 sfence_0 = "0FAEF8",
1361 shufpd_3 = "rmio:660FC6rMU",
1362 shufps_3 = "rmio:0FC6rMU",
1363 stmxcsr_1 = "xd:0FAE3m",
1364 ucomisd_2 = "rro:660F2ErM|rx/oq:",
1365 ucomiss_2 = "rro:0F2ErM|rx/od:",
1366 unpckhpd_2 = "rmo:660F15rM",
1367 unpckhps_2 = "rmo:0F15rM",
1368 unpcklpd_2 = "rmo:660F14rM",
1369 unpcklps_2 = "rmo:0F14rM",
1370 xorpd_2 = "rmo:660F57rM",
1371 xorps_2 = "rmo:0F57rM",
1372
1373 -- SSE3 ops
1374 fisttp_1 = "xw:nDF1m|xd:DB1m|xq:nDD1m",
1375 addsubpd_2 = "rmo:660FD0rM",
1376 addsubps_2 = "rmo:F20FD0rM",
1377 haddpd_2 = "rmo:660F7CrM",
1378 haddps_2 = "rmo:F20F7CrM",
1379 hsubpd_2 = "rmo:660F7DrM",
1380 hsubps_2 = "rmo:F20F7DrM",
1381 lddqu_2 = "rxo:F20FF0rM",
1382 movddup_2 = "rmo:F20F12rM",
1383 movshdup_2 = "rmo:F30F16rM",
1384 movsldup_2 = "rmo:F30F12rM",
1385
1386 -- SSSE3 ops
1387 pabsb_2 = "rmo:660F381CrM",
1388 pabsd_2 = "rmo:660F381ErM",
1389 pabsw_2 = "rmo:660F381DrM",
1390 palignr_3 = "rmio:660F3A0FrMU",
1391 phaddd_2 = "rmo:660F3802rM",
1392 phaddsw_2 = "rmo:660F3803rM",
1393 phaddw_2 = "rmo:660F3801rM",
1394 phsubd_2 = "rmo:660F3806rM",
1395 phsubsw_2 = "rmo:660F3807rM",
1396 phsubw_2 = "rmo:660F3805rM",
1397 pmaddubsw_2 = "rmo:660F3804rM",
1398 pmulhrsw_2 = "rmo:660F380BrM",
1399 pshufb_2 = "rmo:660F3800rM",
1400 psignb_2 = "rmo:660F3808rM",
1401 psignd_2 = "rmo:660F380ArM",
1402 psignw_2 = "rmo:660F3809rM",
1403
1404 -- SSE4.1 ops
1405 blendpd_3 = "rmio:660F3A0DrMU",
1406 blendps_3 = "rmio:660F3A0CrMU",
1407 blendvpd_3 = "rmRo:660F3815rM",
1408 blendvps_3 = "rmRo:660F3814rM",
1409 dppd_3 = "rmio:660F3A41rMU",
1410 dpps_3 = "rmio:660F3A40rMU",
1411 extractps_3 = "mri/do:660F3A17RmU|rri/qo:660F3A17RXmU",
1412 insertps_3 = "rrio:660F3A41rMU|rxi/od:",
1413 movntdqa_2 = "rxo:660F382ArM",
1414 mpsadbw_3 = "rmio:660F3A42rMU",
1415 packusdw_2 = "rmo:660F382BrM",
1416 pblendvb_3 = "rmRo:660F3810rM",
1417 pblendw_3 = "rmio:660F3A0ErMU",
1418 pcmpeqq_2 = "rmo:660F3829rM",
1419 pextrb_3 = "rri/do:660F3A14nRmU|rri/qo:|xri/bo:",
1420 pextrd_3 = "mri/do:660F3A16RmU",
1421 pextrq_3 = "mri/qo:660F3A16RmU",
1422 -- pextrw is SSE2, mem operand is SSE4.1 only
1423 phminposuw_2 = "rmo:660F3841rM",
1424 pinsrb_3 = "rri/od:660F3A20nrMU|rxi/ob:",
1425 pinsrd_3 = "rmi/od:660F3A22rMU",
1426 pinsrq_3 = "rmi/oq:660F3A22rXMU",
1427 pmaxsb_2 = "rmo:660F383CrM",
1428 pmaxsd_2 = "rmo:660F383DrM",
1429 pmaxud_2 = "rmo:660F383FrM",
1430 pmaxuw_2 = "rmo:660F383ErM",
1431 pminsb_2 = "rmo:660F3838rM",
1432 pminsd_2 = "rmo:660F3839rM",
1433 pminud_2 = "rmo:660F383BrM",
1434 pminuw_2 = "rmo:660F383ArM",
1435 pmovsxbd_2 = "rro:660F3821rM|rx/od:",
1436 pmovsxbq_2 = "rro:660F3822rM|rx/ow:",
1437 pmovsxbw_2 = "rro:660F3820rM|rx/oq:",
1438 pmovsxdq_2 = "rro:660F3825rM|rx/oq:",
1439 pmovsxwd_2 = "rro:660F3823rM|rx/oq:",
1440 pmovsxwq_2 = "rro:660F3824rM|rx/od:",
1441 pmovzxbd_2 = "rro:660F3831rM|rx/od:",
1442 pmovzxbq_2 = "rro:660F3832rM|rx/ow:",
1443 pmovzxbw_2 = "rro:660F3830rM|rx/oq:",
1444 pmovzxdq_2 = "rro:660F3835rM|rx/oq:",
1445 pmovzxwd_2 = "rro:660F3833rM|rx/oq:",
1446 pmovzxwq_2 = "rro:660F3834rM|rx/od:",
1447 pmuldq_2 = "rmo:660F3828rM",
1448 pmulld_2 = "rmo:660F3840rM",
1449 ptest_2 = "rmo:660F3817rM",
1450 roundpd_3 = "rmio:660F3A09rMU",
1451 roundps_3 = "rmio:660F3A08rMU",
1452 roundsd_3 = "rrio:660F3A0BrMU|rxi/oq:",
1453 roundss_3 = "rrio:660F3A0ArMU|rxi/od:",
1454
1455 -- SSE4.2 ops
1456 crc32_2 = "rmqd:F20F38F1rM|rm/dw:66F20F38F1rM|rm/db:F20F38F0rM|rm/qb:",
1457 pcmpestri_3 = "rmio:660F3A61rMU",
1458 pcmpestrm_3 = "rmio:660F3A60rMU",
1459 pcmpgtq_2 = "rmo:660F3837rM",
1460 pcmpistri_3 = "rmio:660F3A63rMU",
1461 pcmpistrm_3 = "rmio:660F3A62rMU",
1462 popcnt_2 = "rmqdw:F30FB8rM",
1463
1464 -- SSE4a
1465 extrq_2 = "rro:660F79rM",
1466 extrq_3 = "riio:660F780mUU",
1467 insertq_2 = "rro:F20F79rM",
1468 insertq_4 = "rriio:F20F78rMUU",
1469 lzcnt_2 = "rmqdw:F30FBDrM",
1470 movntsd_2 = "xr/qo:nF20F2BRm",
1471 movntss_2 = "xr/do:F30F2BRm",
1472 -- popcnt is also in SSE4.2
1473
1474 -- AES-NI
1475 aesdec_2 = "rmo:660F38DErM",
1476 aesdeclast_2 = "rmo:660F38DFrM",
1477 aesenc_2 = "rmo:660F38DCrM",
1478 aesenclast_2 = "rmo:660F38DDrM",
1479 aesimc_2 = "rmo:660F38DBrM",
1480 aeskeygenassist_3 = "rmio:660F3ADFrMU",
1481 pclmulqdq_3 = "rmio:660F3A44rMU",
1482
1483 -- AVX FP ops
1484 vaddsubpd_3 = "rrmoy:660FVD0rM",
1485 vaddsubps_3 = "rrmoy:F20FVD0rM",
1486 vandpd_3 = "rrmoy:660FV54rM",
1487 vandps_3 = "rrmoy:0FV54rM",
1488 vandnpd_3 = "rrmoy:660FV55rM",
1489 vandnps_3 = "rrmoy:0FV55rM",
1490 vblendpd_4 = "rrmioy:660F3AV0DrMU",
1491 vblendps_4 = "rrmioy:660F3AV0CrMU",
1492 vblendvpd_4 = "rrmroy:660F3AV4BrMs",
1493 vblendvps_4 = "rrmroy:660F3AV4ArMs",
1494 vbroadcastf128_2 = "rx/yo:660F38u1ArM",
1495 vcmppd_4 = "rrmioy:660FVC2rMU",
1496 vcmpps_4 = "rrmioy:0FVC2rMU",
1497 vcmpsd_4 = "rrrio:F20FVC2rMU|rrxi/ooq:",
1498 vcmpss_4 = "rrrio:F30FVC2rMU|rrxi/ood:",
1499 vcomisd_2 = "rro:660Fu2FrM|rx/oq:",
1500 vcomiss_2 = "rro:0Fu2FrM|rx/od:",
1501 vcvtdq2pd_2 = "rro:F30FuE6rM|rx/oq:|rm/yo:",
1502 vcvtdq2ps_2 = "rmoy:0Fu5BrM",
1503 vcvtpd2dq_2 = "rmoy:F20FuE6rM",
1504 vcvtpd2ps_2 = "rmoy:660Fu5ArM",
1505 vcvtps2dq_2 = "rmoy:660Fu5BrM",
1506 vcvtps2pd_2 = "rro:0Fu5ArM|rx/oq:|rm/yo:",
1507 vcvtsd2si_2 = "rr/do:F20Fu2DrM|rx/dq:|rr/qo:|rxq:",
1508 vcvtsd2ss_3 = "rrro:F20FV5ArM|rrx/ooq:",
1509 vcvtsi2sd_3 = "rrm/ood:F20FV2ArM|rrm/ooq:F20FVX2ArM",
1510 vcvtsi2ss_3 = "rrm/ood:F30FV2ArM|rrm/ooq:F30FVX2ArM",
1511 vcvtss2sd_3 = "rrro:F30FV5ArM|rrx/ood:",
1512 vcvtss2si_2 = "rr/do:F30Fu2DrM|rxd:|rr/qo:|rx/qd:",
1513 vcvttpd2dq_2 = "rmo:660FuE6rM|rm/oy:660FuLE6rM",
1514 vcvttps2dq_2 = "rmoy:F30Fu5BrM",
1515 vcvttsd2si_2 = "rr/do:F20Fu2CrM|rx/dq:|rr/qo:|rxq:",
1516 vcvttss2si_2 = "rr/do:F30Fu2CrM|rxd:|rr/qo:|rx/qd:",
1517 vdppd_4 = "rrmio:660F3AV41rMU",
1518 vdpps_4 = "rrmioy:660F3AV40rMU",
1519 vextractf128_3 = "mri/oy:660F3AuL19RmU",
1520 vextractps_3 = "mri/do:660F3Au17RmU",
1521 vhaddpd_3 = "rrmoy:660FV7CrM",
1522 vhaddps_3 = "rrmoy:F20FV7CrM",
1523 vhsubpd_3 = "rrmoy:660FV7DrM",
1524 vhsubps_3 = "rrmoy:F20FV7DrM",
1525 vinsertf128_4 = "rrmi/yyo:660F3AV18rMU",
1526 vinsertps_4 = "rrrio:660F3AV21rMU|rrxi/ood:",
1527 vldmxcsr_1 = "xd:0FuAE2m",
1528 vmaskmovps_3 = "rrxoy:660F38V2CrM|xrroy:660F38V2ERm",
1529 vmaskmovpd_3 = "rrxoy:660F38V2DrM|xrroy:660F38V2FRm",
1530 vmovapd_2 = "rmoy:660Fu28rM|mroy:660Fu29Rm",
1531 vmovaps_2 = "rmoy:0Fu28rM|mroy:0Fu29Rm",
1532 vmovd_2 = "rm/od:660Fu6ErM|rm/oq:660FuX6ErM|mr/do:660Fu7ERm|mr/qo:",
1533 vmovq_2 = "rro:F30Fu7ErM|rx/oq:|xr/qo:660FuD6Rm",
1534 vmovddup_2 = "rmy:F20Fu12rM|rro:|rx/oq:",
1535 vmovhlps_3 = "rrro:0FV12rM",
1536 vmovhpd_2 = "xr/qo:660Fu17Rm",
1537 vmovhpd_3 = "rrx/ooq:660FV16rM",
1538 vmovhps_2 = "xr/qo:0Fu17Rm",
1539 vmovhps_3 = "rrx/ooq:0FV16rM",
1540 vmovlhps_3 = "rrro:0FV16rM",
1541 vmovlpd_2 = "xr/qo:660Fu13Rm",
1542 vmovlpd_3 = "rrx/ooq:660FV12rM",
1543 vmovlps_2 = "xr/qo:0Fu13Rm",
1544 vmovlps_3 = "rrx/ooq:0FV12rM",
1545 vmovmskpd_2 = "rr/do:660Fu50rM|rr/dy:660FuL50rM",
1546 vmovmskps_2 = "rr/do:0Fu50rM|rr/dy:0FuL50rM",
1547 vmovntpd_2 = "xroy:660Fu2BRm",
1548 vmovntps_2 = "xroy:0Fu2BRm",
1549 vmovsd_2 = "rx/oq:F20Fu10rM|xr/qo:F20Fu11Rm",
1550 vmovsd_3 = "rrro:F20FV10rM",
1551 vmovshdup_2 = "rmoy:F30Fu16rM",
1552 vmovsldup_2 = "rmoy:F30Fu12rM",
1553 vmovss_2 = "rx/od:F30Fu10rM|xr/do:F30Fu11Rm",
1554 vmovss_3 = "rrro:F30FV10rM",
1555 vmovupd_2 = "rmoy:660Fu10rM|mroy:660Fu11Rm",
1556 vmovups_2 = "rmoy:0Fu10rM|mroy:0Fu11Rm",
1557 vorpd_3 = "rrmoy:660FV56rM",
1558 vorps_3 = "rrmoy:0FV56rM",
1559 vpermilpd_3 = "rrmoy:660F38V0DrM|rmioy:660F3Au05rMU",
1560 vpermilps_3 = "rrmoy:660F38V0CrM|rmioy:660F3Au04rMU",
1561 vperm2f128_4 = "rrmiy:660F3AV06rMU",
1562 vptestpd_2 = "rmoy:660F38u0FrM",
1563 vptestps_2 = "rmoy:660F38u0ErM",
1564 vrcpps_2 = "rmoy:0Fu53rM",
1565 vrcpss_3 = "rrro:F30FV53rM|rrx/ood:",
1566 vrsqrtps_2 = "rmoy:0Fu52rM",
1567 vrsqrtss_3 = "rrro:F30FV52rM|rrx/ood:",
1568 vroundpd_3 = "rmioy:660F3Au09rMU",
1569 vroundps_3 = "rmioy:660F3Au08rMU",
1570 vroundsd_4 = "rrrio:660F3AV0BrMU|rrxi/ooq:",
1571 vroundss_4 = "rrrio:660F3AV0ArMU|rrxi/ood:",
1572 vshufpd_4 = "rrmioy:660FVC6rMU",
1573 vshufps_4 = "rrmioy:0FVC6rMU",
1574 vsqrtps_2 = "rmoy:0Fu51rM",
1575 vsqrtss_2 = "rro:F30Fu51rM|rx/od:",
1576 vsqrtpd_2 = "rmoy:660Fu51rM",
1577 vsqrtsd_2 = "rro:F20Fu51rM|rx/oq:",
1578 vstmxcsr_1 = "xd:0FuAE3m",
1579 vucomisd_2 = "rro:660Fu2ErM|rx/oq:",
1580 vucomiss_2 = "rro:0Fu2ErM|rx/od:",
1581 vunpckhpd_3 = "rrmoy:660FV15rM",
1582 vunpckhps_3 = "rrmoy:0FV15rM",
1583 vunpcklpd_3 = "rrmoy:660FV14rM",
1584 vunpcklps_3 = "rrmoy:0FV14rM",
1585 vxorpd_3 = "rrmoy:660FV57rM",
1586 vxorps_3 = "rrmoy:0FV57rM",
1587 vzeroall_0 = "0FuL77",
1588 vzeroupper_0 = "0Fu77",
1589
1590 -- AVX2 FP ops
1591 vbroadcastss_2 = "rx/od:660F38u18rM|rx/yd:|rro:|rr/yo:",
1592 vbroadcastsd_2 = "rx/yq:660F38u19rM|rr/yo:",
1593 -- *vgather* (!vsib)
1594 vpermpd_3 = "rmiy:660F3AuX01rMU",
1595 vpermps_3 = "rrmy:660F38V16rM",
1596
1597 -- AVX, AVX2 integer ops
1598 -- In general, xmm requires AVX, ymm requires AVX2.
1599 vaesdec_3 = "rrmo:660F38VDErM",
1600 vaesdeclast_3 = "rrmo:660F38VDFrM",
1601 vaesenc_3 = "rrmo:660F38VDCrM",
1602 vaesenclast_3 = "rrmo:660F38VDDrM",
1603 vaesimc_2 = "rmo:660F38uDBrM",
1604 vaeskeygenassist_3 = "rmio:660F3AuDFrMU",
1605 vlddqu_2 = "rxoy:F20FuF0rM",
1606 vmaskmovdqu_2 = "rro:660FuF7rM",
1607 vmovdqa_2 = "rmoy:660Fu6FrM|mroy:660Fu7FRm",
1608 vmovdqu_2 = "rmoy:F30Fu6FrM|mroy:F30Fu7FRm",
1609 vmovntdq_2 = "xroy:660FuE7Rm",
1610 vmovntdqa_2 = "rxoy:660F38u2ArM",
1611 vmpsadbw_4 = "rrmioy:660F3AV42rMU",
1612 vpabsb_2 = "rmoy:660F38u1CrM",
1613 vpabsd_2 = "rmoy:660F38u1ErM",
1614 vpabsw_2 = "rmoy:660F38u1DrM",
1615 vpackusdw_3 = "rrmoy:660F38V2BrM",
1616 vpalignr_4 = "rrmioy:660F3AV0FrMU",
1617 vpblendvb_4 = "rrmroy:660F3AV4CrMs",
1618 vpblendw_4 = "rrmioy:660F3AV0ErMU",
1619 vpclmulqdq_4 = "rrmio:660F3AV44rMU",
1620 vpcmpeqq_3 = "rrmoy:660F38V29rM",
1621 vpcmpestri_3 = "rmio:660F3Au61rMU",
1622 vpcmpestrm_3 = "rmio:660F3Au60rMU",
1623 vpcmpgtq_3 = "rrmoy:660F38V37rM",
1624 vpcmpistri_3 = "rmio:660F3Au63rMU",
1625 vpcmpistrm_3 = "rmio:660F3Au62rMU",
1626 vpextrb_3 = "rri/do:660F3Au14nRmU|rri/qo:|xri/bo:",
1627 vpextrw_3 = "rri/do:660FuC5rMU|xri/wo:660F3Au15nRmU",
1628 vpextrd_3 = "mri/do:660F3Au16RmU",
1629 vpextrq_3 = "mri/qo:660F3Au16RmU",
1630 vphaddw_3 = "rrmoy:660F38V01rM",
1631 vphaddd_3 = "rrmoy:660F38V02rM",
1632 vphaddsw_3 = "rrmoy:660F38V03rM",
1633 vphminposuw_2 = "rmo:660F38u41rM",
1634 vphsubw_3 = "rrmoy:660F38V05rM",
1635 vphsubd_3 = "rrmoy:660F38V06rM",
1636 vphsubsw_3 = "rrmoy:660F38V07rM",
1637 vpinsrb_4 = "rrri/ood:660F3AV20rMU|rrxi/oob:",
1638 vpinsrw_4 = "rrri/ood:660FVC4rMU|rrxi/oow:",
1639 vpinsrd_4 = "rrmi/ood:660F3AV22rMU",
1640 vpinsrq_4 = "rrmi/ooq:660F3AVX22rMU",
1641 vpmaddubsw_3 = "rrmoy:660F38V04rM",
1642 vpmaxsb_3 = "rrmoy:660F38V3CrM",
1643 vpmaxsd_3 = "rrmoy:660F38V3DrM",
1644 vpmaxuw_3 = "rrmoy:660F38V3ErM",
1645 vpmaxud_3 = "rrmoy:660F38V3FrM",
1646 vpminsb_3 = "rrmoy:660F38V38rM",
1647 vpminsd_3 = "rrmoy:660F38V39rM",
1648 vpminuw_3 = "rrmoy:660F38V3ArM",
1649 vpminud_3 = "rrmoy:660F38V3BrM",
1650 vpmovmskb_2 = "rr/do:660FuD7rM|rr/dy:660FuLD7rM",
1651 vpmovsxbw_2 = "rroy:660F38u20rM|rx/oq:|rx/yo:",
1652 vpmovsxbd_2 = "rroy:660F38u21rM|rx/od:|rx/yq:",
1653 vpmovsxbq_2 = "rroy:660F38u22rM|rx/ow:|rx/yd:",
1654 vpmovsxwd_2 = "rroy:660F38u23rM|rx/oq:|rx/yo:",
1655 vpmovsxwq_2 = "rroy:660F38u24rM|rx/od:|rx/yq:",
1656 vpmovsxdq_2 = "rroy:660F38u25rM|rx/oq:|rx/yo:",
1657 vpmovzxbw_2 = "rroy:660F38u30rM|rx/oq:|rx/yo:",
1658 vpmovzxbd_2 = "rroy:660F38u31rM|rx/od:|rx/yq:",
1659 vpmovzxbq_2 = "rroy:660F38u32rM|rx/ow:|rx/yd:",
1660 vpmovzxwd_2 = "rroy:660F38u33rM|rx/oq:|rx/yo:",
1661 vpmovzxwq_2 = "rroy:660F38u34rM|rx/od:|rx/yq:",
1662 vpmovzxdq_2 = "rroy:660F38u35rM|rx/oq:|rx/yo:",
1663 vpmuldq_3 = "rrmoy:660F38V28rM",
1664 vpmulhrsw_3 = "rrmoy:660F38V0BrM",
1665 vpmulld_3 = "rrmoy:660F38V40rM",
1666 vpshufb_3 = "rrmoy:660F38V00rM",
1667 vpshufd_3 = "rmioy:660Fu70rMU",
1668 vpshufhw_3 = "rmioy:F30Fu70rMU",
1669 vpshuflw_3 = "rmioy:F20Fu70rMU",
1670 vpsignb_3 = "rrmoy:660F38V08rM",
1671 vpsignw_3 = "rrmoy:660F38V09rM",
1672 vpsignd_3 = "rrmoy:660F38V0ArM",
1673 vpslldq_3 = "rrioy:660Fv737mU",
1674 vpsllw_3 = "rrmoy:660FVF1rM|rrioy:660Fv716mU",
1675 vpslld_3 = "rrmoy:660FVF2rM|rrioy:660Fv726mU",
1676 vpsllq_3 = "rrmoy:660FVF3rM|rrioy:660Fv736mU",
1677 vpsraw_3 = "rrmoy:660FVE1rM|rrioy:660Fv714mU",
1678 vpsrad_3 = "rrmoy:660FVE2rM|rrioy:660Fv724mU",
1679 vpsrldq_3 = "rrioy:660Fv733mU",
1680 vpsrlw_3 = "rrmoy:660FVD1rM|rrioy:660Fv712mU",
1681 vpsrld_3 = "rrmoy:660FVD2rM|rrioy:660Fv722mU",
1682 vpsrlq_3 = "rrmoy:660FVD3rM|rrioy:660Fv732mU",
1683 vptest_2 = "rmoy:660F38u17rM",
1684
1685 -- AVX2 integer ops
1686 vbroadcasti128_2 = "rx/yo:660F38u5ArM",
1687 vinserti128_4 = "rrmi/yyo:660F3AV38rMU",
1688 vextracti128_3 = "mri/oy:660F3AuL39RmU",
1689 vpblendd_4 = "rrmioy:660F3AV02rMU",
1690 vpbroadcastb_2 = "rro:660F38u78rM|rx/ob:|rr/yo:|rx/yb:",
1691 vpbroadcastw_2 = "rro:660F38u79rM|rx/ow:|rr/yo:|rx/yw:",
1692 vpbroadcastd_2 = "rro:660F38u58rM|rx/od:|rr/yo:|rx/yd:",
1693 vpbroadcastq_2 = "rro:660F38u59rM|rx/oq:|rr/yo:|rx/yq:",
1694 vpermd_3 = "rrmy:660F38V36rM",
1695 vpermq_3 = "rmiy:660F3AuX00rMU",
1696 -- *vpgather* (!vsib)
1697 vperm2i128_4 = "rrmiy:660F3AV46rMU",
1698 vpmaskmovd_3 = "rrxoy:660F38V8CrM|xrroy:660F38V8ERm",
1699 vpmaskmovq_3 = "rrxoy:660F38VX8CrM|xrroy:660F38VX8ERm",
1700 vpsllvd_3 = "rrmoy:660F38V47rM",
1701 vpsllvq_3 = "rrmoy:660F38VX47rM",
1702 vpsravd_3 = "rrmoy:660F38V46rM",
1703 vpsrlvd_3 = "rrmoy:660F38V45rM",
1704 vpsrlvq_3 = "rrmoy:660F38VX45rM",
1705
1706 -- Intel ADX
1707 adcx_2 = "rmqd:660F38F6rM",
1708 adox_2 = "rmqd:F30F38F6rM",
1709
1710 -- BMI1
1711 andn_3 = "rrmqd:0F38VF2rM",
1712 bextr_3 = "rmrqd:0F38wF7rM",
1713 blsi_2 = "rmqd:0F38vF33m",
1714 blsmsk_2 = "rmqd:0F38vF32m",
1715 blsr_2 = "rmqd:0F38vF31m",
1716 tzcnt_2 = "rmqdw:F30FBCrM",
1717
1718 -- BMI2
1719 bzhi_3 = "rmrqd:0F38wF5rM",
1720 mulx_3 = "rrmqd:F20F38VF6rM",
1721 pdep_3 = "rrmqd:F20F38VF5rM",
1722 pext_3 = "rrmqd:F30F38VF5rM",
1723 rorx_3 = "rmSqd:F20F3AuF0rMS",
1724 sarx_3 = "rmrqd:F30F38wF7rM",
1725 shrx_3 = "rmrqd:F20F38wF7rM",
1726 shlx_3 = "rmrqd:660F38wF7rM",
1727
1728 -- FMA3
1729 vfmaddsub132pd_3 = "rrmoy:660F38VX96rM",
1730 vfmaddsub132ps_3 = "rrmoy:660F38V96rM",
1731 vfmaddsub213pd_3 = "rrmoy:660F38VXA6rM",
1732 vfmaddsub213ps_3 = "rrmoy:660F38VA6rM",
1733 vfmaddsub231pd_3 = "rrmoy:660F38VXB6rM",
1734 vfmaddsub231ps_3 = "rrmoy:660F38VB6rM",
1735
1736 vfmsubadd132pd_3 = "rrmoy:660F38VX97rM",
1737 vfmsubadd132ps_3 = "rrmoy:660F38V97rM",
1738 vfmsubadd213pd_3 = "rrmoy:660F38VXA7rM",
1739 vfmsubadd213ps_3 = "rrmoy:660F38VA7rM",
1740 vfmsubadd231pd_3 = "rrmoy:660F38VXB7rM",
1741 vfmsubadd231ps_3 = "rrmoy:660F38VB7rM",
1742
1743 vfmadd132pd_3 = "rrmoy:660F38VX98rM",
1744 vfmadd132ps_3 = "rrmoy:660F38V98rM",
1745 vfmadd132sd_3 = "rrro:660F38VX99rM|rrx/ooq:",
1746 vfmadd132ss_3 = "rrro:660F38V99rM|rrx/ood:",
1747 vfmadd213pd_3 = "rrmoy:660F38VXA8rM",
1748 vfmadd213ps_3 = "rrmoy:660F38VA8rM",
1749 vfmadd213sd_3 = "rrro:660F38VXA9rM|rrx/ooq:",
1750 vfmadd213ss_3 = "rrro:660F38VA9rM|rrx/ood:",
1751 vfmadd231pd_3 = "rrmoy:660F38VXB8rM",
1752 vfmadd231ps_3 = "rrmoy:660F38VB8rM",
1753 vfmadd231sd_3 = "rrro:660F38VXB9rM|rrx/ooq:",
1754 vfmadd231ss_3 = "rrro:660F38VB9rM|rrx/ood:",
1755
1756 vfmsub132pd_3 = "rrmoy:660F38VX9ArM",
1757 vfmsub132ps_3 = "rrmoy:660F38V9ArM",
1758 vfmsub132sd_3 = "rrro:660F38VX9BrM|rrx/ooq:",
1759 vfmsub132ss_3 = "rrro:660F38V9BrM|rrx/ood:",
1760 vfmsub213pd_3 = "rrmoy:660F38VXAArM",
1761 vfmsub213ps_3 = "rrmoy:660F38VAArM",
1762 vfmsub213sd_3 = "rrro:660F38VXABrM|rrx/ooq:",
1763 vfmsub213ss_3 = "rrro:660F38VABrM|rrx/ood:",
1764 vfmsub231pd_3 = "rrmoy:660F38VXBArM",
1765 vfmsub231ps_3 = "rrmoy:660F38VBArM",
1766 vfmsub231sd_3 = "rrro:660F38VXBBrM|rrx/ooq:",
1767 vfmsub231ss_3 = "rrro:660F38VBBrM|rrx/ood:",
1768
1769 vfnmadd132pd_3 = "rrmoy:660F38VX9CrM",
1770 vfnmadd132ps_3 = "rrmoy:660F38V9CrM",
1771 vfnmadd132sd_3 = "rrro:660F38VX9DrM|rrx/ooq:",
1772 vfnmadd132ss_3 = "rrro:660F38V9DrM|rrx/ood:",
1773 vfnmadd213pd_3 = "rrmoy:660F38VXACrM",
1774 vfnmadd213ps_3 = "rrmoy:660F38VACrM",
1775 vfnmadd213sd_3 = "rrro:660F38VXADrM|rrx/ooq:",
1776 vfnmadd213ss_3 = "rrro:660F38VADrM|rrx/ood:",
1777 vfnmadd231pd_3 = "rrmoy:660F38VXBCrM",
1778 vfnmadd231ps_3 = "rrmoy:660F38VBCrM",
1779 vfnmadd231sd_3 = "rrro:660F38VXBDrM|rrx/ooq:",
1780 vfnmadd231ss_3 = "rrro:660F38VBDrM|rrx/ood:",
1781
1782 vfnmsub132pd_3 = "rrmoy:660F38VX9ErM",
1783 vfnmsub132ps_3 = "rrmoy:660F38V9ErM",
1784 vfnmsub132sd_3 = "rrro:660F38VX9FrM|rrx/ooq:",
1785 vfnmsub132ss_3 = "rrro:660F38V9FrM|rrx/ood:",
1786 vfnmsub213pd_3 = "rrmoy:660F38VXAErM",
1787 vfnmsub213ps_3 = "rrmoy:660F38VAErM",
1788 vfnmsub213sd_3 = "rrro:660F38VXAFrM|rrx/ooq:",
1789 vfnmsub213ss_3 = "rrro:660F38VAFrM|rrx/ood:",
1790 vfnmsub231pd_3 = "rrmoy:660F38VXBErM",
1791 vfnmsub231ps_3 = "rrmoy:660F38VBErM",
1792 vfnmsub231sd_3 = "rrro:660F38VXBFrM|rrx/ooq:",
1793 vfnmsub231ss_3 = "rrro:660F38VBFrM|rrx/ood:",
1794}
1795
1796------------------------------------------------------------------------------
1797
1798-- Arithmetic ops.
1799for name,n in pairs{ add = 0, ["or"] = 1, adc = 2, sbb = 3,
1800 ["and"] = 4, sub = 5, xor = 6, cmp = 7 } do
1801 local n8 = shl(n, 3)
1802 map_op[name.."_2"] = format(
1803 "mr:%02XRm|rm:%02XrM|mI1qdw:81%XmI|mS1qdw:83%XmS|Ri1qdwb:%02Xri|mi1qdwb:81%Xmi",
1804 1+n8, 3+n8, n, n, 5+n8, n)
1805end
1806
1807-- Shift ops.
1808for name,n in pairs{ rol = 0, ror = 1, rcl = 2, rcr = 3,
1809 shl = 4, shr = 5, sar = 7, sal = 4 } do
1810 map_op[name.."_2"] = format("m1:D1%Xm|mC1qdwb:D3%Xm|mi:C1%XmU", n, n, n)
1811end
1812
1813-- Conditional ops.
1814for cc,n in pairs(map_cc) do
1815 map_op["j"..cc.."_1"] = format("J.:n0F8%XJ", n) -- short: 7%X
1816 map_op["set"..cc.."_1"] = format("mb:n0F9%X2m", n)
1817 map_op["cmov"..cc.."_2"] = format("rmqdw:0F4%XrM", n) -- P6+
1818end
1819
1820-- FP arithmetic ops.
1821for name,n in pairs{ add = 0, mul = 1, com = 2, comp = 3,
1822 sub = 4, subr = 5, div = 6, divr = 7 } do
1823 local nc = 0xc0 + shl(n, 3)
1824 local nr = nc + (n < 4 and 0 or (n % 2 == 0 and 8 or -8))
1825 local fn = "f"..name
1826 map_op[fn.."_1"] = format("ff:D8%02Xr|xd:D8%Xm|xq:nDC%Xm", nc, n, n)
1827 if n == 2 or n == 3 then
1828 map_op[fn.."_2"] = format("Fff:D8%02XR|Fx2d:D8%XM|Fx2q:nDC%XM", nc, n, n)
1829 else
1830 map_op[fn.."_2"] = format("Fff:D8%02XR|fFf:DC%02Xr|Fx2d:D8%XM|Fx2q:nDC%XM", nc, nr, n, n)
1831 map_op[fn.."p_1"] = format("ff:DE%02Xr", nr)
1832 map_op[fn.."p_2"] = format("fFf:DE%02Xr", nr)
1833 end
1834 map_op["fi"..name.."_1"] = format("xd:DA%Xm|xw:nDE%Xm", n, n)
1835end
1836
1837-- FP conditional moves.
1838for cc,n in pairs{ b=0, e=1, be=2, u=3, nb=4, ne=5, nbe=6, nu=7 } do
1839 local nc = 0xdac0 + shl(band(n, 3), 3) + shl(band(n, 4), 6)
1840 map_op["fcmov"..cc.."_1"] = format("ff:%04Xr", nc) -- P6+
1841 map_op["fcmov"..cc.."_2"] = format("Fff:%04XR", nc) -- P6+
1842end
1843
1844-- SSE / AVX FP arithmetic ops.
1845for name,n in pairs{ sqrt = 1, add = 8, mul = 9,
1846 sub = 12, min = 13, div = 14, max = 15 } do
1847 map_op[name.."ps_2"] = format("rmo:0F5%XrM", n)
1848 map_op[name.."ss_2"] = format("rro:F30F5%XrM|rx/od:", n)
1849 map_op[name.."pd_2"] = format("rmo:660F5%XrM", n)
1850 map_op[name.."sd_2"] = format("rro:F20F5%XrM|rx/oq:", n)
1851 if n ~= 1 then
1852 map_op["v"..name.."ps_3"] = format("rrmoy:0FV5%XrM", n)
1853 map_op["v"..name.."ss_3"] = format("rrro:F30FV5%XrM|rrx/ood:", n)
1854 map_op["v"..name.."pd_3"] = format("rrmoy:660FV5%XrM", n)
1855 map_op["v"..name.."sd_3"] = format("rrro:F20FV5%XrM|rrx/ooq:", n)
1856 end
1857end
1858
1859-- SSE2 / AVX / AVX2 integer arithmetic ops (66 0F leaf).
1860for name,n in pairs{
1861 paddb = 0xFC, paddw = 0xFD, paddd = 0xFE, paddq = 0xD4,
1862 paddsb = 0xEC, paddsw = 0xED, packssdw = 0x6B,
1863 packsswb = 0x63, packuswb = 0x67, paddusb = 0xDC,
1864 paddusw = 0xDD, pand = 0xDB, pandn = 0xDF, pavgb = 0xE0,
1865 pavgw = 0xE3, pcmpeqb = 0x74, pcmpeqd = 0x76,
1866 pcmpeqw = 0x75, pcmpgtb = 0x64, pcmpgtd = 0x66,
1867 pcmpgtw = 0x65, pmaddwd = 0xF5, pmaxsw = 0xEE,
1868 pmaxub = 0xDE, pminsw = 0xEA, pminub = 0xDA,
1869 pmulhuw = 0xE4, pmulhw = 0xE5, pmullw = 0xD5,
1870 pmuludq = 0xF4, por = 0xEB, psadbw = 0xF6, psubb = 0xF8,
1871 psubw = 0xF9, psubd = 0xFA, psubq = 0xFB, psubsb = 0xE8,
1872 psubsw = 0xE9, psubusb = 0xD8, psubusw = 0xD9,
1873 punpckhbw = 0x68, punpckhwd = 0x69, punpckhdq = 0x6A,
1874 punpckhqdq = 0x6D, punpcklbw = 0x60, punpcklwd = 0x61,
1875 punpckldq = 0x62, punpcklqdq = 0x6C, pxor = 0xEF
1876} do
1877 map_op[name.."_2"] = format("rmo:660F%02XrM", n)
1878 map_op["v"..name.."_3"] = format("rrmoy:660FV%02XrM", n)
1879end
1880
1881------------------------------------------------------------------------------
1882
1883local map_vexarg = { u = false, v = 1, V = 2, w = 3 }
1884
1885-- Process pattern string.
1886local function dopattern(pat, args, sz, op, needrex)
1887 local digit, addin, vex
1888 local opcode = 0
1889 local szov = sz
1890 local narg = 1
1891 local rex = 0
1892
1893 -- Limit number of section buffer positions used by a single dasm_put().
1894 -- A single opcode needs a maximum of 6 positions.
1895 if secpos+6 > maxsecpos then wflush() end
1896
1897 -- Process each character.
1898 for c in gmatch(pat.."|", ".") do
1899 if match(c, "%x") then -- Hex digit.
1900 digit = byte(c) - 48
1901 if digit > 48 then digit = digit - 39
1902 elseif digit > 16 then digit = digit - 7 end
1903 opcode = opcode*16 + digit
1904 addin = nil
1905 elseif c == "n" then -- Disable operand size mods for opcode.
1906 szov = nil
1907 elseif c == "X" then -- Force REX.W.
1908 rex = 8
1909 elseif c == "L" then -- Force VEX.L.
1910 vex.l = true
1911 elseif c == "r" then -- Merge 1st operand regno. into opcode.
1912 addin = args[1]; opcode = opcode + (addin.reg % 8)
1913 if narg < 2 then narg = 2 end
1914 elseif c == "R" then -- Merge 2nd operand regno. into opcode.
1915 addin = args[2]; opcode = opcode + (addin.reg % 8)
1916 narg = 3
1917 elseif c == "m" or c == "M" then -- Encode ModRM/SIB.
1918 local s
1919 if addin then
1920 s = addin.reg
1921 opcode = opcode - band(s, 7) -- Undo regno opcode merge.
1922 else
1923 s = band(opcode, 15) -- Undo last digit.
1924 opcode = shr(opcode, 4)
1925 end
1926 local nn = c == "m" and 1 or 2
1927 local t = args[nn]
1928 if narg <= nn then narg = nn + 1 end
1929 if szov == "q" and rex == 0 then rex = rex + 8 end
1930 if t.reg and t.reg > 7 then rex = rex + 1 end
1931 if t.xreg and t.xreg > 7 then rex = rex + 2 end
1932 if s > 7 then rex = rex + 4 end
1933 if needrex then rex = rex + 16 end
1934 local psz, sk = wputop(szov, opcode, rex, vex, s < 0, t.vreg or t.vxreg)
1935 opcode = nil
1936 local imark = sub(pat, -1) -- Force a mark (ugly).
1937 -- Put ModRM/SIB with regno/last digit as spare.
1938 wputmrmsib(t, imark, s, addin and addin.vreg, psz, sk)
1939 addin = nil
1940 elseif map_vexarg[c] ~= nil then -- Encode using VEX prefix
1941 local b = band(opcode, 255); opcode = shr(opcode, 8)
1942 local m = 1
1943 if b == 0x38 then m = 2
1944 elseif b == 0x3a then m = 3 end
1945 if m ~= 1 then b = band(opcode, 255); opcode = shr(opcode, 8) end
1946 if b ~= 0x0f then
1947 werror("expected `0F', `0F38', or `0F3A' to precede `"..c..
1948 "' in pattern `"..pat.."' for `"..op.."'")
1949 end
1950 local v = map_vexarg[c]
1951 if v then v = remove(args, v) end
1952 b = band(opcode, 255)
1953 local p = 0
1954 if b == 0x66 then p = 1
1955 elseif b == 0xf3 then p = 2
1956 elseif b == 0xf2 then p = 3 end
1957 if p ~= 0 then opcode = shr(opcode, 8) end
1958 if opcode ~= 0 then wputop(nil, opcode, 0); opcode = 0 end
1959 vex = { m = m, p = p, v = v }
1960 else
1961 if opcode then -- Flush opcode.
1962 if szov == "q" and rex == 0 then rex = rex + 8 end
1963 if needrex then rex = rex + 16 end
1964 if addin and addin.reg == -1 then
1965 local psz, sk = wputop(szov, opcode - 7, rex, vex, true)
1966 wvreg("opcode", addin.vreg, psz, sk)
1967 else
1968 if addin and addin.reg > 7 then rex = rex + 1 end
1969 wputop(szov, opcode, rex, vex)
1970 end
1971 opcode = nil
1972 end
1973 if c == "|" then break end
1974 if c == "o" then -- Offset (pure 32 bit displacement).
1975 wputdarg(args[1].disp); if narg < 2 then narg = 2 end
1976 elseif c == "O" then
1977 wputdarg(args[2].disp); narg = 3
1978 else
1979 -- Anything else is an immediate operand.
1980 local a = args[narg]
1981 narg = narg + 1
1982 local mode, imm = a.mode, a.imm
1983 if mode == "iJ" and not match(x64 and "J" or "iIJ", c) then
1984 werror("bad operand size for label")
1985 end
1986 if c == "S" then
1987 wputsbarg(imm)
1988 elseif c == "U" then
1989 wputbarg(imm)
1990 elseif c == "W" then
1991 wputwarg(imm)
1992 elseif c == "i" or c == "I" then
1993 if mode == "iJ" then
1994 wputlabel("IMM_", imm, 1)
1995 elseif mode == "iI" and c == "I" then
1996 waction(sz == "w" and "IMM_WB" or "IMM_DB", imm)
1997 else
1998 wputszarg(sz, imm)
1999 end
2000 elseif c == "J" then
2001 if mode == "iPJ" then
2002 waction("REL_A", imm) -- !x64 (secpos)
2003 else
2004 wputlabel("REL_", imm, 2)
2005 end
2006 elseif c == "s" then
2007 local reg = a.reg
2008 if reg < 0 then
2009 wputb(0)
2010 wvreg("imm.hi", a.vreg)
2011 else
2012 wputb(shl(reg, 4))
2013 end
2014 else
2015 werror("bad char `"..c.."' in pattern `"..pat.."' for `"..op.."'")
2016 end
2017 end
2018 end
2019 end
2020end
2021
2022------------------------------------------------------------------------------
2023
2024-- Mapping of operand modes to short names. Suppress output with '#'.
2025local map_modename = {
2026 r = "reg", R = "eax", C = "cl", x = "mem", m = "mrm", i = "imm",
2027 f = "stx", F = "st0", J = "lbl", ["1"] = "1",
2028 I = "#", S = "#", O = "#",
2029}
2030
2031-- Return a table/string showing all possible operand modes.
2032local function templatehelp(template, nparams)
2033 if nparams == 0 then return "" end
2034 local t = {}
2035 for tm in gmatch(template, "[^%|]+") do
2036 local s = map_modename[sub(tm, 1, 1)]
2037 s = s..gsub(sub(tm, 2, nparams), ".", function(c)
2038 return ", "..map_modename[c]
2039 end)
2040 if not match(s, "#") then t[#t+1] = s end
2041 end
2042 return t
2043end
2044
2045-- Match operand modes against mode match part of template.
2046local function matchtm(tm, args)
2047 for i=1,#args do
2048 if not match(args[i].mode, sub(tm, i, i)) then return end
2049 end
2050 return true
2051end
2052
2053-- Handle opcodes defined with template strings.
2054map_op[".template__"] = function(params, template, nparams)
2055 if not params then return templatehelp(template, nparams) end
2056 local args = {}
2057
2058 -- Zero-operand opcodes have no match part.
2059 if #params == 0 then
2060 dopattern(template, args, "d", params.op, nil)
2061 return
2062 end
2063
2064 -- Determine common operand size (coerce undefined size) or flag as mixed.
2065 local sz, szmix, needrex
2066 for i,p in ipairs(params) do
2067 args[i] = parseoperand(p)
2068 local nsz = args[i].opsize
2069 if nsz then
2070 if sz and sz ~= nsz then szmix = true else sz = nsz end
2071 end
2072 local nrex = args[i].needrex
2073 if nrex ~= nil then
2074 if needrex == nil then
2075 needrex = nrex
2076 elseif needrex ~= nrex then
2077 werror("bad mix of byte-addressable registers")
2078 end
2079 end
2080 end
2081
2082 -- Try all match:pattern pairs (separated by '|').
2083 local gotmatch, lastpat
2084 for tm in gmatch(template, "[^%|]+") do
2085 -- Split off size match (starts after mode match) and pattern string.
2086 local szm, pat = match(tm, "^(.-):(.*)$", #args+1)
2087 if pat == "" then pat = lastpat else lastpat = pat end
2088 if matchtm(tm, args) then
2089 local prefix = sub(szm, 1, 1)
2090 if prefix == "/" then -- Exactly match leading operand sizes.
2091 for i = #szm,1,-1 do
2092 if i == 1 then
2093 dopattern(pat, args, sz, params.op, needrex) -- Process pattern.
2094 return
2095 elseif args[i-1].opsize ~= sub(szm, i, i) then
2096 break
2097 end
2098 end
2099 else -- Match common operand size.
2100 local szp = sz
2101 if szm == "" then szm = x64 and "qdwb" or "dwb" end -- Default sizes.
2102 if prefix == "1" then szp = args[1].opsize; szmix = nil
2103 elseif prefix == "2" then szp = args[2].opsize; szmix = nil end
2104 if not szmix and (prefix == "." or match(szm, szp or "#")) then
2105 dopattern(pat, args, szp, params.op, needrex) -- Process pattern.
2106 return
2107 end
2108 end
2109 gotmatch = true
2110 end
2111 end
2112
2113 local msg = "bad operand mode"
2114 if gotmatch then
2115 if szmix then
2116 msg = "mixed operand size"
2117 else
2118 msg = sz and "bad operand size" or "missing operand size"
2119 end
2120 end
2121
2122 werror(msg.." in `"..opmodestr(params.op, args).."'")
2123end
2124
2125------------------------------------------------------------------------------
2126
2127-- x64-specific opcode for 64 bit immediates and displacements.
2128if x64 then
2129 function map_op.mov64_2(params)
2130 if not params then return { "reg, imm", "reg, [disp]", "[disp], reg" } end
2131 if secpos+2 > maxsecpos then wflush() end
2132 local opcode, op64, sz, rex, vreg
2133 local op64 = match(params[1], "^%[%s*(.-)%s*%]$")
2134 if op64 then
2135 local a = parseoperand(params[2])
2136 if a.mode ~= "rmR" then werror("bad operand mode") end
2137 sz = a.opsize
2138 rex = sz == "q" and 8 or 0
2139 opcode = 0xa3
2140 else
2141 op64 = match(params[2], "^%[%s*(.-)%s*%]$")
2142 local a = parseoperand(params[1])
2143 if op64 then
2144 if a.mode ~= "rmR" then werror("bad operand mode") end
2145 sz = a.opsize
2146 rex = sz == "q" and 8 or 0
2147 opcode = 0xa1
2148 else
2149 if sub(a.mode, 1, 1) ~= "r" or a.opsize ~= "q" then
2150 werror("bad operand mode")
2151 end
2152 op64 = params[2]
2153 if a.reg == -1 then
2154 vreg = a.vreg
2155 opcode = 0xb8
2156 else
2157 opcode = 0xb8 + band(a.reg, 7)
2158 end
2159 rex = a.reg > 7 and 9 or 8
2160 end
2161 end
2162 local psz, sk = wputop(sz, opcode, rex, nil, vreg)
2163 wvreg("opcode", vreg, psz, sk)
2164 waction("IMM_D", format("(unsigned int)(%s)", op64))
2165 waction("IMM_D", format("(unsigned int)((%s)>>32)", op64))
2166 end
2167end
2168
2169------------------------------------------------------------------------------
2170
2171-- Pseudo-opcodes for data storage.
2172local function op_data(params)
2173 if not params then return "imm..." end
2174 local sz = sub(params.op, 2, 2)
2175 if sz == "l" then sz = "d" elseif sz == "a" then sz = addrsize end
2176 for _,p in ipairs(params) do
2177 local a = parseoperand(p, sz == "q")
2178 if sub(a.mode, 1, 1) ~= "i" or (a.opsize and a.opsize ~= sz) then
2179 werror("bad mode or size in `"..p.."'")
2180 end
2181 if a.mode == "iJ" then
2182 wputlabel("IMM_", a.imm, 1)
2183 elseif sz == "q" then
2184 wputqarg(a.imm)
2185 else
2186 wputszarg(sz, a.imm)
2187 end
2188 if secpos+2 > maxsecpos then wflush() end
2189 end
2190end
2191
2192map_op[".byte_*"] = op_data
2193map_op[".sbyte_*"] = op_data
2194map_op[".word_*"] = op_data
2195map_op[".dword_*"] = op_data
2196map_op[".qword_*"] = op_data
2197map_op[".aword_*"] = op_data
2198map_op[".long_*"] = op_data
2199map_op[".quad_*"] = op_data
2200map_op[".addr_*"] = op_data
2201
2202------------------------------------------------------------------------------
2203
2204-- Pseudo-opcode to mark the position where the action list is to be emitted.
2205map_op[".actionlist_1"] = function(params)
2206 if not params then return "cvar" end
2207 local name = params[1] -- No syntax check. You get to keep the pieces.
2208 wline(function(out) writeactions(out, name) end)
2209end
2210
2211-- Pseudo-opcode to mark the position where the global enum is to be emitted.
2212map_op[".globals_1"] = function(params)
2213 if not params then return "prefix" end
2214 local prefix = params[1] -- No syntax check. You get to keep the pieces.
2215 wline(function(out) writeglobals(out, prefix) end)
2216end
2217
2218-- Pseudo-opcode to mark the position where the global names are to be emitted.
2219map_op[".globalnames_1"] = function(params)
2220 if not params then return "cvar" end
2221 local name = params[1] -- No syntax check. You get to keep the pieces.
2222 wline(function(out) writeglobalnames(out, name) end)
2223end
2224
2225-- Pseudo-opcode to mark the position where the extern names are to be emitted.
2226map_op[".externnames_1"] = function(params)
2227 if not params then return "cvar" end
2228 local name = params[1] -- No syntax check. You get to keep the pieces.
2229 wline(function(out) writeexternnames(out, name) end)
2230end
2231
2232------------------------------------------------------------------------------
2233
2234-- Label pseudo-opcode (converted from trailing colon form).
2235map_op[".label_2"] = function(params)
2236 if not params then return "[1-9] | ->global | =>pcexpr [, addr]" end
2237 if secpos+2 > maxsecpos then wflush() end
2238 local a = parseoperand(params[1])
2239 local mode, imm = a.mode, a.imm
2240 if type(imm) == "number" and (mode == "iJ" or (imm >= 1 and imm <= 9)) then
2241 -- Local label (1: ... 9:) or global label (->global:).
2242 waction("LABEL_LG", nil, 1)
2243 wputxb(imm)
2244 elseif mode == "iJ" then
2245 -- PC label (=>pcexpr:).
2246 waction("LABEL_PC", imm)
2247 else
2248 werror("bad label definition")
2249 end
2250 -- SETLABEL must immediately follow LABEL_LG/LABEL_PC.
2251 local addr = params[2]
2252 if addr then
2253 local a = parseoperand(addr)
2254 if a.mode == "iPJ" then
2255 waction("SETLABEL", a.imm)
2256 else
2257 werror("bad label assignment")
2258 end
2259 end
2260end
2261map_op[".label_1"] = map_op[".label_2"]
2262
2263------------------------------------------------------------------------------
2264
2265-- Alignment pseudo-opcode.
2266map_op[".align_1"] = function(params)
2267 if not params then return "numpow2" end
2268 if secpos+1 > maxsecpos then wflush() end
2269 local align = tonumber(params[1]) or map_opsizenum[map_opsize[params[1]]]
2270 if align then
2271 local x = align
2272 -- Must be a power of 2 in the range (2 ... 256).
2273 for i=1,8 do
2274 x = x / 2
2275 if x == 1 then
2276 waction("ALIGN", nil, 1)
2277 wputxb(align-1) -- Action byte is 2**n-1.
2278 return
2279 end
2280 end
2281 end
2282 werror("bad alignment")
2283end
2284
2285-- Spacing pseudo-opcode.
2286map_op[".space_2"] = function(params)
2287 if not params then return "num [, filler]" end
2288 if secpos+1 > maxsecpos then wflush() end
2289 waction("SPACE", params[1])
2290 local fill = params[2]
2291 if fill then
2292 fill = tonumber(fill)
2293 if not fill or fill < 0 or fill > 255 then werror("bad filler") end
2294 end
2295 wputxb(fill or 0)
2296end
2297map_op[".space_1"] = map_op[".space_2"]
2298
2299------------------------------------------------------------------------------
2300
2301-- Pseudo-opcode for (primitive) type definitions (map to C types).
2302map_op[".type_3"] = function(params, nparams)
2303 if not params then
2304 return nparams == 2 and "name, ctype" or "name, ctype, reg"
2305 end
2306 local name, ctype, reg = params[1], params[2], params[3]
2307 if not match(name, "^[%a_][%w_]*$") then
2308 werror("bad type name `"..name.."'")
2309 end
2310 local tp = map_type[name]
2311 if tp then
2312 werror("duplicate type `"..name.."'")
2313 end
2314 if reg and not map_reg_valid_base[reg] then
2315 werror("bad base register `"..(map_reg_rev[reg] or reg).."'")
2316 end
2317 -- Add #type to defines. A bit unclean to put it in map_archdef.
2318 map_archdef["#"..name] = "sizeof("..ctype..")"
2319 -- Add new type and emit shortcut define.
2320 local num = ctypenum + 1
2321 map_type[name] = {
2322 ctype = ctype,
2323 ctypefmt = format("Dt%X(%%s)", num),
2324 reg = reg,
2325 }
2326 wline(format("#define Dt%X(_V) (int)(ptrdiff_t)&(((%s *)0)_V)", num, ctype))
2327 ctypenum = num
2328end
2329map_op[".type_2"] = map_op[".type_3"]
2330
2331-- Dump type definitions.
2332local function dumptypes(out, lvl)
2333 local t = {}
2334 for name in pairs(map_type) do t[#t+1] = name end
2335 sort(t)
2336 out:write("Type definitions:\n")
2337 for _,name in ipairs(t) do
2338 local tp = map_type[name]
2339 local reg = tp.reg and map_reg_rev[tp.reg] or ""
2340 out:write(format(" %-20s %-20s %s\n", name, tp.ctype, reg))
2341 end
2342 out:write("\n")
2343end
2344
2345------------------------------------------------------------------------------
2346
2347-- Set the current section.
2348function _M.section(num)
2349 waction("SECTION")
2350 wputxb(num)
2351 wflush(true) -- SECTION is a terminal action.
2352end
2353
2354------------------------------------------------------------------------------
2355
2356-- Dump architecture description.
2357function _M.dumparch(out)
2358 out:write(format("DynASM %s version %s, released %s\n\n",
2359 _info.arch, _info.version, _info.release))
2360 dumpregs(out)
2361 dumpactions(out)
2362end
2363
2364-- Dump all user defined elements.
2365function _M.dumpdef(out, lvl)
2366 dumptypes(out, lvl)
2367 dumpglobals(out, lvl)
2368 dumpexterns(out, lvl)
2369end
2370
2371------------------------------------------------------------------------------
2372
2373-- Pass callbacks from/to the DynASM core.
2374function _M.passcb(wl, we, wf, ww)
2375 wline, werror, wfatal, wwarn = wl, we, wf, ww
2376 return wflush
2377end
2378
2379-- Setup the arch-specific module.
2380function _M.setup(arch, opt)
2381 g_arch, g_opt = arch, opt
2382end
2383
2384-- Merge the core maps and the arch-specific maps.
2385function _M.mergemaps(map_coreop, map_def)
2386 setmetatable(map_op, { __index = map_coreop })
2387 setmetatable(map_def, { __index = map_archdef })
2388 return map_op, map_def
2389end
2390
2391return _M
2392
2393------------------------------------------------------------------------------
2394